如何解决在R中使用正在进行的数据进行线性回归
Modell
y ~ x1 + x2 + x3
约1000行
我想做的是“逐步”进行预测
使用第0:20行预测y为21:30,然后使用11:30预测y为31:40,依此类推。
解决方法
您可以使用predict
函数:
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)
,
您是否正在寻找类似的东西?
# 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
您也可以使用slider
软件包尝试一些更奇特的事情:
# 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,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)
请注意,列表中的最后30个条目为NULL,因为您仅查看完整的窗口[经过培训和测试的30个观察结果]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。