連続予測子と二分応答変数を含むdata.frameがあります。
_> head(df)
position response
1 0 1
2 3 1
3 -4 0
4 -1 0
5 -2 1
6 0 0
_
glm()
- functionを使用して、ロジスティック回帰を簡単に計算できます。この時点まで問題はありません。
次に両方の経験的確率を含むggplot
でプロットを作成します全体の11の予測値のそれぞれについておよびフィットされた回帰直線 。
私は先に進んでcast()
で確率を計算し、それらを別のdata.frameに保存しました
_> probs
position prob
1 -5 0.0500
2 -4 0.0000
3 -3 0.0000
4 -2 0.2000
5 -1 0.1500
6 0 0.3684
7 1 0.4500
8 2 0.6500
9 3 0.7500
10 4 0.8500
11 5 1.0000
_
確率をプロットしました:
_p <- ggplot(probs, aes(x=position, y=prob)) + geom_point()
_
しかし、フィットした回帰直線を追加しようとすると
_p <- p + stat_smooth(method="glm", family="binomial", se=F)
_
警告を返します:_non-integer #successes in a binomial glm!
_。 _stat_smooth
_を「正しく」プロットするためには、元のdf
データで二分変数を使用して呼び出す必要があることを知っています。ただし、ggplot()
でdf
dataを使用すると、確率をプロットする方法がわかりません。
確率と回帰直線を1つのプロットに組み合わせるにはどうすればよいですか、これはggplot2内にあることを意図した方法で、つまり警告やエラーメッセージを取得せずに?
基本的に3つのソリューションがあります。
データを2つの別々のdata.frame
sに格納した後の最も簡単な方法は、position
によってそれらをマージすることです。
mydf <- merge( mydf, probs, by="position")
次に、このdata.frame
でggplot
を警告なしで呼び出すことができます。
ggplot( mydf, aes(x=position, y=prob)) +
geom_point() +
geom_smooth(method = "glm",
method.args = list(family = "binomial"),
se = FALSE)
将来的には、後でマージする必要がある2つの個別のdata.framesの作成を直接回避できます。個人的には、そのためにplyr
パッケージを使用するのが好きです:
librayr(plyr)
mydf <- ddply( mydf, "position", mutate, prob = mean(response) )
レイヤーごとに別のdata.frame
を使用できるということを忘れていました。これはggplot2
の大きな利点です。
ggplot( probs, aes(x=position, y=prob)) +
geom_point() +
geom_smooth(data = mydf, aes(x = position, y = response),
method = "glm", method.args = list(family = "binomial"),
se = FALSE)
追加のヒントとして:組み込み関数stats::df
をこの変数名に割り当てることでオーバーライドするため、変数名df
の使用を避けます。