6

モデルの 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 からの出力:ここに画像の説明を入力

4

1 に答える 1

2

デフォルトでは、R は、sas/genmod/model オプションの scale=pearson と同じ方法で scale=1/dispersion パラメータを計算します。スケール パラメータの選択は、SE に影響します。こちらのドキュメントを参照してください: https://support.sas.com/documentation/cdl/en/statug/63033/HTML/default/viewer.htm#statug_genmod_sect022.htm

デフォルトでは、SAS/genmod は形状パラメーターの MLE を提供します。当てはめられたガンマ モデルがリスト "fit" に格納されているとします。R でこれを取得するには、MASS ライブラリをロードしてから次のように入力します。

gamma.shape(fit)

これにより、形状パラメーター alpha の MLE が得られます。次に入力すると

summary(fit, dispersion=1/gamma.shape(fit)$alpha))

要約関数は、SE を計算するときにアルファの MLE を使用し、SAS/genmod と正確に一致します。

これについては別記事にします。summary.glm は (分散の指定された値を使用して) 正しい SE を提供しますが、AIC の正しい値を出力しません (指定された分散を使用せず、ピアソン残差で計算された値を使用します)。違いは小さいですが、私はそれをバグと呼んでいます。

于 2017-11-21T18:06:33.203 に答える