2016-10-24 20 views
0

私はロジスティック回帰分析の結果を視覚化したいと、この気の利いたプロットhereに出くわした:私はggplotで再作成するには、このプロットしたいggplot2でロジスティック回帰結果のヒストグラムと曲線のコンボプロットを再作成するにはどうすればよいですか?

hope this works http://www.shizukalab.com/toolkits/plotting-logistic-regression-in-r/logistic_1.jpg

はそれにアプローチする方法がわかりません。具体的には、プロットの「上」に逆さのヒストグラムを追加するにはどうすればよいですか?

誰かが正しい方向に向かうことができますか?

答えて

0

2つの異なる軸でこれを実行しようとすると、乱雑になることがあり、おそらく悪い考えです。ただし、次の方法でそのプロットを複製することができます。

まず、いくつかのサンプルデータ:我々は必要、そして、

df %>% 
    ggplot(aes(x = x, y = as.numeric(response) - 1)) + 
    geom_jitter(height = 0.2) + 
    stat_smooth(method="glm", family="binomial") + 
    ylab("Probability") 

enter image description here

df <- 
    data.frame(
    x = c(rnorm(100, 30,2) 
      , rnorm(100, 28, 2)) 
    , response = factor(rep(c("Y","N"), each = 100)) 
) 

ただ、私たちはここで、作業しているかを確認するには、より伝統的なプロットタイプでありますプロットするために使用するビンを構築します。私はブレークしたい場所(ここでは、prettyを使用して自動化)でデータの一部を切り取り、ヒストグラムを模倣するために長方形を作成するために使用するx/y範囲を生成します。

その後
binned <- 
    df %>% 
    mutate(bin = cut(x, pretty(x))) %$% 
    table(bin, response) %>% 
    prop.table() %>% 
    as.data.frame() %>% 
    separate(bin, c("xmin","xmax"), ",") %>% 
    mutate_each(funs(parse_number(.)), xmin, xmax) %>% 
    mutate(ymin = ifelse(response == "N" 
         , 0 
         , 1 - Freq) 
     , ymax = ifelse(response == "Y" 
         , 1 
         , Freq)) 

、異なるgeom_*に各データ型を渡し、そしてあなたが望むプロットを得る必要があります:あなたは、その後に軸/ラベルでプレーしたい

ggplot() + 
    geom_rect(
    aes(xmin = xmin, xmax = xmax, ymin = ymin, ymax = ymax) 
    , data = binned 
) + 
    stat_smooth(
    mapping = aes(x = x, y = as.numeric(response) - 1) 
    , data = df 
    , method="glm", family="binomial") + 
    ylab("Probability/Portion of data in category") 

enter image description here

をあなたのニーズに合ったあなたの必要に応じてバーを大きくしたり小さくしたりする場合は、yminymaxの仕様を変更して(例えば、FreqからFreq * 2に変更する)乗数を含めることで達成できますが、これは高さの解釈を変更しますバーの

関連する問題