如何从一个简单的线性回归模型中提取p值(单个解释变量的系数的显著性为非零)和r平方值?例如……

x = cumsum(c(0, runif(100, -1, +1)))
y = cumsum(c(0, runif(100, -1, +1)))
fit = lm(y ~ x)
summary(fit)

我知道summary(fit)显示了p值和r平方值,但我希望能够将它们插入到其他变量中。


当前回答

另一个选择是使用cor.test函数,而不是lm:

> x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
> y <- c( 2.6,  3.1,  2.5,  5.0,  3.6,  4.0,  5.2,  2.8,  3.8)

> mycor = cor.test(x,y)
> mylm = lm(x~y)

# r and rsquared:
> cor.test(x,y)$estimate ** 2
      cor 
0.3262484 
> summary(lm(x~y))$r.squared
[1] 0.3262484

# P.value 

> lmp(lm(x~y))  # Using the lmp function defined in Chase's answer
[1] 0.1081731
> cor.test(x,y)$p.value
[1] 0.1081731

其他回答

另一个选择是使用cor.test函数,而不是lm:

> x <- c(44.4, 45.9, 41.9, 53.3, 44.7, 44.1, 50.7, 45.2, 60.1)
> y <- c( 2.6,  3.1,  2.5,  5.0,  3.6,  4.0,  5.2,  2.8,  3.8)

> mycor = cor.test(x,y)
> mylm = lm(x~y)

# r and rsquared:
> cor.test(x,y)$estimate ** 2
      cor 
0.3262484 
> summary(lm(x~y))$r.squared
[1] 0.3262484

# P.value 

> lmp(lm(x~y))  # Using the lmp function defined in Chase's answer
[1] 0.1081731
> cor.test(x,y)$p.value
[1] 0.1081731

我在探索类似问题的建议解决方案时遇到了这个问题;我认为,为了将来的参考,它可能是值得更新可用的答案列表与解决方案利用扫帚包。

示例代码

x = cumsum(c(0, runif(100, -1, +1)))
y = cumsum(c(0, runif(100, -1, +1)))
fit = lm(y ~ x)
require(broom)
glance(fit)

结果

>> glance(fit)
  r.squared adj.r.squared    sigma statistic    p.value df    logLik      AIC      BIC deviance df.residual
1 0.5442762     0.5396729 1.502943  118.2368 1.3719e-18  2 -183.4527 372.9055 380.7508 223.6251          99

一边笔记

我发现glance函数很有用,因为它简洁地总结了关键值。结果被存储为data.frame,这使得进一步的操作很容易:

>> class(glance(fit))
[1] "data.frame"

对于summary()末尾显示的最终p值,该函数使用pf()从summary(fit)$fstatistic值中计算。

fstat <- summary(fit)$fstatistic
pf(fstat[1], fstat[2], fstat[3], lower.tail=FALSE)

来源:[1],[2]

注意,summary(fit)生成了一个包含您需要的所有信息的对象。se t和p向量都存储在里面。通过选择系数矩阵的第4列来获得p值(存储在summary对象中):

summary(fit)$coefficients[,4] 
summary(fit)$r.squared

尝试str(summary(fit))查看该对象包含的所有信息。

编辑:我误解了蔡斯的答案,它基本上告诉你如何得到我在这里给出的东西。

这是提取p值最简单的方法:

coef(summary(modelname))[, "Pr(>|t|)"]