ロジスティック回帰ベータと生データを使用して確率を取得するにはどうすればよいですか


17

適合モデル(文献から)があります。予測変数の生データもあります。

確率を得るために使用すべき方程式は何ですか?基本的に、生データと係数を組み合わせて確率を得るにはどうすればよいですか?

回答:


15

応用研究者の答えは次のとおりです(統計パッケージRを使用)。

まず、いくつかのデータを作成しましょう。つまり、単純な2変量ロジスティック回帰モデルlog(\ frac {p} {1-p})= \ beta_0 + \ beta_1 \ cdot xのデータをシミュレートしますlog(p1p)=β0+β1x

> set.seed(3124)
> 
> ## Formula for converting logit to probabilities 
> ## Source: http://www.statgun.com/tutorials/logistic-regression.html
> logit2prop <- function(l){exp(l)/(1+exp(l))}
> 
> ## Make up some data
> y <- rbinom(100, 1, 0.2)
> x <- rbinom(100, 1, 0.5)

予測変数xは二分変数です:

> x
  [1] 0 1 1 1 1 1 0 1 0 1 0 1 0 0 1 1 1 0 1 1 1 1 1 1 0 0 1 1 1 1 0 0 1 0 0 1 0 0 0 1 1 1 0 1 1 1 1 
 [48] 1 1 0 1 0 0 0 0 1 0 0 1 1 0 0 0 0 1 0 0 1 1 1 0 0 1 0 0 0 0 1 1 0 1 0 1 0 1 1 1 1 1 0 1 0 0 0
 [95] 1 1 1 1 1 0

次に、切片(β0)と勾配(β1)を推定します。ご覧のとおり、切片はβ0=0.8690で、勾配はβ1=1.0769です。

> ## Run the model
> summary(glm.mod <- glm(y ~ x, family = "binomial"))

[...]

    Coefficients:
            Estimate Std. Error z value Pr(>|z|)   
(Intercept)  -0.8690     0.3304  -2.630  0.00854 **
x            -1.0769     0.5220  -2.063  0.03910 * 
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 

(Dispersion parameter for binomial family taken to be 1)

[...]

第三に、Rは、ほとんどの統計パッケージと同様に、近似値、つまり確率を計算できます。これらの値を参照として使用します。

> ## Save the fitted values
> glm.fitted <- fitted(glm.mod)

4番目に、このステップはあなたの質問を直接参照します:生データ(ここでは)があり、係数(および)があります。それでは、ロジットを計算して、これらの近似値を保存します。β 0 β 1xβ0β1glm.rcdm

> ## "Raw data + coefficients" method (RDCM)
## logit = -0.8690 + (-1.0769) * x
glm.rdcm <- -0.8690 + (-1.0769)*x

最後のステップは、Rのfitted関数(glm.fitted)と私の「手作り」アプローチ(logit2prop.glm.rdcm)に基づいた適合値の比較です。私自身の関数logit2prop(最初のステップを参照)はロジットを確率に変換します:

> ## Compare fitted values and RDCM
> df <- data.frame(glm.fitted, logit2prop(glm.rdcm))
> df[10:25,]
> df[10:25,]
   glm.fitted logit2prop.glm.rdcm.
10  0.1250000            0.1250011
11  0.2954545            0.2954624
12  0.1250000            0.1250011
13  0.2954545            0.2954624
14  0.2954545            0.2954624
15  0.1250000            0.1250011
16  0.1250000            0.1250011
17  0.1250000            0.1250011
18  0.2954545            0.2954624
19  0.1250000            0.1250011
20  0.1250000            0.1250011
21  0.1250000            0.1250011
22  0.1250000            0.1250011
23  0.1250000            0.1250011
24  0.1250000            0.1250011
25  0.2954545            0.2954624

6
glm(y ~ x)ロジスティック回帰を行わないことに注意してくださいfamily=binomial(link="logit")。設定する必要があります。出力ではDispersion parameter for gaussian familyなく、と言うことに注意してくださいbinomial family。正しく実行すると、fitted(glm.mod)実際にはロジットではなく推定確率が返されます。でロジットを取得しpredict(glm.mod, type="link")ます。
カラカル

ああ!私はそれを修正しました。@caracal、私を修正してくれてありがとう!これは本当に恥ずかしいです(別のSOスレッドで既に正しい答えを出しているので、さらに恥ずかしいです)。
ベルントヴァイス

1
パッケージアームには関数invlogitがあり、これは関数logit2propです。
マノエルガルディーノ

我々はのためにまったく同じ番号を取得しているべきではないglm.fittedlogit2prop.glm.rdcm.?いくつかの非常に小さな違いがあります。あなたの例で正確に同じ数字が得られなかった理由がわかりませんでした。チェックすると; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))以下のためにまったく同じ結果を生成logit2propしてinvlogit。そのため、同じように、私はなぜ尋ねるglm.fittedinvlogitまったく同じ番号を返していませんか?
エルドアンセヴァー

20

ロジスティックモデルのリンク関数はです。その逆はです。 GXEXPXf:xlogx1xg:xexpx1+expx

ロジスティックモデルでは、左側は成功の確率であるのロジットです。π

f(π)=β0+x1β1+x2β2+

したがって、が必要なは、右側でを評価する必要があります。グラムπg

π=g(β0+x1β1+x2β2+)


順序ロジスティック回帰はどうですか?それでは、ロジックはどうなりますか?
user333

@ user333:えーと...順序ロジスティック回帰ではあまり遊んでいませんが...同じリンク関数を使用していると思います。いずれの場合でも、ロジックは同じです:応答変数を取得するためにリンク関数を逆にします...
ocram

ええ...しかし、どの確率がどのターゲットカテゴリにマッピングされているかをどのように知るのですか?
user333

@ user333、あなたの質問はロジスティック回帰に関するものでしたが、順序回帰に関する回答も必要な場合は、それを質問に追加してください。
mpiktas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.