在 R 中提取自由度

Extract degrees of freedom in R

我是运行大量的线性回归,对于每个回归,我想将调整后的 R 平方和自由度分别保存在一个单独的文件中。

下面的代码完美地完成了调整后的 R 平方,我可以将列表的值名称添加到文件中(这样我就可以识别 R 平方属于 mydata 的哪个子集)。总之,它为我提供了 1 列列表值和 1 列 R²。

对于自由度,R默认给出一个3向量(p, n-p, p*)。添加 row.name=i 语句在这里不起作用。我只需要 n-p。有没有办法只保存向量中的中间图形并将行名称添加到保存的文件中?

我在下面创建了一个可重现的示例:

虚构数据集(mydata)

v1  v2  v3

4   9   1
5   78  1
6   11  1
8   12  2
10  13  2
11  65  2
15  34  2

代码:

list<-unique(mydata$v3)
for (i in 1:length(list)){


  newdata <- mydata[ which(mydata$v3==i),]

  reg <- lm((v1~v2), data=newdata)
  write.table(summary(reg)$adj.r.square, file="rsquared.txt", append=TRUE, col.names = F, row.names=i)
  write.table(summary(reg)$df, file="degreesoffreedom.txt", append=TRUE, col.names = F)


  rm(reg)
  rm(newdata)

}

我目前得到的文件内容 "degreesoffreedom.tx"

"1" 2
"2" 1
"3" 2
"1" 2
"2" 2
"3" 2

我需要的是:

"1" 1
"2" 2

尝试 summary(reg)$df[2] 而不是 summary(reg)$df。请记住,R 中的一切都是对象,您可以获取任何对象的子集。

第二种解决方案reg$df。当你围绕你的回归包裹 summary 时,你只会得到三个不同的 DF。

代码建议

which 的调用是不必要的,即 newdata <- mydata[mydata$v3==i,]。根据我的经验,99% 的时间你认为你需要 which 但实际上你不需要。