持续数据的线性回归,R
模特儿 大约1000行 我想做的是“一步一步”做一个预测持续数据的线性回归,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
使用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)