如何从一个简单的线性回归模型中提取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平方值,但我希望能够将它们插入到其他变量中。
当前回答
这是提取p值最简单的方法:
coef(summary(modelname))[, "Pr(>|t|)"]
其他回答
使用:
(summary(fit))$coefficients[***num***,4]
其中num是一个数字,表示系数矩阵的行。这取决于你的模型中有多少特征,以及你想为哪一个提取p值。例如,如果你只有一个变量,那么截距的p值将是[1,4],下一个是你的实际变量的p值将是[2,4]。所以你的num是2。
通过调用str(summary(fit))可以看到summary()返回的对象的结构。每个片段都可以使用$访问。F统计量的p值更容易从方差分析返回的对象中得到。
简单地说,你可以这样做:
rSquared <- summary(fit)$r.squared
pVal <- anova(fit)$'Pr(>F)'[1]
r-squared:您可以直接从摘要对象summary(fit)$r.squared返回r-squared值。有关可以直接提取的所有项的列表,请参阅名称(summary(fit))。
模型p值:如果要得到整体回归模型的p值, 这篇博文概述了一个返回p值的函数:
lmp <- function (modelobject) {
if (class(modelobject) != "lm") stop("Not an object of class 'lm' ")
f <- summary(modelobject)$fstatistic
p <- pf(f[1],f[2],f[3],lower.tail=F)
attributes(p) <- NULL
return(p)
}
> lmp(fit)
[1] 1.622665e-05
在只有一个预测因子的简单回归的情况下,模型p值和系数p值将是相同的。
系数p值:如果你有一个以上的预测器,那么上面将返回模型p值,系数p值可以使用以下方法提取:
summary(fit)$coefficients[,4]
或者,您可以以类似于上面的摘要对象的方式从方差分析(fit)对象中获取系数的p值。
虽然上面的两个答案都很好,但提取对象部分的过程更一般。
在许多情况下,函数返回列表,并且可以使用str()访问各个组件,str()将打印组件及其名称。然后您可以使用$操作符访问它们,即myobject$componentname。
在lm对象的情况下,有许多预定义的方法可以使用,如coef()、remainder()、summary()等,但你不会总是那么幸运。
@Vincent回答的延伸:
对于lm()生成的模型:
summary(fit)$coefficients[,4] ##P-values
summary(fit)$r.squared ##R squared values
对于gls()生成的模型:
summary(fit)$tTable[,4] ##P-values
##R-squared values are not generated b/c gls uses max-likelihood not Sums of Squares
为了隔离单独的p值本身,你需要在代码中添加一个行号:
例如,要访问两个模型摘要中截距的p值:
summary(fit)$coefficients[1,4]
summary(fit)$tTable[1,4]
注意,你可以在上面的每个实例中用列名替换列号: 总结(适合)$系数[1,“公关(> | t |)“# # lm 总结(适合)$ tTable[1,“假定值 "] ## gl
如果你仍然不确定如何从汇总表中访问一个值,使用str()来找出汇总表的结构:
str(summary(fit))