Аргумент span не работает при работе с лёссом в ggplot2?

Мне нужно изменить аргумент диапазона в примере графика, Пример графика

В коде, который я написал, чтобы получить этот график, я не могу заставить диапазон делать что-либо, кроме значения по умолчанию 0,2. У меня есть подозрение, что это как-то связано с правильным подбором лёсса для каждой из групп, но то, что я пробовал, не сработало. Я сделал несколько примеров кода, чтобы продемонстрировать, что аргумент span не влияет на подгонку лесса ниже.

xy <- rbind(data.frame(x=sort(rnorm(n=46, mean=5, sd=2)), y=1:46),data.frame(x=sort(rnorm(n=46, mean=7, sd=3)), y=1:46), data.frame(x=sort(rnorm(n=46, mean=4, sd=7)), y=1:46))


plot.data <- data.frame(group=letters[rep(1:3, each=46)], xy)

ggplot(plot.data, aes(x=x, y=y))+geom_smooth(method=loess, span=0.1, se=T,  col='black') + geom_point(alpha=0.7) + facet_wrap(~group)

person James    schedule 20.12.2016    source источник


Ответы (2)


Span связан с методом geom_smooth(...), вызывающим лёсс, см. это -5fa1578fb09a#:%7E:text=Loess%20wins.&text=Неудивительно%20%20GAM%20подходит%20наше,%20GAM%20или%20другой%20метод" rel="nofollow noreferrer">ссылка для получения полезной вступление.

Для любых данных более 1000 точек данных по умолчанию используется метод = gam, так как это более эффективно для больших наборов данных.

`geom_smooth()` using method = 'gam'

Попробуйте явно указать метод = лесс, а затем установить диапазон.

geom_smooth(method = "loess", span = 0.3)

Примечание. Это экспоненциально увеличивает время визуализации диаграммы.

person spotnag    schedule 26.10.2017
comment
Спасибо спотнаг. Я понимаю, что не отметил это как завершенное раньше. Ваш ответ точен и лаконичен и может помочь другим. Проблема заключалась в том, что я не заметил отсутствия комментариев вокруг method = loess. R не возвращал никаких ошибок или предупреждений, он просто не показывал то, что я хотел, что меня очень смутило. Обычно какой-то красный текст напоминает мне, что я сделал что-то не так. - person James; 27.10.2017
comment
Не беспокойтесь, рад, что вы решили свою проблему. - person spotnag; 15.12.2017

На мой взгляд, это, вероятно, связано не столько с ggplot2, сколько с вашими данными. Наблюдать:

plot.data.a <- plot.data[plot.data$group == 'a', ]
par(mfrow = c(2,2))
for(i in seq(.1, .9, length.out = 4)){
    plot(plot.data.a[,-1], main = paste('Span of', round(i, 2)))
    lines(loess(y ~ x, data = plot.data.a, span = i))
}

введите здесь описание изображения

Кажется, что изменение диапазона практически не влияет визуально на подгонку loess.

Итак, когда вы строили свои графики и меняли span, кажется вероятным, что ggplot2 понял, что вы меняете span, просто совпадения относительно не изменились.

person bouncyball    schedule 20.12.2016
comment
Спасибо за понимание, это помогло мне взглянуть на это под другим углом. Я понимаю, что мои «примеры данных» были немного ерундой, что также не помогло. - person James; 22.12.2016
comment
Я обнаружил, что проблема связана с аргументом method= в файле geom_smooth. Я не поставил лёсс в боковые кавычки. Если вы снова запустите код вверху с помощью method=loess, то аргумент span будет работать, он тонкий для этих данных, но для данных, которые мне нужны, он работает отлично. - person James; 22.12.2016