我该如何从glm
对象中获取Z统计量的向量数值?例如,我有以下代码:
fit <- glm(y ~ 0 + x,binomial)
我如何以与使用fit$coef
获取系数估计值相同的方式访问列Pr(>|z|)
?
我相信
coef(summary(fit))[,"Pr(>|z|)"]
将会得到你想要的结果。(summary.glm()
返回一个对象,该对象有一个coef()
方法,返回系数表。)(顺便说一句,如果存在访问器方法,最好使用它们而不是直接访问拟合模型的组件——例如,coef(fit)
比fit$coef
更好。)
从线性回归中获取 p 值和 R 平方值 给出了类似的答案。
我建议使用 methods(class="summary.glm")
查找可用的访问器方法,但实际上这有点棘手,因为默认方法(在本例中为coef.default()
)也可能是相关的……
PS 如果您想要 Z 值,coef(summary(fit))[,"z value"]
就可以了(您的问题有点含糊:通常当人们说“Z 统计量”时,他们指的是测试统计量的值,而不是 p 值)
fit$coef
(原帖作者已经知道这不会得到 p 值) - Ben Bolkercoef
函数来处理summary.glm
和summary.lm
对象时,术语上有些牵强。在我的理解中,p值、标准误差和z统计量并不是“系数”。这种用法破坏了该函数的一致性。 - IRTFMcoefTable()
... 但你能怎么办呢?让我们不要在这里开始讨论R语言的不一致性问题... - Ben Bolker您可以通过以下方式访问所需信息:
utils::data(anorexia, package="MASS") # Some data
anorex.1 <- glm(Postwt ~ Prewt + Treat + offset(Prewt),
family = gaussian, data = anorexia) # a glm model
summary(anorex.1)
summary(anorex.1)$coefficients[,3] # vector of t-values
(Intercept) Prewt TreatCont TreatFT
3.716770 -3.508689 -2.163761 2.138933
summary(anorex.1)$coefficients[,4] # vector of p-values
(Intercept) Prewt TreatCont TreatFT
0.0004101067 0.0008034250 0.0339993147 0.0360350847
summary(anorex.1)$coefficients[,3:4] # matrix
t value Pr(>|t|)
(Intercept) 3.716770 0.0004101067
Prewt -3.508689 0.0008034250
TreatCont -2.163761 0.0339993147
TreatFT 2.138933 0.0360350847
str
函数将显示对象中每个元素的位置,而[[
访问器(如@DWin和@Ben Bolker所指出的那样,比$
更好)将为您提取信息。尝试str(summary(anorex.1))
以查看此函数的作用。
coef(summary(...))
vs. summary(...)$coefficients
],以及通过名称提取列 [...[,"Pr(>|t|)"]
vs ...[,3]
] ... 但对于详细说明加1。 - Ben Bolker