簡體   English   中英

具有持續數據的線性回歸,在 R 中

[英]Linear regression with ongoing data, in R

型號

y ~ x1 + x2 + x3

約 1000 行

我想做的是“一步一步”做預測

使用 0:20 行預測 21:30 的 y,然后使用 11:30 預測 31:40 的 y,依此類推。

您可以使用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, 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)

請注意,列表中的最后 30 個條目為 NULL,因為您只查看完整的窗口 [30 個訓練和測試觀察值]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM