2017-02-14 15 views
6

के लिए add_predictions मैं tidyverse और modelr संकुल का उपयोग कर डेटा के एक सेट के लिए लॉजिस्टिक रिग्रेशन पूर्वानुमान की गणना करने की कोशिश कर रहा हूं। स्पष्ट रूप से मैं add_predictions में कुछ गलत कर रहा हूं क्योंकि मुझे लॉजिस्टिक फ़ंक्शन की "प्रतिक्रिया" प्राप्त नहीं हो रही है, क्योंकि मैं आंकड़ों में 'पूर्वानुमान' फ़ंक्शन का उपयोग कर रहा हूं। यह सरल होना चाहिए, लेकिन मैं इसे समझ नहीं सकता और कई खोजों को कम किया गया।मॉडल का उपयोग :: glm

library(tidyverse) 
library(modelr) 
options(na.action = na.warn) 
library(ISLR) 

d <- as_tibble(ISLR::Default) 
model <- glm(default ~ balance, data = d, family = binomial) 
grid <- d %>% data_grid(balance) %>% add_predictions(model) 

ggplot(d, aes(x=balance)) + 
    geom_point(aes(y = default)) + 
    geom_line(data = grid, aes(y = pred)) 

उत्तर

3

predict.glm के type"link" पैरामीटर चूक है, जो किसी भी तरह से add_predictions साथ डिफ़ॉल्ट रूप से परिवर्तन नहीं करता है, और न ही प्रदान करते हैं आप के लिए लगभग निश्चित रूप से बदलने के लिए "response" वांछित। (A GitHub issue exists; यदि आप चाहें तो अपने अच्छे reprex को जोड़ें।) उस ने कहा, predict का उपयोग केवल dplyr::mutate के माध्यम से सीधे tidyverse के भीतर करना मुश्किल नहीं है।

इसके अलावा कि ggplot क्रम में लाइन है, जो ठीक है साजिश सांख्यिक को default (एक कारक) मजबूर है ध्यान दें, सिवाय इसके कि "नहीं" और "हाँ" 1 और 2 से बदल दिया जाता है, जबकि संभावनाओं predict द्वारा लौटाए गए 0 और 1 के बीच होगा। स्पष्ट रूप से संख्यात्मक और घटाने के लिए एक साजिश को हल करता है, हालांकि अतिरिक्त scale_y_continuous लेबल को ठीक करने के लिए कॉल की आवश्यकता होती है।

library(tidyverse) 
library(modelr) 

d <- as_tibble(ISLR::Default) 
model <- glm(default ~ balance, data = d, family = binomial) 

grid <- d %>% data_grid(balance) %>% 
    mutate(pred = predict(model, newdata = ., type = 'response')) 

ggplot(d, aes(x = balance)) + 
    geom_point(aes(y = as.numeric(default) - 1)) + 
    geom_line(data = grid, aes(y = pred)) + 
    scale_y_continuous('default', breaks = 0:1, labels = levels(d$default)) 

भी ध्यान रखें कि अगर सभी आप चाहते हैं एक साजिश है, geom_smooth भविष्यवाणियों सीधे आप के लिए गणना कर सकते हैं:

ggplot(d, aes(balance, as.numeric(default) - 1)) + 
    geom_point() + 
    geom_smooth(method = 'glm', method.args = list(family = 'binomial')) + 
    scale_y_continuous('default', breaks = 0:1, labels = levels(d$default)) 

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