r语言 - 创建具有滚动线性模型系数的列



我需要在变量和时间之间执行24个月的滚动线性回归,并将B1系数保存在一列上。我可以做滚动回归,但我不知道如何保存B1结果在我的原始数据框架。下面是一个可复制的例子:

date <- seq(as.Date("2011-01-01"), as.Date("2012-01-01"), by="days")
set.seed(8)
df <- as.data.frame(date) %>%
mutate(value = runif(366, min = 0, max = 100))
#Estimate rolling linear regression coef when t = 24
nr <- nrow(df)
reg <- function(ix) coef(lm(value ~ date, df, subset = ix)); rollapplyr(1:nr, 24, reg, fill = NA)
#How to save B1 results in a column of the data frame?

有人知道怎么做吗?提前感谢!

设B1为回归线斜率:

df %>% 
mutate(slope = rollapplyr(1:n(), 24, function(ix) reg(ix)[[2]], fill = NA))

更新x应该是ix。也使用n()来避免使用nr. Have fixed.

这可能是更好的做法,lm(.)的值,而不是接触df。此外,rollapplyr可以在框架上工作,行方向,使用by.column=FALSE,尽管一个捕获是它将所有内容转换为最高类;为了解决这个问题,我们需要先将date转换为numeric

reg2 <- function(X) coef(lm(value ~ date, data = as.data.frame(X)))
reg2 <- function(X) setNames(coef(lm(value ~ date, data = data.frame(X))), c("intercept", "coef_date"))
df %>%
bind_cols(rollapplyr(transmute(., value, date=as.numeric(date)),
24, FUN = reg2, by.column = FALSE, fill = NA)) %>%
tail()
#           date    value intercept  coef_date
# 361 2011-12-27 10.48895 -7016.084  0.4613276
# 362 2011-12-28 45.51299 -1602.472  0.1080812
# 363 2011-12-29 35.17561 -2635.868  0.1753899
# 364 2011-12-30 44.89097 -8457.421  0.5550818
# 365 2011-12-31 58.28106 -3354.462  0.2222435
# 366 2012-01-01 22.91829  6228.027 -0.4029083

最新更新