我的数据集(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]
}
你们有什么建议可以解决它吗?我跑这个时没有收到任何错误,但我得到一张空桌子。我错过了什么?或者,有更简单的方法吗?
答案 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。我在这里的答案只是为了解决你的错误。