具有许多因变量的多元多元线性回归

时间:2018-03-24 11:37:33

标签: r

如果存在大量因变量,那么如何运行多元线性回归,比如在我的情况下222确切地说?我想对222个不同公司的几个回归量的某些值进行回归。

我知道我可以这样做。

y <- cbind(y1, y2, y3... yn)
fit <- lm(y ~ X1 + X2 + ... Xn)

但除了手工编写cbind(y1, y2, y3, ...y222)之外,必须有一种聪明的方法来压缩我的专栏 - 对吗?

我已经尝试cbind(vol[, 2:223])但是将其放在y中并赋予lm()函数只会产生Error in model.frame.default(formula = y ~ RMF + SMB + HML, drop.unused.levels = TRUE) : invalid type (list) for variable 'y'

对R不太熟悉,所以我感谢我能为论文提供的所有帮助!请多多包涵。

2 个答案:

答案 0 :(得分:1)

下面我们使用内置的anscombe数据框作为示例。

1)关键部分是在公式的左侧使用矩阵而不是数据帧。在下面的示例中,我们定义了因变量的矩阵y,然后将其与lm一起使用:

y <- as.matrix(anscombe[5:8])
lm(y ~ x1 + x2 + x3 + x4, anscombe)

1a)或者如果还有很多自变量:

lm(y ~ ., anscombe[1:4])

2)可以替代使用lm.fit。请注意,它不会自动添加拦截,因此我们添加一个:

m <- as.matrix(anscombe)
lm.fit(cbind(Intercept = 1, m[, 1:4]), m[, 5:8])

lm.fit会返回一个列表而不是lm个对象,但某些方法(例如coefresid(但不是summary)仍可使用它。

答案 1 :(得分:0)

假设所有222个向量长度相同,并且除了这222个向量之外,你的全局环境没有其他对象,你可以尝试:

方法1:

library(purrr)

# get all 223 vectors in a list
vec_list <- as.list(.GlobalEnv))

# cbind the list elements
df <- map_df(vec_list, cbind)

方法2:

# this lists all the objects in your current environment
vec_list= ls()

# get data
df <- cbind(vec_list)