如何一次计算多个R系数?

时间:2017-04-10 17:48:14

标签: r loops regression linear-regression lm

我的数据集(PAEscore)每列有1672个条目(38个参与者,每个参与者44个观察结果)。我想看一下Fraction_Value与Subject_Fraction,并编写脚本的一部分,它将为每个主题提供R系数。在我加载的数据中,我有一个主题编号列,一个分数值列和一个主题分数列。到目前为止,我有一个代码,它将为我提供所有38位参与者的综合数据的情节和R值:

fit1 <- lm(Fraction_Value ~ Subject_Fraction) 

summary(fit1)

plot(Fraction_Value ~ Subject_Fraction)
abline(fit1)

但是,我在运行一个循环时会遇到很多麻烦,这个循环会给我一个包含每个参与者个别R值的表。我试过这个但它不起作用。

PAEcoeff = matrix()

for (i in levels(PAEscore$Subject_ID)) {
  # Create temporary data frame:
     PAE_tmp  <- PAEscore[PAEscore$Subject==i,]
  # Perform regression:
      reg_result <- lm(PAE_tmp$Fraction_Value ~ PAE_tmp$Subject_Fraction)
 # Get coefficient:
      tmp_coef   <- coef(reg_result)
  # Store coefficient:
     PAEcoeff[as.numeric(i)] <- tmp_coef[2]
}

你们有什么建议可以解决它吗?我跑这个时没有收到任何错误,但我得到一张空桌子。我错过了什么?或者,有更简单的方法吗?

1 个答案:

答案 0 :(得分:0)

我的回答是假设PAEscore$Subject_ID很容易成为一个因素而不是一个字符(否则levels(PAEscore$Subject_ID给出NULL并且你的循环什么都不做!)

您的循环计数器i是通过级别的,因此它将是一个字符串。使用as.numeric(i)将其强制转换为数字会产生NA

修复它。在循环之外,初始化

PAEcoeff <- setNames(numeric(nlevels(PAEscore$Subject_ID)), levels(PAEscore$Subject_ID))

然后在内部循环中,使用PAEcoeff[i]

  

有更简单的方法吗?

您按组进行线性回归拟合。我建议你阅读Linear Regression and group by in R。我在这里的答案只是为了解决你的错误。