我正在比较具有Gamma分布的模型的R和SAS的GLM输出。点估计是相同的,但是它们对标准误差的估计不同,因此对p值的估计也不同。

有人知道为什么吗?我想知道R和SAS是否使用不同的方法来估计标准误差?也许MLE与时刻法?

R样例代码

set.seed(2)
test = data.table(y = rnorm(100, 1000, 100), x1 = rnorm(100, 50, 20), x2 = rgamma(100, 0.01))
model = summary(glm(formula = y ~ x1+x2 , family = Gamma(link = "log"), data = test))

使用此处生成的相同数据,我使用以下代码在SAS中运行模型:
proc genmod data= test_data;
                model y =  x1 x2 /link= log dist= gamma;
    run;

R的输出如下:
Call:
glm(formula = y ~ x1 + x2, family = Gamma(link = "log"), data = test)

Deviance Residuals:
     Min        1Q    Median        3Q       Max
-0.26213  -0.08456  -0.01033   0.08364   0.20878

Coefficients:
              Estimate Std. Error t value Pr(>|t|)
(Intercept)  6.9210757  0.0324674 213.170   <2e-16 ***
x1          -0.0003371  0.0005985  -0.563    0.575
x2           0.0234097  0.0627251   0.373    0.710
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for Gamma family taken to be 0.01376099)

    Null deviance: 1.3498  on 99  degrees of freedom
Residual deviance: 1.3436  on 97  degrees of freedom
AIC: 1240.6

Number of Fisher Scoring iterations: 4

SAS的输出:r - SAS和R之间的GLM Gamma 分布的标准误差差异-LMLPHP

最佳答案

默认情况下,R以与sas/genmod/model选项scale = pearson相同的方式计算scale = 1/色散参数。比例参数的选择会影响SE。请参阅此处的文档:
https://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_genmod_sect022.htm

默认情况下,SAS/genmod给出shape参数的MLE。假设拟合的 Gamma 模型存储在列表“fit”中。要在R中加载MASS库,请输入

gamma.shape(fit)

这给出了形状参数alpha的MLE。
如果您再输入
summary(fit, dispersion=1/gamma.shape(fit)$alpha))

摘要功能在计算SE时将使用alpha的MLE,并且它们将与SAS/genmod完全匹配。

我将对此另行发表文章。尽管summary.glm提供正确的SE(使用指定的色散值),但不会打印正确的AIC值(它不使用指定的色散,而是使用通过Pearson残差计算的值)。差别很小,但我将其称为错误。

关于r - SAS和R之间的GLM Gamma 分布的标准误差差异,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44577998/

10-12 17:23
查看更多