2015-01-12 2 views
0

Образец моего кадра данных ниже:Как построить несколько кривых логистической регрессии на одном участке в Ggplot 2

ent corp smb fit se.fit UL LL PredictedProb 
    1 0 0 -2.54 0.10 0.087 0.06   0.072 
    0 0 1 -3.71 0.05 0.026 0.02   0.023 
    0 1 0 -3.60 0.05 0.029 0.02   0.026  
    1 0 0 -2.54 0.10 0.087 0.060  0.072  
    0 0 1 -3.71 0.05 0.026 0.021  0.023  

Я хотел бы сделать 3 участков, наилучшим образом подходит для линии каждый бинарный (отправленный, corp, smb) на основе прогнозируемой вероятности - и, если возможно, я также хотел бы добавить точки для прогнозируемых вероятностей. До сих пор мне удалось создать 3 отдельных сюжета, но я хотел бы разместить все три на одном сюжете. Ниже то, что я до сих пор:

Вот код для участка Corp:

corp.line <- ggplot(newdata3, aes(corp,PredictedProb)) corp.line <- corp.line + stat_smooth(method = "glm") corp.line

Вот код для SMB участка:

smb.line <- ggplot(newdata3, aes(smb,PredictedProb)) smb.line <- smb.line + stat_smooth(method = "glm") smb.line

Вот код для участка Ent:

ent.line <- ggplot(newdata3, aes(enterprise,PredictedProb)) ent.line <- ent.line + stat_smooth(method="glm",family= binomial(link="logit")) ent.line

Кроме того, на предыдущем графике мне не удалось построить гладкую кривую вокруг линии наилучшего соответствия, используя stat_smooth (method = "glm"). Мне также пришлось добавить family = binomial (link = "logit"). Кто-нибудь знает, почему это может быть так.

Чтобы повторить, мой главный вопрос заключается в том, как я могу построить все три из них на одном участке и не разделить их. Кроме того, я хотел бы добавить точки для прогнозируемых вероятностей.

Прошу прощения за любые нарушения от моего имени. Я все еще новичок в обмене стеками и ggplot2.

+0

https://stackoverflow.com/questions/21192002/how-to-combine-2-plots-ggplot-into-one-plot может помочь решить эту – ckluss

+0

@ckluss Спасибо за связь! Хотя это не решило мою проблему, было очень полезно, как объединить графики. –

ответ

0

Вы не сможете построить кривые «S», которые вы получите с логистической регрессией, потому что у вас нет непрерывной переменной для построения надстройки. Вместо этого вы сможете собирать предсказанные значения и CI вокруг этих прогнозируемых значений.

Создайте столбец в вашем фрейме данных, который содержит ent, corp и smb.

newdata3<-read.table("clipboard", header=T) 
newdata4<-unique(newdata3)[-4,] #different lower limits for smb... removing the second smb LL 


newdata4$NewVar<-rep("",length(newdata[,1])) 
newdata4$NewVar[which(newdata3$ent==1)]<-"ent" 
newdata4$NewVar[which(newdata3$corp==1)]<-"corp" 
newdata4$NewVar[which(newdata3$smb==1)]<-"smb" 

windows(5,5) 
ggplot(newdata4, aes(NewVar, PredictedProb, colour=NewVar)) + geom_point() + 
    geom_errorbar(aes(ymin=LL, ymax=UL), width=.1, size=1) 

enter image description here

+0

эй спасибо за помощь. После того, как я, хотя об этом еще немного, пришел к тому же выводу о том, что у меня нет непрерывного предиктора. Кроме того, если у вас есть момент, не могли бы вы объяснить, что делают и какие команды делают? Еще раз спасибо! –

+0

'unique()', применяемый ко всему кадру данных, удаляет любые повторяющиеся строки. Если вы этого не сделали, вы снова и снова будете строить одно и то же, что может быть или не быть проблемой в том, как ваш график заканчивается. Выполните команду 'unique (newdata3)' и посмотрите, что возвращает R. С помощью функции 'which()' я смотрел на каждый из ваших столбцов (ent, corp и smb) и обнаружил, какие строки были равны 1, и я присвоил это имя столбца определенной строке в моем «NewVar». Я отключил ваши переменные индикатора. Запустите 'which (newdata3 $ ent == 1)', чтобы увидеть, что возвращает. Выполните также 'help()' для каждой функции. – Jake

Смежные вопросы