ロジスティック回帰の信頼区間の計算


15

私は二項ロジスティック回帰分析を使用して、ユーザーが何かをクリックする可能性にさらされているhas_xか、has_y影響を与えているかどうかを特定しています。私のモデルは次のとおりです。

fit = glm(formula = has_clicked ~ has_x + has_y, 
          data=df, 
          family = binomial())

これは私のモデルからの出力:

Call:
glm(formula = has_clicked ~ has_x + has_y, 
    family = binomial(), data = active_domains)

Deviance Residuals: 
    Min       1Q   Median       3Q      Max  
-0.9869  -0.9719  -0.9500   1.3979   1.4233  

Coefficients:
                      Estimate Std. Error z value Pr(>|z|)    
(Intercept)          -0.504737   0.008847 -57.050  < 2e-16 ***
has_xTRUE -0.056986   0.010201  -5.586 2.32e-08 ***
has_yTRUE  0.038579   0.010202   3.781 0.000156 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 217119  on 164182  degrees of freedom
Residual deviance: 217074  on 164180  degrees of freedom
AIC: 217080

Number of Fisher Scoring iterations: 4

各係数は重要であるため、このモデルを使用して、これらの組み合わせの値が次のアプローチを使用していることを知ることができます。

predict(fit, data.frame(has_x = T, has_y=T), type = "response")

標準に関するレポート方法がわかりません。予測のエラー。

  1. を使用するだけですか?または、ここで説明する方法を使用してを変換する必要があり ますか?1.96SESE

  2. 両方の変数の標準誤差を理解したい場合、どのように考えますか?

この質問とは異なり、エラーの上限と下限のパーセンテージを理解することに興味があります。たとえば、私の予測では、True,Trueでこれがであると計算できますか?(0.3%が私のポイントを説明するために選ばれました)95 C I+/0.395C




@kjetilbhalvorsen OPは予測間隔を必要とするようですが、問題の原因である可能性のあるログスケールではなくORスケールで動作しているようですので、それは重複していますか?
mdewey

2
ロジスティック回帰がどの程度良好に予測するかを評価したい場合、通常は予測+ SEとは異なる尺度を使用します。人気のある評価尺度の1つは、それぞれのAUCを備えたROCカーブです
アディベンダー

1
これは助けになるでしょうか?stackoverflow.com/questions/47414842/...
ザビエル・ブーレSicotte

回答:


24

あなたの質問は、最初は混乱しているオッズ比と確率を扱っているという事実から来るかもしれません。ロジスティックモデルは、の非線形変換であるので、信頼区間を計算することは簡単でないようです。βTバツ

バックグラウンド

ロジスティック回帰モデルのことを思い出してください

  • 確率P = E α + β 1 X 1 + β 2 X 2(Y=1)p=eα+β1バツ1+β2バツ21+eα+β1バツ1+β2バツ2

  • オッズP(Y=1p1p=eα+β1バツ1+β2バツ2

  • ログオッズログPY=1ログp1p=α+β1バツ1+β2バツ2

変数 1単位の増加、つまりx 1 + 1がある場合を考えてみましょう。新しいオッズはバツ1バツ1+1

オッズY=1=eα+β1バツ1+1+β2バツ2=eα+β1バツ1+β1+β2バツ2
  • したがって、オッズ比(OR)

オッズバツ1+1オッズバツ1=eα+β1バツ1+1+β2バツ2eα+β1バツ1+β2バツ2=eβ1
  • ログオッズ比 = β1

  • 相対リスクまたは(確率比)= eα+β1x1+β1+β2x21+eα+β1x1+β1+β2x2eα+β1x1+β2x21+eα+β1x1+β2x2

係数の解釈

どのように係数値解釈する?他のすべてが固定されたままであると仮定すると:βj

  • 内のすべてのユニットの増加のためによって対数オッズ比が増加β Jxjβj
  • 内のすべてのユニットの増加のためオッズ比が増加することによりE β Jxjeβj
  • すべての増加のためからKためにk個の+ Δにすることにより、オッズ比が増加E β j個の Δをxjkk+ΔeβjΔ
  • 係数が負の場合、増加はオッズ比の減少につながります。xj

単一のパラメータの信頼区間βj

を使用するだけですか?または、ここで説明するアプローチを使用してSEを変換する必要がありますか?1.96SE

パラメータので、 Maxiumum尤度推定を用いて推定され、MLEの理論は、それが漸近的に正常であることを教えてくれるので、私たちは、大量のサンプルを使用することができますワルド通常のを取得するために信頼区間をβj

βj±zSE(βj

対数オッズ比の信頼区間を提供します。MLEの不変のプロパティを使用すると、私たちが得るために累乗することを可能にする

eβj±zSEβj

これは、オッズ比の信頼区間です。これらの間隔は、単一のパラメーター専用です。

両方の変数の標準誤差を理解したい場合、どのように考えますか?

複数のパラメーターを含める場合は、Bonferroni手順を使用できます。それ以外の場合は、すべてのパラメーターについて、確率推定に信頼区間を使用できます

いくつかのパラメーターのボンフェローニ手順

g1α

βg±z1α2gSEβg

確率推定の信頼区間

pPrpLppうん=.95

エンドポイント変換と呼ばれるアプローチの1つは次のとおりです。

  • バツTβ
  • FバツTβ

PrバツTβ=FバツTβバツTβ

[PrバツTβLPrバツTβPrバツTβうん]=[FバツTβLFバツTβFバツTβうん]

βTx±zSE(βTx)

[exTβzSE(xTβ)1+exTβzSE(xTβ),exTβ+zSE(xTβ)1+exTβ+zSE(xTβ),]

xTβ

Var(xTβ)=xTΣx

(0,1)

デルタ方式やブートストラップなどを使用する他のアプローチもいくつかあります。それぞれに独自の仮定、利点、制限があります。


ソースと情報

このトピックに関する私のお気に入りの本は、Kutner、Neter、Li、第14章の「Applied Linear Statistical Models」です。

それ以外の場合は、いくつかのオンラインソースがあります。


これの大部分は、係数のCIについてであり、OPが知ることは素晴らしいことですが、それが彼が必要としていることだと確信していますか?後のセクションでは、より関連性があるように見えますが、あまりにも早く読むと区別が失われる可能性がありますか?
mdewey

2
はい、おそらく正しいでしょう-しかし、ログ回帰のオッズ、ログオッズ、および確率を理解することは、私が過去に苦労したことです-この投稿が将来の誰かを助けるように十分にトピックを要約することを願っています おそらく、私はCIを提供することで、より明示的に質問に答えることができますが、我々は、共分散行列を必要とする
ザビエル・ブーレSicotte

4

予測の95%信頼区間を取得するには、ロジットスケールで計算し、それらを確率スケール0-1に変換し直します。タイタニックデータセットを使用した例を次に示します。

library(titanic)
data("titanic_train")

titanic_train$Pclass = factor(titanic_train$Pclass, levels = c(1,2,3), labels = c('First','Second','Third'))

fit = glm(Survived ~ Sex + Pclass, data=titanic_train, family = binomial())

inverse_logit = function(x){
  exp(x)/(1+exp(x))
}

predicted = predict(fit, data.frame(Sex='male', Pclass='First'), type='link', se.fit=TRUE)

se_high = inverse_logit(predicted$fit + (predicted$se.fit*1.96))
se_low = inverse_logit(predicted$fit - (predicted$se.fit*1.96))
expected = inverse_logit(predicted$fit)

平均および低/高95%CI。

> expected
        1 
0.4146556 
> se_high
        1 
0.4960988 
> se_low
        1 
0.3376243 

そして、type='response'平均を与えるだけのを使用した場合の出力

predict(fit, data.frame(Sex='male', Pclass='First'), type='response')
        1 
0.4146556

predict(fit, data.frame(Sex='male', Pclass='First'), type='response', se.fit=TRUE)働くでしょう。
Tony416
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.