【问题标题】:Multivariate multiple linear regression with many dependent variables具有许多因变量的多元多元线性回归
【发布时间】:2018-03-24 11:37:32
【问题描述】:

如果有很多因变量,例如在我的情况下准确地说是 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 的经验不是很丰富,所以我很感谢我能为我的论文获得的所有帮助!请多多包涵。

【问题讨论】:

  • 222 个变量的线性回归不是一个好主意。考虑岭回归、套索或主成分回归。至于数据的绑定,我认为我们需要一个可重现的示例来为model.matrix 问题提供解决方案。
  • 据我了解,您已经拥有变量 vol 中的所有预测变量,该变量可以是矩阵或数据框。你可以做vol = vol[-1,]; lm(vol~X)。然而,这是 y 直接使用的很多维度。我建议先进行降维方法(例如 PCA)以使 y 的维度更小:)

标签: r


【解决方案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)无论如何都可以使用它。

【讨论】:

    【解决方案2】:

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

    方法一:

    library(purrr)
    
    # get all 223 vectors in a list
    vec_list <- as.list(.GlobalEnv))
    
    # cbind the list elements
    df <- map_df(vec_list, cbind)
    

    方法二:

    # this lists all the objects in your current environment
    vec_list= ls()
    
    # get data
    df <- cbind(vec_list)
    

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2019-03-30
      • 2023-03-25
      • 2018-11-16
      • 2019-01-25
      • 2016-02-03
      • 2020-05-20
      • 2010-11-23
      • 1970-01-01
      相关资源
      最近更新 更多