Я хотел бы отобразить сюжет, созданный geom_smooth()
, но для меня важно иметь возможность описать, как этот сюжет был создан.
Я вижу из документации, когда n >= 1000, gam используется в качестве функции сглаживания, но я не вижу, сколько узлов используется или какая функция генерирует сглаживание.
Пример:
library(ggplot2)
set.seed(12345)
n <- 3000
x1 <- seq(0, 4*pi,, n)
x2 <- runif(n)
x3 <- rnorm(n)
lp <- 2*sin(2* x1)+3*x2 + 3*x3
p <- 1/(1+exp(-lp))
y <- ifelse(p > 0.5, 1, 0)
df <- data.frame(x1, x2, x3, y)
# default plot
ggplot(df, aes(x = x1, y = y)) +
geom_smooth()
# specify method='gam'
# linear
ggplot(df, aes(x = x1, y = y)) +
geom_smooth(method = 'gam')
# specify gam and splines
# Shows non-linearity, but different from default
ggplot(df, aes(x = x1, y = y)) +
geom_smooth(method = 'gam',
method.args = list(family = "binomial"),
formula = y ~ splines::ns(x, 7))
Если я хочу использовать параметры по умолчанию, есть ли способ определить функцию, используемую для создания сглаживания, чтобы я мог точно описать ее в разделе методов анализа?
formula = y ~ s(x, bs = "cs")
, поэтомуk
было установлено на любое значение по умолчанию изmgcv::s
. Однако похоже, что в ggplot2_2.2.0 gam по умолчанию используетformula = y ~ x
, поэтому подходит для прямой линии вместо любого вида сплайна. У меня есть сомнения, что это то, что он должен делать; результирующий сюжет теперь такой же, как и при использовании lm. - person aosmith   schedule 29.11.2016ggplot(diamonds, aes(price, carat)) + geom_smooth()
определенно не прямой .. - person Axeman   schedule 29.11.2016method = "gam"
вместо того, чтобы позволить ggplot выбрать игру из-за 1000 баллов. Кажется странным. - person aosmith   schedule 29.11.2016y ~ x
доy ~ s(x, bs = "cs")
, еслиmethod = "gam"
указано явно) правильно; мы сообщаем формулу, но не изменяем ее автоматически. Это зависит от вас. - person Z.Lin   schedule 07.03.2019