2017-07-15 1 views
1

J'ai inclus un exemple de jeu de données juste pour montrer ce que j'essaie de faire.Ajout de la ligne de prévision de glm à ggplot2, plus grande que l'ensemble de données d'origine

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) 

Faire ce que je veux dans le paquet de base.

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") 

J'essaie de recréer l'intrigue ci-dessus, mais dans ggplot. L'erreur que j'ai été incapable de contourner est la aes(x,y) ont des longueurs différentes, ce qui est vrai, mais je veux qu'ils aient des longueurs différentes.

Des idées pour cela dans gg?

+0

Vous devez utiliser deux instructions 'data =' différentes: créer une base de données pour les prédictions, et passer à 'geom_line', et utiliser' data = msl2.data' dans 'geom_point': changer le' x' et "y" dans le 'aes 'selon les besoins. Ou fais tout ce que je ggplot 'ggplot (dat = msl2.data, aes (vitesse, Hit)) + geom_point() + geom_smooth (méthode =" glm ", méthode.args = liste (family =" binomial "), fullrange = T, se = F) + xlim (0, 700) 'Notez que vous avez besoin de' fulrange' et 'xlim' pour étendre le tracé – user20650

+0

Parfait! Merci beaucoup, ça me rendait fou! –

Répondre

3

Vous avez quelques approches; le premier fait toute la modélisation à l'intérieur de ggplot, la seconde le fait à l'extérieur et transmet les données pertinentes à tracer.

Première

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 est spécifiée de sorte que les lignes de prédiction couvre la x-gamme. xlim étend l'axe des x.

Deuxième

#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)) 

Je préfère généralement faire la modélisation à l'extérieur (deuxième approche), et utiliser ggplot purement comme un mécanisme de traçage.