Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
持续数据的线性回归,R_R_Loops_Regression_Lm - Fatal编程技术网

持续数据的线性回归,R

持续数据的线性回归,R,r,loops,regression,lm,R,Loops,Regression,Lm,模特儿 大约1000行 我想做的是“一步一步”做一个预测 使用0:20行预测21:30的y,然后使用11:30预测31:40的y,依此类推。您可以使用预测功能: y ~ x1 + x2 + x3 编辑:要更改循环中训练数据的范围,请执行以下操作: mod = lm(y ~ ., data=df[1:990,]) pred = predict(mod, newdata=df[991:1000,2:4]) 你在找这样的东西吗 index = seq(10,990,10) pred = matri

模特儿

大约1000行

我想做的是“一步一步”做一个预测


使用0:20行预测21:30的y,然后使用11:30预测31:40的y,依此类推。

您可以使用
预测功能:

y ~ x1 + x2 + x3
编辑:要更改循环中训练数据的范围,请执行以下操作:

mod = lm(y ~ ., data=df[1:990,])
pred = predict(mod, newdata=df[991:1000,2:4])

你在找这样的东西吗

index = seq(10,990,10)
pred = matrix(nrow=10, ncol=length(index)) 

for(i in index){
  mod = lm(y ~ ., data=df[1:i,])
  pred[,i/10] = predict(mod, newdata=df[(i+1):(i+10),2:4])
  MSE[i/10] = sum((df$y[(i+1):(i+10)]-pred[,i/10])^2)}

mean(MSE)

请注意,列表中的最后30个条目为空,因为您只查看完整的窗口[30个带培训和测试的观察]

在“使用最后20行预测未来10个结果”中,您所说的“使用最后20行”是什么意思?此外,您应该添加您尝试的代码,以及一些我们要处理的数据(从您的DF的第一行,尝试使用<代码> DPUT <代码>函数),您可以考虑在培训和验证数据集中使用数据集的随机2/第三分割。然后在训练数据集上训练一个线性模型,并在验证数据集上验证它。根据您的数据集和想法,它可能更有意义。我以前使用过lm函数,结果很糟糕,我想尝试的是在循环中进行“逐步”回归,我使用0:20预测20:30,然后10:30预测30:40等等,但非常感谢您的快速回答检查它现在是否有效。如果可以,请添加一些数据,这样我可以在回答之前对其进行测试。谢谢,我会尝试一下。我的索引错误,只是再次编辑了。还添加了循环内的MSE计算。
# set up mock data
set.seed(1)
df <- data.frame(y = rnorm(1000),
                 x1 = rnorm(1000),
                 x2 = rnorm(1000),
                 x3 = rnorm(1000))

# for loop
prd <- list()

for(i in 1:970){
 
 # training data
 trn <- df[i:(i+20), ]

 # test data
 tst <- df[(i+21):(i+30), ]
 
 # lm model 
 mdl <- lm(y ~ x1 + x2 + x3, trn)

 # append a list of data.frame with both predicted and actual values
 # for later confrontation
 prd[[i]] <- data.frame(prd = predict(mdl, tst[-1]),
                        act = tst[[1]])
 
}

# your list
prd
# define here your model and how you wanna handle the preditions
sliding_lm <- function(..., frm, n_trn, n_tst){

 df <- data.frame(...)
 trn <- df[1:n_trn, ]
 tst <- df[n_trn+1:n_tst, ]
 
 mdl <- lm(y ~ x1 + x2 + x3, trn)
 data.frame(prd = predict(mdl, tst[-1]),
            act = tst[[1]])
 
}

n_trn <- 20 # number of training obs
n_tst <- 10 # number of test obs
frm <- y ~ x1 + x2 + x3 # formula of your model

prd <- slider::pslide(df, sliding_lm, 
                      frm = frm,
                      n_trn = n_trn,
                      n_tst = n_tst,
                      .after = n_trn + n_tst, 
                      .complete = TRUE)