Rはこの二項回帰のp値をどのように計算しますか?


8

次の二項回帰を考えます。

# Create some data
set.seed(10)
n <- 500
x <- runif(n,0,100)
y <- x + rnorm(n,sd=100) < 0
 
# Fit a binomial regression model
model <- glm(y ~ x, family="binomial")

summary(model)

summary関数は、p値を返します1.03e-05。をanova.glm使用する場合、p値の計算にどの方法を使用するかに関係なく、p値が少し極端になります。

anova(model, test="Rao")   # p.value = 7.5e-6
anova(model, test="LRT")   # p.value = 6.3e-6
anova(model, test="Chisq") # p.value = 6.3e-6

summary関数からのp値は、関数によって返されるものと同じ仮説に適用されanovaますか?はいの場合、どのようにsummaryこのp値を計算しましたanovaか?で直接同じ計算を実行することは可能ですか?


3
R関数がファミリの引数として「二項」を使用しているにもかかわらず、デフォルトの二項ファミリはロジットリンクを想定しているため、ロジスティック回帰を実行しています。
AdamO

回答:


5

ここで私の答えを読むのに役立つ場合があります。なぜロジスティック回帰の出力、カイ2乗検定、およびORの信頼区間の間でp値が異なるのですか? ここでのあなたの質問はそれとほぼ同じですが、あなたの質問には対処できるいくつかの追加要素があります。

summary.glm()t0t

を使用anova.glm()すると、さまざまなテストにアクセスできます。を設定するtest="Rao"と、スコアテストのp値が得られます。また、test="Chisq"またはtest="LRT"(どちらも同じ)を設定すると、尤度比検定からのp値が得られます。

anova.glm()関数は、でワルドテストと同じ帰無仮説をテストしsummary()出力この場合は。これは、モデルに変数が1つしかないためです。anova.glm()ワルドからテストのに対し、関数は、線形の設定で「I SSを入力」に類似しているシーケンシャルテストを実行しますsummary()リニア設定で「III SSを入力」に類似している(ここでは私の答えを参照してください:I型解釈する方法、タイプII、タイプIII ANOVAおよびMANOVA?)。検討してください:

x2 = rnorm(n)
m2 = glm(y~x+x2, family="binomial")
summary(m2)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01
anova(m2, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x     1  20.3841       498     598.72 6.335e-06 ***
# x2    1   0.3627       497     598.35     0.547    
m3 = glm(y~x2+x, family="binomial")  # I just switched the order of x & x2 here
summary(m3)$coefficients
#                Estimate  Std. Error    z value     Pr(>|z|)
# (Intercept) -0.05906436 0.186876339 -0.3160612 7.519561e-01
# x2          -0.05967796 0.099093504 -0.6022388 5.470152e-01  # these are the same
# x           -0.01567551 0.003537183 -4.4316372 9.352029e-06  #  as above
anova(m3, test="LRT")
# Terms added sequentially (first to last)
# 
#      Df Deviance Resid. Df Resid. Dev  Pr(>Chi)    
# NULL                   499     619.10              
# x2    1   0.1585       498     618.94    0.6906      # these differ from the
# x     1  20.5883       497     598.35 5.694e-06 ***  #  anova output above

anova.glm()関数をシューホーンして、「タイプIII SS」に類似した多重ロジスティック回帰モデルの個々の変数のスコアおよび尤度比検定を提供できますが、これは面倒です。各変数がglm()呼び出しに提供される数式の最後にリストされるように、モデルを再フィットし続ける必要があります。anova.glm()出力にリストされている最後のp値は、「タイプIII SS」に類似したものです。

個々の変数のスコアまたは尤度比検定をより便利に取得するには、drop1()代わりにを使用します。検討してください:

drop1(m3, test="LRT")
# Single term deletions
# 
# Model:
# y ~ x2 + x
#        Df Deviance    AIC     LRT  Pr(>Chi)    
# <none>      598.35 604.35                      
# x2      1   598.72 602.72  0.3627     0.547      # the same as when x2 is last above
# x       1   618.94 622.94 20.5883 5.694e-06 ***  # the same as when x  is last above

6

ではRsummary関数glmは単純なWald統計を使用してp値を計算します。

2×Φ(|β^|SE(β^))

β^SE(β^)Φ

これを出力から再作成するには、

 beta = coef(model)[2]
 # getting estimate
 B_SE = sqrt(vcov(model)[2,2])
 # extracting standard error
 pvalue =  pnorm(-abs(beta) / B_SE)  * 2
 # pvalue = 1.027859e-05
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.