2つの異なる軸でこれを実行しようとすると、乱雑になることがあり、おそらく悪い考えです。ただし、次の方法でそのプロットを複製することができます。
まず、いくつかのサンプルデータ:我々は必要、そして、
df %>%
ggplot(aes(x = x, y = as.numeric(response) - 1)) +
geom_jitter(height = 0.2) +
stat_smooth(method="glm", family="binomial") +
ylab("Probability")
:
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")
をあなたのニーズに合ったあなたの必要に応じてバーを大きくしたり小さくしたりする場合は、ymin
とymax
の仕様を変更して(例えば、Freq
からFreq * 2
に変更する)乗数を含めることで達成できますが、これは高さの解釈を変更しますバーの