在对线性回归模型的summary()调用中使用paste()

时间:2011-02-03 20:52:06

标签: r

对于100个数据集中的每一个,我使用lm()生成7个不同的方程式,并希望提取和比较p值和调整后的R平方值。

请假设lm()实际上是此方案可能的最佳回归技术。

在搜索网络时,我发现了一些有用的示例,说明如何创建一个将提取此信息并将其写入其他地方的函数,但是,我的代码使用paste()来标记每个函数。数据源,我无法弄清楚如何在我创建的函数中包含这些唯一的粘贴名称。

这是一个小例子:

temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2
testrun<-c("XX")

for (i in testrun)
{
  assign(paste(i,"test",sep=""),lm(temp$LogPre~temp$labels))
  assign(paste(i,"test2",sep=""),lm(temp$LogPre~temp$labels2))
}

然后我想提取每个方程的系数

但以下不起作用:

summary(paste(i,"test",sep="")$coefficients)

,这也不是:

coef(summary(paste(i,"test",sep="")))

两者都产生错误:$运算符对原子向量无效 即使

summary(XXtest)$coefficients

coef(summary(XXtest))

工作得很好。

如何在paste()中使用summary()来允许我为AAtest,AAtest2,ABtest,ABtest2等执行此操作。

谢谢!

2 个答案:

答案 0 :(得分:3)

仅使用paste会产生字符串,而不是具有该名称的对象。您需要告诉R使用get获取具有该名称的对象。

summary(get(paste(i,"test",sep="")))$coefficients

答案 1 :(得分:3)

很难准确说出你的目的是什么,但某种应用循环可能会以更简单的方式做你想要的。也许是这样的?

temp <- data.frame(labels=rep(1:10),LogPre= rnorm(10))
temp$labels2<-temp$labels^2

testrun<-c("XX")
names(testrun) <- testrun

out <- lapply(testrun, function(i) {
  list(test1=lm(temp$LogPre~temp$labels),
       test2=lm(temp$LogPre~temp$labels2))
})

然后获取斜坡的所有p值:

> sapply(out, function(i) sapply(i, function(x) coef(summary(x))[2,4]))
                XX
test1 0.02392516
test2 0.02389790