我的数据如下:
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 :(得分:5)
如果您想使用您列出的参数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))
答案 1 :(得分:1)
作为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()
参数。