为什么R的glm的协方差矩阵与minitab的probit分析的协方差矩阵不同

xj3cbfub  于 11个月前  发布在  其他
关注(0)|答案(1)|浏览(73)

使用以下R脚本中的数据集。R二项式probit glm vcov函数的输出与Minitab的probit分析方差协方差表的输出不同。vcov的R文档说明它返回方差协方差表。拟合的模型系数相同(到3 dp)但是协方差矩阵是完全不同的。你怎么能从R得到和从minitab得到的相同的矩阵输出,反之亦然?
我原以为R和Minitab的表是相等的。
我问Minitab支持,我有一个付费的年度订阅,并得到了这个无益的回应:
“感谢您的询问,我们无法评论其他应用程序中使用的方法。但是,您可以在下面的页面中找到使用的公式。
https://support.minitab.com/en-us/minitab/21/help-and-how-to/statistical-modeling/reliability/how-to/probit-analysis/methods-and-formulas/equation/
它指向一个包含方程πj = c +(1 − c)g(β0 + xjβ)的页面,没有其他内容-我期待着关于奇异值分解或类似的东西。
我只订阅了Minitab的支持,但这些天它似乎没有什么帮助,所以我可能会使用R代替。

从R

df<-data.frame(stimulus = c(0.615,0.634,0.655,0.675),
   success = c(0,3,3,2),
   failure = c(5,4,3,0))
fm <- glm(cbind(success,failure)~stimulus,data=df,
    family=binomial("probit"))
coef(fm)

(Intercept)    stimulus 
  -29.68637    45.89187 

vcov(fm)
            (Intercept)  stimulus
(Intercept)    156.9548 -244.3060
stimulus      -244.3060  380.5229

字符串

来自Minitab

相同系数但不同协方差矩阵
回归表
可变系数标准误差Z P
恒量-29.6864 13.1351 -2.26 0.024
刺激45.8920 20.4461 2.24 0.025
自然
响应0
基质VCCO 1
172.531 -268.482
-268.482 418.044

gab6jxml

gab6jxml1#

“有两只手表的人永远不知道现在是什么时候。
值得一提的是,glmmTMB-它使用了与glm完全不同的拟合过程-给出了一个接近Minitab的协方差矩阵。

m_glm <- glm(cbind(success,failure)~stimulus,data=df,
      family=binomial("probit"))
library(glmmTMB)
m_tmb <- glmmTMB(cbind(success,failure)~stimulus,data=df,
      family=binomial("probit"))
vcov(m_tmb)
Conditional model:
            (Intercept)  stimulus
(Intercept)    172.5314 -268.4821
stimulus      -268.4821  418.0434

字符串
关于如何计算glmhere的协方差矩阵,还有更多的信息..(glm)将不同于基于对数似然曲面的估计曲率的值(glmmTMB)。我认为它可能与概率单位链接 * 非规范 * 的事实有关。(当我们改变为典型的logit链接时,来自glmglmmTMB的协方差矩阵几乎相同)。(我已经问过a question on Cross Validated这一点;托马斯Lumley在回答中证实了差异的产生,因为glmmTMB/Minitab的协方差矩阵是基于 * 观测信息 * 估计的,而GLM使用 * 预期(Fisher)信息 *。
也就是说,您还应该小心使用标准误差(sqrt(diag(vcov(...))))作为GLM参数的不确定性度量,因为它们只对 * 大 * 数据集可靠。glmglmmTMB的轮廓置信区间非常相似。

> confint.default(m_glm)
                2.5 %    97.5 %
(Intercept) -54.24111 -5.131622
stimulus      7.65886 84.124881
> confint(m_glm)
Waiting for profiling to be done...
                2.5 %   97.5 %
(Intercept) -59.70676 -6.66262
stimulus     10.01528 92.56096

> confint(m_tmb, method = "wald", estimate = FALSE) ## equiv. confint.default()
                 2.5 %    97.5 %
(Intercept) -55.430789 -3.942062
stimulus      5.818323 85.965601

> confint(m_tmb, method = "profile", estimate = FALSE) ## equiv. confint()
                2.5 %    97.5 %
(Intercept) -59.70642 -6.660542
stimulus     10.01219 92.560959

相关问题