ロジットまたはプロビットモデルで選択された係数の同時等性をテストする方法は?


14

ロジットまたはプロビットモデルで選択された係数の同時等性をテストする方法は?標準的なアプローチとは何ですか?また、最先端のアプローチとは何ですか?

回答:


30

ワルドテスト

1つの標準的なアプローチは、Waldテストです。これは、Stitコマンド testがロジット回帰またはプロビット回帰の後に行うことです。例を見て、これがRでどのように機能するかを見てみましょう。

mydata <- read.csv("http://www.ats.ucla.edu/stat/data/binary.csv") # Load dataset from the web
mydata$rank <- factor(mydata$rank)
mylogit <- glm(admit ~ gre + gpa + rank, data = mydata, family = "binomial") # calculate the logistic regression

summary(mylogit)

Coefficients:
             Estimate Std. Error z value Pr(>|z|)    
(Intercept) -3.989979   1.139951  -3.500 0.000465 ***
gre          0.002264   0.001094   2.070 0.038465 *  
gpa          0.804038   0.331819   2.423 0.015388 *  
rank2       -0.675443   0.316490  -2.134 0.032829 *  
rank3       -1.340204   0.345306  -3.881 0.000104 ***
rank4       -1.551464   0.417832  -3.713 0.000205 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

、仮説対。これはをテストすることと同等です。Wald検定統計量は次のとおりです。 β G R Eβ G P A β G R E - β 、G 、P 、A = 0βgre=βgpaβgreβgpaβgreβgpa=0

W=(β^β0)se^(β^)N(0,1)

または

W2=θ^θ02ヴァールθ^χ12

私たちのここでは、と。したがって、必要なのはの標準エラーだけです。Deltaメソッドで標準誤差を計算できます: βGRE-βG、P、Aθ0=0βGRE-βGPAθ^βgreβgpaθ0=0βgreβgpa

se^(βgreβgpa)Var(βgre)+Var(βgpa)2Cov(βgre,βgpa)

したがって、との共分散も必要です。ロジスティック回帰を実行した後、コマンドを使用して分散共分散行列を抽出できます。 β G P Aβgreβgpavcov

var.mat <- vcov(mylogit)[c("gre", "gpa"),c("gre", "gpa")]

colnames(var.mat) <- rownames(var.mat) <- c("gre", "gpa")

              gre           gpa
gre  1.196831e-06 -0.0001241775
gpa -1.241775e-04  0.1101040465

最後に、標準誤差を計算できます。

se <- sqrt(1.196831e-06 + 0.1101040465 -2*-0.0001241775)
se
[1] 0.3321951

したがって、あなたのWald値はz

wald.z <- (gre-gpa)/se
wald.z
[1] -2.413564

値を取得するには、標準正規分布を使用します。p

2*pnorm(-2.413564)
[1] 0.01579735

この場合、係数が互いに異なるという証拠があります。このアプローチは、3つ以上の係数に拡張できます。

を使用して multcomp

このかなり面倒な計算はRmultcompパッケージを使用すると便利に行えます。上記と同じ例ですが、次のようにしmultcompます:

library(multcomp)

glht.mod <- glht(mylogit, linfct = c("gre - gpa = 0"))

summary(glht.mod)    

Linear Hypotheses:
               Estimate Std. Error z value Pr(>|z|)  
gre - gpa == 0  -0.8018     0.3322  -2.414   0.0158 *

confint(glht.mod)

係数の差の信頼区間も計算できます。

Quantile = 1.96
95% family-wise confidence level


Linear Hypotheses:
               Estimate lwr     upr    
gre - gpa == 0 -0.8018  -1.4529 -0.1507

の追加例についてはmultcompこちらまたはこちらをご覧ください。


尤度比検定(LRT)

ロジスティック回帰の係数は、最尤法によって検出されます。しかし、尤度関数には多くの積が含まれるため、対数尤度が最大化され、積が合計になります。より適合したモデルは、対数尤度が高くなります。より多くの変数を含むモデルは、少なくともヌルモデルと同じ可能性があります。を使用した代替モデル(より多くの変数を含むモデル)の対数尤度としたの対数尤度を示します。尤度比検定統計量は次のとおりです。 L L 0LLaLL0

D=2(LLaLL0)χdf1df22

尤度比検定統計量は、変数の数の差である自由度を持つ分布に従います。私たちの場合、これは2です。χ2

尤度比検定を実行するには、2つの尤度を比較できるように、モデルを制約に適合させる必要もあります。完全なモデルの形式は。制約モデルの形式は次のとおりです。。ログPのIβgre=βgpaログp i

log(pi1pi)=β0+β1gre+β2gpa+β3rank2+β4rank3+β5rank4
log(pi1pi)=β0+β1(gre+gpa)+β2rank2+β3rank3+β4rank4
mylogit2 <- glm(admit ~ I(gre + gpa) + rank, data = mydata, family = "binomial")

この場合、logLikロジスティック回帰後、2つのモデルの対数尤度を抽出するために使用できます。

L1 <- logLik(mylogit)
L1
'log Lik.' -229.2587 (df=6)

L2 <- logLik(mylogit2)
L2
'log Lik.' -232.2416 (df=5)

上の制約を含むモデルは、完全なモデル(-229.26)と比較して、わずかに高い対数尤度(-232.24)gregpa持っています。尤度比検定の統計は次のとおりです。

D <- 2*(L1 - L2)
D
[1] 16.44923

これで、のCDFを使用して値を計算できます。χ22p

1-pchisq(D, df=1)
[1] 0.01458625

-値は、係数が異なることを示す非常に小さいです。p

Rには尤度比検定が組み込まれています。anova関数を使用して、尤度比検定を計算できます。

anova(mylogit2, mylogit, test="LRT")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
1       395     464.48                       
2       394     458.52  1   5.9658  0.01459 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

ここでも、係数という強力な証拠持つgreとはgpa大きく異なるが。


スコアテスト(別名ラオのスコアテスト、別名ラグランジュ乗数テスト)

スコア関数 対数尤度関数(の誘導体であり、)パラメータであり、(データを一変量ケースを例示のためにここに示されています目的):U(θ)logL(θ|x)θx

U(θ)=logL(θ|x)θ

これは基本的に、対数尤度関数の勾配です。さらに、聞かせてであるフィッシャー情報行列に対する対数尤度関数の二次導関数の負の期待値である。スコアテストの統計は次のとおりです。I(θ)θ

S(θ0)=U(θ02)I(θ0)χ12

スコアテストは次を使用して計算することもできますanova(スコアテストの統計は「Rao」と呼ばれます)。

anova(mylogit2, mylogit,  test="Rao")

Analysis of Deviance Table

Model 1: admit ~ I(gre + gpa) + rank
Model 2: admit ~ gre + gpa + rank
  Resid. Df Resid. Dev Df Deviance    Rao Pr(>Chi)  
1       395     464.48                              
2       394     458.52  1   5.9658 5.9144  0.01502 *
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

結論は以前と同じです。


注意

モデルが線形の場合の異なる検定統計量の興味深い関係は、次のとおりです(Johnston and DiNardo(1997):Econometric Methods):Wald LR Score。


1
縮小モデルが単にgreandを除外するのはなぜgpaでしょうか?テストということではありません、ない?私には、正しくテストに、我々は維持する必要があるとし、その間に課す。β1=β2=0β1=β2β1=β2gregpaβgre=βgpa
シブスギャンブル

1
@SibbsGambling良いキャッチ!それに応じて回答を更新しました。
COOLSerdash

これは連続的な予測変数のみに限定されていますか、または、たとえばカテゴリ変数の2つのレベルが有意に異なるかどうかも確認できますか?たとえば、rank3とrank4の違いは重要ですか?
ダニエル

1
@Danielはい、このアプローチはカテゴリ変数のレベルにも使用できます。multcompパッケージは、それが特に容易になります。たとえば、これを試してくださいglht.mod <- glht(mylogit, linfct = c("rank3 - rank4= 0"))。しかし、はるかに簡単な方法はrank3、参照レベルを作成し(を使用mydata$rank <- relevel(mydata$rank, ref="3"))、通常の回帰出力を使用することです。因子の各レベルは、参照レベルと比較されます。のp値はrank4、目的の比較になります。
COOLSerdash

1
@Danielモデル出力からのp値(変更された参照レベル)glhtは、私にとっては同じです(約)。2番目の質問について:1つの線形仮説のみをテストし 6つのペアワイズ比較すべてをテストします。そのため、複数の比較のためにp値を調整する必要があります。これは、Tukeyの検定を使用したp値が一般に単一の比較よりも高いことを意味します。0.591linfct = c("rank3 - rank4= 0")mcp(rank="Tukey")rank
COOLSerdash

9

変数がバイナリまたは他のものである場合、変数を指定しませんでした。バイナリ変数について話していると思います。プロビットおよびロジットモデルの多項バージョンも存在します。

一般に、完全な三位一体のテストアプローチを使用できます。

尤度比検定

LM-テスト

ワルドテスト

各テストは異なるテスト統計を使用します。標準的なアプローチは、3つのテストのいずれかを取ることです。3つすべてを使用して、共同テストを実行できます。

LRテストでは、制限付きモデルと制限なしモデルの対数尤度の差を使用します。したがって、制限されたモデルは、指定された係数がゼロに設定されているモデルです。無制限のモデルは「通常の」モデルです。Wald検定には、制約のないモデルのみが推定されるという利点があります。基本的に、制限されていないMLEで評価された場合、制限がほぼ満たされているかどうかを尋ねます。ラグランジュ乗数検定の場合、制限されたモデルのみを推定する必要があります。制限付きML推定器は、制限なしモデルのスコアを計算するために使用されます。このスコアは通常ゼロではないため、この不一致がLRテストの基礎となります。LM-Testは、状況に応じて不均一分散のテストにも使用できます。


7

標準的なアプローチは、Waldテスト、尤度比テスト、スコアテストです。漸近的には同じでなければなりません。私の経験では、尤度比テストは有限サンプルのシミュレーションでわずかに優れたパフォーマンスを発揮する傾向がありますが、これが重要なケースは、これらのテストをすべて大まかな近似としてのみとる非常に極端な(小さなサンプル)シナリオです。ただし、モデル(共変量の数、相互作用効果の存在)およびデータ(多重共線形性、従属変数の周辺分布)によっては、「驚くべき漸近の王国」は驚くほど少ない数の観測によって十分に近似できます。

以下は、わずか150の観測値のサンプルでWald、尤度比、およびスコアテストを使用したStataでのそのようなシミュレーションの例です。このような小さなサンプルでも、3つのテストはかなり類似したp値を生成し、帰無仮説が真である場合のp値のサンプリング分布は、均一分布(または少なくとも均一分布からの偏差)に従うようですモンテカルロ実験でのランダム性の継承のために予想されるよりも大きくありません)。

clear all
set more off

// data preparation
sysuse nlsw88, clear

gen byte edcat = cond(grade <  12, 1,     ///
                 cond(grade == 12, 2, 3)) ///
                 if grade < .
label define edcat 1 "less than high school" ///
                   2 "high school"           ///
                   3 "more than high school"
label value edcat edcat
label variable edcat "education in categories"

// create cascading dummies, i.e.
// edcat2 compares high school with less than high school
// edcat3 compares more than high school with high school
gen byte edcat2 = (edcat >= 2) if edcat < .
gen byte edcat3 = (edcat >= 3) if edcat < .

keep union edcat2 edcat3 race south
bsample 150 if !missing(union, edcat2, edcat3, race, south)

// constraining edcat2 = edcat3 is equivalent to adding 
// a linear effect (in the log odds) of edcat
constraint define 1 edcat2 = edcat3

// estimate the constrained model
logit union edcat2 edcat3 i.race i.south, constraint(1)

// predict the probabilities
predict pr
gen byte ysim = .
gen w = .

program define sim, rclass
    // create a dependent variable such that the null hypothesis is true
    replace ysim = runiform() < pr

    // estimate the constrained model
    logit ysim edcat2 edcat3 i.race i.south, constraint(1)
    est store constr

    // score test
    tempname b0
    matrix `b0' = e(b)
    logit ysim edcat2 edcat3 i.race i.south, from(`b0') iter(0)
    matrix chi = e(gradient)*e(V)*e(gradient)'
    return scalar p_score = chi2tail(1,chi[1,1])

    // estimate unconstrained model
    logit ysim edcat2 edcat3 i.race i.south 
    est store full

    // Wald test
    test edcat2 = edcat3
    return scalar p_Wald = r(p)

    // likelihood ratio test
    lrtest full constr
    return scalar p_lr = r(p)
end

simulate p_score=r(p_score) p_Wald=r(p_Wald) p_lr=r(p_lr), reps(2000) : sim
simpplot p*, overall reps(20000) scheme(s2color) ylab(,angle(horizontal))

ここに画像の説明を入力してください


2
スコアテストは、@ jen-boholdがラグランジュ乗数(LM)テストと呼んだものの別名です。
マールテンビュス

いい答え(+1)。私は特にシミュレーションの努力が好きです。Stataでスコアテストを計算する方法を知りませんでした。ありがとう。
COOLSerdash
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.