2017-04-10 17 views
0

我有一个数据集(PAEscore),每列1672个条目(38个参与者,每个参与者44个观察值)。我想看看Fraction_Value与Subject_Fraction,并编写脚本的一部分,它将为我提供每个主题的R系数。在我加载的数据中,我有一个主题编号的列,一个分数值的列和一个主题分数的列。到目前为止,我有一个代码,会给我一个情节和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

您应该提供一个带有样本输入数据的[可重现示例](http://stackoverflow.com/questions/5963269/how-to-make-a- great-r-reproducible-example)。目前尚不清楚究竟发生了什么。 – MrFlick

+0

@李哲源ZheyuanLi我该如何解决这个问题? – Becky

回答

0

我的回答是假设PAEscore$Subject_ID是容易的一个因素,而不是一个字符(否则levels(PAEscore$Subject_IDNULL和你的循环什么也不做!)

你的循环计数器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。我的答案只是解决你的错误。

+0

这仍然给我一个空的数据表 - 我可能做错了什么? – Becky

+0

我试过这个,但没有奏效。我可能做错了什么? PAEcoeff $ Subject_ID < - as.factor(PAEcoeff $ Subject_ID) – Becky