2016-03-29 4 views
3

У меня есть данные, как показано ниже:ggplot гладкая линия GLM модель с заданным вектором весов

numbers <- structure(list(density = c(1L, 4L, 10L, 22L, 55L, 121L, 210L, 
444L), females = c(1L, 3L, 7L, 18L, 22L, 41L, 52L, 79L), males = c(0L, 
1L, 3L, 4L, 33L, 80L, 158L, 365L), maleProp = c(0, 0.25, 0.3, 
0.181818181818182, 0.6, 0.661157024793388, 0.752380952380952, 
0.822072072072072), total = c(1L, 4L, 10L, 22L, 55L, 121L, 210L, 
444L)), .Names = c("density", "females", "males", "maleProp", 
"total"), row.names = c(NA, -8L), class = "data.frame") 

Я хочу, чтобы иметь гладкую линию с glm методом с total как weight. Я попробовал,

ggplot(numbers, aes(density, maleProp)) + geom_point() + 
    stat_smooth(method = "glm", 
       method.args = list(family = "binomial", 
           type = "response", 
           weights = "total")) 

я получил ошибку,

Warning message: 
Computation failed in `stat_smooth()`: 
formal argument "weights" matched by multiple actual arguments 

Как я могу построить плавную линию в этом случае?

+0

I попробовал ваш код, и он сработал. может быть, у вас есть «общий», определенный каким-то другим образом, таким образом запутывающий парсер? –

+1

[Zahiro Mor] (http://stackoverflow.com/users/4700149/zahiro-mor) :: Возможно, это более старая версия ggplot, пожалуйста, обновите свою версию ggplot, вы получите ту же ошибку. – TheRimalaya

ответ

4

Если вы хотите использовать glm с параметрами, изложенными, вы можете создать функцию-оболочку следующим образом:

binomial_smooth <- function(...) { 
    geom_smooth(method = "glm", method.args = list(family = "binomial"), ...) 
} 

Что вы можете использовать непосредственно на ggplot2 объекта:

ggplot(numbers, aes(density, maleProp)) + geom_point() + binomial_smooth(aes(weight = total))