回答:
応用研究者の答えは次のとおりです(統計パッケージRを使用)。
まず、いくつかのデータを作成しましょう。つまり、単純な2変量ロジスティック回帰モデルlog(\ frac {p} {1-p})= \ beta_0 + \ beta_1 \ cdot xのデータをシミュレートします。
> 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
次に、切片()と勾配()を推定します。ご覧のとおり、切片はで、勾配はです。
> ## 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 β 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
glm.fitted
とlogit2prop.glm.rdcm.
?いくつかの非常に小さな違いがあります。あなたの例で正確に同じ数字が得られなかった理由がわかりませんでした。チェックすると; library(arm); data.frame(logit2prop(glm.rdcm), invlogit(glm.rdcm))
以下のためにまったく同じ結果を生成logit2prop
してinvlogit
。そのため、同じように、私はなぜ尋ねるglm.fitted
とinvlogit
まったく同じ番号を返していませんか?
ロジスティックモデルのリンク関数はです。その逆はです。 G:X↦EXPX
ロジスティックモデルでは、左側は成功の確率であるのロジットです。
したがって、が必要なは、右側でを評価する必要があります。グラム
。
glm(y ~ x)
ロジスティック回帰を行わないことに注意してくださいfamily=binomial(link="logit")
。設定する必要があります。出力ではDispersion parameter for gaussian family
なく、と言うことに注意してくださいbinomial family
。正しく実行すると、fitted(glm.mod)
実際にはロジットではなく推定確率が返されます。でロジットを取得しpredict(glm.mod, type="link")
ます。