如何从glm对象中获取Z-统计量的值?

10

我该如何从glm对象中获取Z统计量的向量数值?例如,我有以下代码:

fit <- glm(y ~ 0 + x,binomial)

我如何以与使用fit$coef获取系数估计值相同的方式访问列Pr(>|z|)


如果其中一个答案解决了您的问题,您应该点击复选框以接受它... - Ben Bolker
3个回答

12

我相信

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”更好:...特别是因为fit$coef不返回任何p值。 - IRTFM
是的 - 最后一句话是在提及原帖中使用 fit$coef(原帖作者已经知道这不会得到 p 值) - Ben Bolker
说实话,我认为在使用coef函数来处理summary.glmsummary.lm对象时,术语上有些牵强。在我的理解中,p值、标准误差和z统计量并不是“系数”。这种用法破坏了该函数的一致性。 - IRTFM
1
好的,应该是 coefTable() ... 但你能怎么办呢?让我们不要在这里开始讨论R语言的不一致性问题... - Ben Bolker

1

您可以通过以下方式访问所需信息:


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))以查看此函数的作用。


2
我更喜欢使用访问器而不是提取列表元素 [coef(summary(...)) vs. summary(...)$coefficients],以及通过名称提取列 [...[,"Pr(>|t|)"] vs ...[,3]] ... 但对于详细说明加1。 - Ben Bolker

0
我使用类似这样的摘要语法:summary(my_model)[[1]][[2]]。您可以尝试在“[[]]”中使用不同的数字组合来提取所需的数据。当然,如果我正确理解了您的问题 :)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接