繁体   English   中英

ggplot平滑线glm模型与给定的权重向量

[英]ggplot smooth line glm model with given vector of weights

我有以下数据:

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 

在这种情况下,如何绘制平滑线?

如果要使用带有所列参数的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))

作为ggplot2版本2.2.1的更新答案:

ggplot(numbers, aes(x = density, y = maleProp, weight = total)) +
    geom_point() + 
    stat_smooth(method = "glm", 
                method.args = list(family = "binomial"))

请注意,您可以使用weight作为aes()参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM