如果存在大量因变量,那么如何运行多元线性回归,比如在我的情况下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不太熟悉,所以我感谢我能为论文提供的所有帮助!请多多包涵。
答案 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
个对象,但某些方法(例如coef
和resid
(但不是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)