No.20156 Re: ロジスティック回帰分析 【taipapa】 2013/08/26(Mon) 21:32
貴方が考えているのは以下の様なことでしょうか...
Rで,シミュレートしてみました.> test.df <- data.frame(c(rep("A", 50), rep("B", 50)),round(c(rnorm(50, 60, 30),この程度の差に医学的な意味があるかどうかは,また,別の問題でしょうが...
+ rnorm(50, 60, 10)), 0), round(c(rnorm(50, 120, 30), rnorm(50, 130, 20)),0),
+ round(c(rnorm(50, 90, 20), rnorm(50, 95, 25))), round(c(rnorm(50, 20, 10),
+ rnorm(50, 20, 5)))) # 疾患タイプAとBそれぞれ50人で,年齢,LDL,血糖,BUNを測定(ほんの少しの差をつける)
> colnames(test.df) <- c("type", "age", "LDL", "glucose", "BUN")
> test.glm <- glm(type ~ age + LDL + glucose + BUN, family=binomial, data=test.df) # ロジスティック回帰を実行
> summary(test.glm)
………………………
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.531526 2.184434 -2.074 0.0380 *
age -0.009505 0.011225 -0.847 0.3971
LDL 0.024929 0.010146 2.457 0.0140 *
glucose 0.018422 0.010991 1.676 0.0937 .
BUN 0.012410 0.029502 0.421 0.6740
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
…………
> library(epicalc)
> logistic.display(test.glm)
Logistic regression predicting type : B vs A
crude OR(95%CI) adj. OR(95%CI) P(Wald's test) P(LR-test)
age (cont. var.) 0.989 (0.9697,1.0086) 0.9905 (0.969,1.0126) 0.397 0.388
LDL (cont. var.) 1.02 (1,1.04) 1.03 (1.01,1.05) 0.014 0.008
glucose (cont. var.) 1.01 (0.99,1.03) 1.02 (1,1.04) 0.094 0.086
BUN (cont. var.) 1 (0.95,1.05) 1.01 (0.96,1.07) 0.674 0.674
……………….
# type Bになる確率は,prpbabilityB = 1/(1+exp(-Xbeta))なので,上記のsummary(test.glm)の表のEstimatedから計算する
> test.df2$Xb <- -0.009505*test.df$age + 0.024929*test.df$LDL + 0.018422*test.df$glucose + 0.01241*test.df$BUN
> test.df2$Xb2 <- test.df2$Xb - 4.531526
> test.df2$probabilityB <- 1/(1 + exp(-(test.df2$Xb2)))
# これで,Bになる確率がtest.df2のコラムprobabilityBに入る.
# この確率をもとに,ROC curveを書いてみる.
> library(Epi)
> ROC(test.df2$probabilityB, test.df2$type, plot="ROC")
貴方のご希望にそっていますでしょうか?
No.20157 Re: ロジスティック回帰分析 【梶本】 2013/08/27(Tue) 00:14
御返答ありがとうございます。
最初の私の書き方が不十分だったようです。
書いていただいたRでのコマンド例で考えますと
-0.009505*test.df$age + 0.024929*test.df$LDL + 0.018422*test.df$glucose + 0.01241*test.df$BUN- 4.531526
が回帰式になると思うのですが(この例でしたらtest.df2$Xb2),この式に従って患者毎に「スコア」を算出します。
このスコアと疾患か否かについてROC曲線を描くことが統計学的に正しいのかがわからないために質問させていただきました。
つまりこのコマンド例に沿いますと
> ROC(test.df2$Xb2, test.df2$type, plot="ROC")
によって得られるROC曲線が統計学的に正しいか否かについてご教示お願いいたします。
No.20158 Re: ロジスティック回帰分析 【taipapa】 2013/08/27(Tue) 00:48
probabilityBはXb2を変換しているだけなので,同じカーブになります(念の為に貼っておきます).
「統 計学的に正しいか?」とはどういう意味でしょうか? Xb2とtypeのロジスティック回帰を行なうこと自体はまっとうな統計学的処理です.普通にやると 思います.正しいかと言われれば正しいとしか言い様がありません.問題は,固有科学において,それにどのような意味があるかで,貴方のデータを知らない私 としては,「それは貴方が考えるしかありません」と言わざるを得ないのですが...
No.20159 Re: ロジスティック回帰分析 【梶本】 2013/08/27(Tue) 00:58
ありがとうございます。
taipapaさんと同じ曲線を描いていたんですね。
統計をまだ理解できていないようですので,明後日の方向で話してるかもしれません。
xb2とtypeのROC曲線を描くのが普通に行われているという理解でよろしいでしょうか?
No.20161 Re: ロジスティック回帰分析 【青木繁伸】 2013/08/27(Tue) 18:56
何が議論になっているのかよくわからなかったので傍観しておりましたが
xb2 は linear.predictor 線形予測子です。それをロジスティック曲線に代入して得られるのが発生確率です。ちなみにそれぞれは glm の返すオブジェクトに含まれているので,再計算は不要です(fitted.values と predict 関数参照)。
発生確率は線形予測子の単調非減少関数なので,どちらを使っても ROC 曲線は同じになります。
そういう意味では「xb2とtypeのROC曲線を描くのが普通」というのはどうともいえないでしょう。
No.20162 Re: ロジスティック回帰分析 【taipapa】 2013/08/27(Tue) 19:43
普段,あんまりglmを使わないので,オブジェクトまで見ておらず車輪の再発明もどきをやってしまいました.(^^;;; ご指摘ありがとうございます.
発 生確率を用いてROC curveを書くのが順当とは思いますが,スコア化するというなら,線形予測子(ここではXb2)ではなく,発生確率(probabilityB)の計算 式自体を使って,患者さんごとに,「貴方がタイプBである確率は80%ですよ」とか予測できるようにした方が役に立つんじゃないかなぁと思います.ただ, それにはこんな程度のAUCではハズレすぎて無理がありますが...
なお,rms packageのlrmでは各予測因子と線形予測子と発生確率の関係がnanogoramで簡単に表示できて便利です.
#青木先生,表の整形をやっていただき有難うございます.表がいつも乱れるのですが,スペースでもタブでもうまくいきません.ここでお聞きするべきではないかもしれませんが,どのように整形しているのか教えていただければ幸いです.
No.20163 Re: ロジスティック回帰分析 【青木繁伸】 2013/08/27(Tue) 21:38
> どのように整形しているのか
記事の必要部分を<pre>〜</pre>で囲みます(ブラケットは小文字)。挿入位置に少しコツが必要なので,件の記事を「編集」で表示してみてください。
No.20164 Re: ロジスティック回帰分析 【taipapa】 2013/08/27(Tue) 22:09
青木先生,有難うございます.今後は気をつけるようにいたします.
● 「統計学関連なんでもあり」の過去ログ--- 046 の目次へジャンプ
● 「統計学関連なんでもあり」の目次へジャンプ
● 直前のページへ戻る