2017-07-15 12 views
1

私がしようとしていることを実証するためだけのサンプルデータセットが含まれています。glmからggplot2に元のデータセットよりも大きい予測ラインを追加

Speed <- c(400,220,490,210,500,270,200,470,480,310,240,490,420,330,280,210,300,470,230,430,460,220,250,200,390) 

Hit <- c(0,1,0,1,0,0,1,0,0,1,1,0,0,1,1,1,1,1,0,0,0,1,1,1,0) 

obs <- c(1:25) 

msl2.data <- as.data.frame(cbind(obs,Hit,Speed)) 

msl2.glm <- glm(Hit ~ Speed, data = msl2.data, family = binomial) 

Doing基本パッケージで何をしたいですか?

plot(Hit~ Speed, data = msl2.data, xlim = c(0,700), xlab = "Speed", ylab = "Hit", main = "Plot of hit vs Speed") 

pi.hat<-(predict(msl2.glm, data.frame(Speed=c(0:700)), type="response")) 

lines(0:700, pi.hat, col="blue") 

私は上記のプロットを再作成しようとしていますが、ggplotです。私が回避できなかったエラーは、aes(x,y)の長さが異なっていますが、これは真ですが、それらの長さを変えたいと思います。

ggでこれについてのご意見はありますか?

+0

予測のためのデータフレームを作成し、これを 'geom_line'に渡し、' geom_point'に 'data = msl2.data'を使用します:' x'を変更して、必要に応じて「エース」に「y」と入力します。またはgeom_smooth(method = "glm"、method.args = list(family = "binomial")、fullrange)を指定すると、 = T、se = F)+ xlim(0,700) 'プロットを拡張するには' fulrange'と 'xlim'が必要です。 – user20650

+0

パーフェクト!そんなにありがとう、これは私を狂ってしまった! –

答えて

3

あなたには2つのアプローチがあります。最初はすべて のモデリングをggplotの内側で実行し、2番目のモデルは外側にあり、適切なデータ をプロットするように渡します。

まず

gplot(dat=msl2.data, aes(Speed, Hit)) + 
     geom_point() + 
     geom_smooth(method="glm", method.args=list(family="binomial"), 
        fullrange=TRUE, se=FALSE) + 
     xlim(0, 700) 

fullrange予測線はxの範囲をカバーするように指定されています。 xlimはx軸を延長します。

#Create prediction dataframe 
pred <- data.frame(Speed=0:700, pi.hat) 

ggplot() + 
    # prediction line 
    geom_line(data=pred, aes(Speed, pi.hat)) + 
    # points - note different dataframe is used 
    geom_point(dat=msl2.data, aes(Speed, Hit)) 

Iは、一般的に外部モデリング(第二の方法)を行うことを好む、および描画機構として純粋ggplotを使用します。

関連する問題