具有多个因素分组的数据框的回归

Regression of a Data Frame with multiple factor groupings

我正在编写回归脚本。 我有一个 data.frame 大约有 130 列,我需要针对所有其他 ~100 列数字对其中一列(我们称之为 X 列)进行回归。

在计算回归之前,我需要按 4 个因素对数据进行分组:myDat$RecipemyDat$StepmyDat$StagemyDat$Prod,同时仍保留另一个因素为回归附加了约 100 列和行数据。然后我需要对每一列 ~ X 列进行回归,并用列名打印出 R^2 值。到目前为止,这是我尝试过的方法,但它变得过于复杂,我知道必须有更好的方法。

 rm(list=ls())
 myDat <- read.csv(file="C:/Users/Documents/myDat.csv",              header=TRUE, sep=",")

for(j in myDat$Recipe)
{
  myDatj <- subset(myDat, myDat$Recipe == j) 
  for(k in myDatj$Step)
  {
    myDatk <- subset(myDatj, myDatj$Step == k) 
    for(i in myDatk$Stage)
    {
      myDati <- subset(myDatk, myDatk$Stage == i)
      for(m in myDati$Prod)
      {
        myDatm <- subset(myDati, myDati$Prod == m)
          if(is.numeric(myDatm[3,i]))  
          {     
          fit <- lm(myDatk[,i] ~ X, data=myDatm) 
          rsq <- summary(fit)$r.squared
            {
              writeLines(paste(rsq,i,"\n"))
           }  
         }
      }
    }
  }  
}      

您可以通过组合 dplyr, tidyr and my broom 软件包来完成此操作(您可以将它们与 install.packages 一起安装)。首先,您需要将所有数字列收集到一个列中:

library(dplyr)
library(tidyr)
tidied <- myDat %>%
    gather(column, value, -X, -Recipe, -Step, -Stage, -Prod)

要了解它的作用,您可以阅读 tidyr's gather operation。 (这假定除 X、Recipe、Step、Stage 和 Prod 之外的所有列都是数字,因此应该在回归中进行预测。如果不是这种情况,您需要事先删除它们。您需要生成一个可重现的示例如果您需要更个性化的解决方案)。

然后执行每个回归,同时按列和四个分组变量进行分组。

library(broom)

regressions <- tidied %>%
    group_by(column, Recipe, Step, Stage, Prod) %>%
    do(mod = lm(value ~ X))

glances <- regressions %>% glance(mod)

生成的 glances 数据框将为列、配方、步骤、阶段和产品的每种组合各占一行,以及包含每个模型的 R 平方的 r.squared 列. (它还将包含 adj.r.squared,以及其他列,例如 F 检验 p 值:有关更多信息,请参见 here)。 运行 coefs <- regressions %>% tidy(mod) 也可能对您有用,因为它将从每个回归中获取系数估计值和 p 值。

"broom and dplyr" vignette, and in Section 3.1 of the broom manuscript 中描述了一个类似的用例。