如何从一个简单的线性回归模型中提取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平方值,但我希望能够将它们插入到其他变量中。
如何从一个简单的线性回归模型中提取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平方值,但我希望能够将它们插入到其他变量中。
当前回答
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
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
这是提取p值最简单的方法:
coef(summary(modelname))[, "Pr(>|t|)"]
通过调用str(summary(fit))可以看到summary()返回的对象的结构。每个片段都可以使用$访问。F统计量的p值更容易从方差分析返回的对象中得到。
简单地说,你可以这样做:
rSquared <- summary(fit)$r.squared
pVal <- anova(fit)$'Pr(>F)'[1]
虽然上面的两个答案都很好,但提取对象部分的过程更一般。
在许多情况下,函数返回列表,并且可以使用str()访问各个组件,str()将打印组件及其名称。然后您可以使用$操作符访问它们,即myobject$componentname。
在lm对象的情况下,有许多预定义的方法可以使用,如coef()、remainder()、summary()等,但你不会总是那么幸运。