【问题标题】:How to loop a linear regression over multiple subsets of a factor variable如何在因子变量的多个子集上循环线性回归
【发布时间】:2020-08-08 05:34:13
【问题描述】:

我正在尝试编写一个 for 循环,该循环在因子变量的 4 个不同级别上分别运行 4 次相同的回归(相同的因变量和自变量)。然后我想保存每个线性回归的输出每个级别都有大约 500 行数据。

我最初的想法是做这样的事情,但我不熟悉 R 和不同的迭代方法。

Regressionresults <- list()

for (i in levels(mydata$factorvariable)) {
  Regressionresults[[i]] <- lm(dependent ~ ., data = mydata)
}

我怀疑这很容易做到,但我不知道怎么做。

如果您还可以指导我访问任何帮助文档或其他资源,在那里我可以学习如何编写这些类型的循环,这样我就不必再问类似的问题了,我将不胜感激。

提前非常感谢!

【问题讨论】:

    标签: r for-loop linear-regression


    【解决方案1】:

    问题中代码的问题是:

    1. 在 R 中,通常最好不要一开始就使用循环
    2. 通常 i 用于顺序索引,所以它不是一个好的 选择用于关卡的名称
    3. 循环体不做任何子集,所以每次迭代都会分配相同的结果
    4. 发给 SO 的帖子应该有可重现的数据,并且问题不包括该数据,而是在未定义其内容的情况下提及对象。请阅读 标签页顶部的说明。下面我们使用内置的 iris 数据集进行重现。

    以下是一些使用内置 iris 数据框实现可重复性的方法。每个结果都会生成一个命名列表,其中名称是 Species 的级别。

    1) lm 子集参数 Map 给出列表的级别:

    sublm <- function(x) lm(Petal.Width ~ Sepal.Width, iris, subset = Species == x)
    levs <- levels(iris$Species)
    Map(sublm, levs)
    

    2) 循环 sublmlevs 来自 (1)。

    L <- list()
    for(s in levs) L[[s]] <- sublm(s)
    

    3) nlme 或使用来自 nlme 的 lmList

    library(nlme)
    L3 <- lmList(Petal.Width ~ Sepal.Width | Species, iris)
    coef(L3)
    summary(L3)
    

    【讨论】:

    • 谢谢。在 lm 中设置子集时,我遇到了对比度错误,但设法通过使用 filter 来让它工作。现已阅读说明!
    【解决方案2】:

    我知道问题被问一年后,只是想使用fixest 包添加第四个简单明了的选项

    model <- feols(Petal.Width ~ Sepal.Width, data = iris, split = ~Species)
    summary(model)
    

    这里的关键是split = ~Species,如果您想要全样本回归(整个数据)以及单个因素回归,也可以使用fsplit

    【讨论】:

      猜你喜欢
      • 2020-10-31
      • 2019-06-27
      • 2020-03-06
      • 2015-05-25
      • 1970-01-01
      • 2021-10-03
      • 1970-01-01
      • 1970-01-01
      • 2020-05-20
      相关资源
      最近更新 更多