如何从一个简单的线性回归模型中提取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平方值,但我希望能够将它们插入到其他变量中。


当前回答

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

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

来源:[1],[2]

其他回答

x = cumsum(c(0, runif(100, -1, +1)))
y = cumsum(c(0, runif(100, -1, +1)))
fit = lm(y ~ x)
> names(summary(fit))
[1] "call"          "terms"        
 [3] "residuals"     "coefficients" 
 [5] "aliased"       "sigma"        
 [7] "df"            "r.squared"    
 [9] "adj.r.squared" "fstatistic"   
[11] "cov.unscaled" 
    summary(fit)$r.squared

另一个选择是使用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

虽然上面的两个答案都很好,但提取对象部分的过程更一般。

在许多情况下,函数返回列表,并且可以使用str()访问各个组件,str()将打印组件及其名称。然后您可以使用$操作符访问它们,即myobject$componentname。

在lm对象的情况下,有许多预定义的方法可以使用,如coef()、remainder()、summary()等,但你不会总是那么幸运。

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

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

使用:

(summary(fit))$coefficients[***num***,4]

其中num是一个数字,表示系数矩阵的行。这取决于你的模型中有多少特征,以及你想为哪一个提取p值。例如,如果你只有一个变量,那么截距的p值将是[1,4],下一个是你的实际变量的p值将是[2,4]。所以你的num是2。