我试图在不同的滞后期对过去的新员工进行未来增长(独立变量)的回归,I为I是1:24,但在运行回归时我一直遇到问题。我将感谢帮助我得到的错误或关于如何运行回归的任何更好的建议。
由于我需要计算与滞后期相对应的时间框架内的未来增长,我计算并存储了时间段1:24 in的增长,列名为growth_m1, growth_m2,…在同一个数据表中使用下面的公式:
n <- 24
for (i in 1:n) {
growth_data[[paste0("growth_m", i)]] <- c(growth_data$sales - lag(growth_data$sales,i))
}
我的数据是这样的:
newemployees growth_m1 growth_m2 growth_m3
-0.03 NA NA NA
1.01 0.3 NA NA
0.72 0.0 0.3 NA
-1.21 0.7 0.7 1.0
-2.51 0.0 0.7 0.7
2.14 0.3 0.3 1.0
-5.66 0.0 0.3 0.3
现在我需要对滞后(growth_data$newemployees, I)运行growth_mi列的回归,并将系数存储在1点24分I的数据框架中。我已经尝试了下面的公式,但我得到一个错误:
model <- list()
for (i in 1:24){
model[[i]] = lm(growth_data[,names(growth_data)[grepl(paste0("growth_m", i),names(growth_data))]][1] ~ lag(growth_data$newemployees,i), data=growth_data)
}
model.frame.default(formula = growth_data[,names(growth_data))[grepl(paste0("growth_m",:无效类型(列表)变量'growth_data[,names(growth_data)][1]'
如何运行此回归并正确存储数据?我是一个非常新的R,所以会感谢任何帮助!
使用内置到R中的anscombe
作为示例(因为问题中缺少输入)首先创建公式fo
的字符向量,然后使用lapply
运行每个公式,给出models
中的lm
模型。以后请阅读r标签页面顶部的信息,并提供完整的可复制示例。这使用了坍缩包中的flag
,它与base R中的lag
不同- base Rlag
不适用于普通向量。使用do.call
的目的是显示如下所示的Call:行。如果我们只使用更简单的run_lm <- function(fo) lm(formula(fo), anscombe)
,结果将是正确的;但是,Call:行实际上显示的是formula(fo)
。
library(collapse)
fo <- sprintf("y%d ~ x%d + flag(y%d)", 1:4, 1:4, 1:4)
run_lm <- function(fo) do.call("lm", list(formula(fo), quote(anscombe)))
models <- lapply(fo, run_lm)
models
为
[[1]]
Call:
lm(formula = y1 ~ x1 + flag(y1), data = anscombe)
Coefficients:
(Intercept) x1 flag(y1)
4.7739 0.4849 -0.2138
[[2]]
Call:
lm(formula = y2 ~ x2 + flag(y2), data = anscombe)
...snip...
注意
anscombe
看起来像这样:
> anscombe
x1 x2 x3 x4 y1 y2 y3 y4
1 10 10 10 8 8.04 9.14 7.46 6.58
2 8 8 8 8 6.95 8.14 6.77 5.76
3 13 13 13 8 7.58 8.74 12.74 7.71
4 9 9 9 8 8.81 8.77 7.11 8.84
5 11 11 11 8 8.33 9.26 7.81 8.47
6 14 14 14 8 9.96 8.10 8.84 7.04
7 6 6 6 8 7.24 6.13 6.08 5.25
8 4 4 4 19 4.26 3.10 5.39 12.50
9 12 12 12 8 10.84 9.13 8.15 5.56
10 7 7 7 8 4.82 7.26 6.42 7.91
11 5 5 5 8 5.68 4.74 5.73 6.89