使用したコードは、glm
関数を使用してロジスティック回帰モデルを推定します。あなたはデータを含めなかったので、私はいくつかを補います。
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
ロジスティック回帰モデルは、バイナリ応答変数と、この場合は1つの連続予測子との関係をモデル化します。結果は、予測変数に対する線形関係としてのロジット変換確率です。あなたの場合、結果はギャンブルでの勝ちまたは不勝に対応するバイナリ応答であり、賭け金の価値によって予測されています。からの係数mod1
は、ログに記録されたオッズで与えられます(解釈が困難です)。
ロジット(p )=ログ(p(1 − p )) = β0+ β1バツ1
記録されたオッズを確率に変換するには、上記を
p = exp(β0+ β1バツ1)(1 + exp(β0+ β1バツ1))
この情報を使用して、プロットを設定できます。まず、予測変数の範囲が必要です。
plotdat <- data.frame(bid=(0:1000))
次に、を使用してpredict
、モデルに基づいて予測を取得できます
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
近似値は次の方法でも取得できることに注意してください
mod1$fitted
を指定するとse.fit=TRUE
、各近似値に関連付けられた標準エラーも取得します。結果data.frame
は、次の要素を含む行列です。近似予測(fit
)、推定標準誤差(se.fit
)、および標準誤差の計算に使用される分散の平方根を与えるスカラー(residual.scale
)。二項ロジットの場合、値は(あなたが入力することで見ることができる1になるpreddat$residual.scale
にはR
)。これまでに計算したものの例を表示したい場合は、と入力できますhead(data.frame(preddat))
。
次のステップは、プロットを設定することです。最初にパラメーターを使用して空白のプロットエリアを設定するのが好きです。
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
これで、適合確率の計算方法を知ることが重要な場所を確認できます。上記の2番目の式に従って、近似確率に対応する線を引くことができます。を使用してpreddat data.frame
、近似値を確率に変換し、それを使用して予測変数の値に対して線をプロットできます。
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
最後に、質問に答えてください。信頼区間は、近似値+/- 1.96
と標準誤差の確率を計算することにより、プロットに追加できます。
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
ランダムに生成されたデータから得られるプロットは、次のようになります。
便宜上、ここにすべてのコードを1つのチャンクで示します。
set.seed(1234)
mydat <- data.frame(
won=as.factor(sample(c(0, 1), 250, replace=TRUE)),
bid=runif(250, min=0, max=1000)
)
mod1 <- glm(won~bid, data=mydat, family=binomial(link="logit"))
plotdat <- data.frame(bid=(0:1000))
preddat <- predict(mod1, newdata=plotdat, se.fit=TRUE)
with(mydat, plot(bid, won, type="n",
ylim=c(0, 1), ylab="Probability of winning", xlab="Bid"))
with(preddat, lines(0:1000, exp(fit)/(1+exp(fit)), col="blue"))
with(preddat, lines(0:1000, exp(fit+1.96*se.fit)/(1+exp(fit+1.96*se.fit)), lty=2))
with(preddat, lines(0:1000, exp(fit-1.96*se.fit)/(1+exp(fit-1.96*se.fit)), lty=2))
(注:これは、stats.stackexchangeとの関連性を高めるために、大幅に編集された回答です。)