2011-12-28 15 views
8

मैं एक निरंतर भविष्यवाणियों और कई स्तरों के साथ एक स्पष्ट भविष्यवाणी के साथ एक लॉजिस्टिक रिग्रेशन मॉडल पर काम कर रहा हूं। मैं ggplot2 का उपयोग करके परिणाम प्रस्तुत करना चाहता हूं और facet_wrap का शोषण करना चाहता हूं ताकि वर्गीकृत भविष्यवाणियों के प्रत्येक स्तर के लिए प्रतिगमन रेखाएं प्रदर्शित हो सकें। ऐसा करने पर मैंने देखा कि stat_smooth द्वारा प्रदान किया गया फिट वक्र केवल एक विशेष पहलू में डेटा को मानता है, न कि संपूर्ण डेटा सेट। यह एक छोटा सा अंतर है, लेकिन साजिश को देखते हुए एक ध्यान देने योग्य व्यक्ति बनाम मूल्य predict.glm से लौटाया गया है।ggplot2: facet_wrap के साथ लॉजिस्टिक परिणामों के लिए stat_smooth 'पूर्ण' या 'सबसेट' glm मॉडल

कोड के बाद ग्राफिक के साथ इस मुद्दे को पुन: प्रयास करने का एक उदाहरण यहां दिया गया है।

library(boot) # needed for inv.logit function 
library(ggplot2) # version 0.8.9 

set.seed(42) 
n <- 100 

df <- data.frame(location = rep(LETTERS[1:4], n), 
       score = sample(45:80, 4*n, replace = TRUE)) 

df$p <- inv.logit(0.075 * df$score + rep(c(-4.5, -5, -6, -2.8), n)) 
df$pass <- sapply(df$p, function(x){rbinom(1, 1, x)}) 

gplot <- ggplot(df, aes(x = score, y = pass)) + 
      geom_point() + 
      facet_wrap(~ location) + 
      stat_smooth(method = 'glm', family = 'binomial') 

# 'full' logistic model 
g <- glm(pass ~ location + score, data = df, family = 'binomial') 
summary(g) 

# new.data for predicting new observations 
new.data <- expand.grid(score = seq(46, 75, length = n), 
         location = LETTERS[1:4]) 

new.data$pred.full <- predict(g, newdata = new.data, type = 'response') 

pred.sub <- NULL 
for(i in LETTERS[1:4]){ 
    pred.sub <- c(pred.sub, 
    predict(update(g, formula = . ~ score, subset = location %in% i), 
      newdata = data.frame(score = seq(46, 75, length = n)), 
      type = 'response')) 
} 

new.data$pred.sub <- pred.sub 

gplot + 
    geom_line(data = new.data, aes(x = score, y = pred.full), color = 'green') + 
    geom_line(data = new.data, aes(x = score, y = pred.sub), color = 'red') 

enter image description here

मैं क्या उल्लेख किया है और संबंधित के बारे में पहलू बी लाल घटता मॉडल से भविष्यवाणी की मानों केवल एक ही स्थान पर विचार कर रहे में देखने के लिए कम रहा है, जबकि हरी घटता पूर्ण का उपयोग कर रहे हैं भविष्यवाणियों डेटा सेट डेटा के सबसेट पर आधारित मॉडल stat_smooth से साजिश से मेल खाते हैं।

मैं ggplot2 के माध्यम से मानक त्रुटि छायांकन, हरे वक्र के साथ साजिश करना चाहता हूं। मुझे यकीन है कि कोड में कहीं भी एक विकल्प है जिसका उपयोग मैं कर सकता हूं, लेकिन मुझे अभी तक यह नहीं मिला है, या शायद ggplot कॉल से हरे वक्र प्राप्त करने के लिए मुझे एक अलग आदेश या कदमों का पालन करना चाहिए। मुझे एक पहलू पर सब कुछ प्लॉट करने और रंग या समूह सौंदर्यशास्त्र का उपयोग करते समय समान समस्याएं मिली हैं।

किसी भी सुझाव की सराहना की जाएगी।

उत्तर

8

आप सही हैं कि ऐसा करने का तरीका ggplot2 के बाहर मॉडल को फिट करना है और उसके बाद फिट मानों और अंतराल की गणना करें कि आप कैसे डेटा को अलग से पास करते हैं और पास करते हैं। प्राप्त करने के लिए

एक तरीका यह है कि तुम क्या कुछ इस तरह होगा वर्णन:

preds <- predict(g, newdata = new.data, type = 'response',se = TRUE) 
new.data$pred.full <- preds$fit 

new.data$ymin <- new.data$pred.full - 2*preds$se.fit 
new.data$ymax <- new.data$pred.full + 2*preds$se.fit 

ggplot(df,aes(x = score, y = pass)) + 
    facet_wrap(~location) + 
    geom_point() + 
    geom_ribbon(data = new.data,aes(y = pred.full, ymin = ymin, ymax = ymax),alpha = 0.25) + 
    geom_line(data = new.data,aes(y = pred.full),colour = "blue") 

enter image description here

यह फिट मूल्यों पर अंतराल के बारे में सामान्य चेतावनी के साथ आता है: यह सुनिश्चित करने के लिए आप पर निर्भर है कि अंतराल आप साजिश कर रहे हैं जो आप वास्तव में चाहते हैं। "भविष्यवाणी अंतराल" के बारे में बहुत भ्रम हो जाता है।

संबंधित मुद्दे