[英]get the coefficients and intercept value of the last X days of data from a lm model in R and repeat for the next day and create a dataframe with it
我想創建最后 X 天的系數並在那天截取並粘貼它,然后移至第二天並再次粘貼最后 X 天的系數並截取等等。
我使用 R 附帶的數據集,稱為經濟學
這是我到目前為止的代碼
library(plyr)
library(readr)
library(dplyr)
library(caret)
library(ggplot2)
library(repr)
dat <- economics
drops <- c("date")
dat <- dat[ , !(names(dat) %in% drops)]
cols = c('pce', 'pop', 'psavert', 'uempmed')
pre_proc_val <- preProcess(dat[,cols], method = c("center", "scale"))
dat[,cols] = predict(pre_proc_val, dat[,cols])
###### Linear Regression
number_days = 30
lr = lm(unemploy ~ uempmed + psavert + pop + pce, data = dat)
dataframecoefficients <- as.data.frame(lr$coefficients)
這段代碼會給我所有數據的系數,但我需要的是從第一行抓取數據,直到number_days
的值計算系數並截取那條數據並將其粘貼到第 30 行旁邊,然后它將移動到第 31 行,重復該過程並將值粘貼到第 31 行,依此類推,直到到達文件末尾
最終結果看起來像這樣
ce pop psavert uempmed unemploy (Intercept) uempmed psavert pop pce
27 -1.1827734 -1.4739945 1.0231339 -0.951801535 3040 NA NA NA NA NA
28 -1.1812833 -1.4682151 0.9556616 -1.00050309 3049 NA NA NA NA NA
29 -1.1807210 -1.4628175 1.0231339 -0.927450756 2856 NA NA NA NA NA
30 -1.1800743 -1.4580468 1.0906062 -0.976152314 2884 1771 2343 3244 232 -34
31 -1.1784155 -1.4533034 1.0906062 -0.976152314 3201 1770 2234 3100 200 -40
.. .. ... .... .... ... ... ... ... .. ..
使用 dplyr 或類似的東西有效率嗎
這是基礎 R 中的一種方法:
dat <- as.data.frame(dat)
new_cols <- c('Intercept', paste0(cols, '_predict'))
dat[new_cols] <- NA
inds <- nrow(dat) - number_days
dat[(number_days+1):nrow(dat), new_cols] <- do.call(rbind, lapply(seq(inds), function(x) {
lr = lm(unemploy ~ uempmed + psavert + pop + pce, data = dat[x:(x + number_days - 1), ])
t(lr$coefficients)
}))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.