提取R中的自由度

时间:2016-03-24 21:53:37

标签: r linear-regression

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

下面的代码完全适用于调整后的R平方,我可以将列表的值名称添加到文件中(因此我可以识别R平方所属的mydata子集)。总而言之,它给了我一列列表值,一列列有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

1 个答案:

答案 0 :(得分:2)

尝试使用summary(reg)$df[2]代替summary(reg)$df。请记住,R中的所有内容都是一个对象,您可以获取任何对象的子集。

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

代码建议

无需拨打which,即newdata <- mydata[mydata$v3==i,]。根据我的经验,99%的时间你认为自己需要which