Проблемы со сглаживанием гаммы в ggplot2

Я пытаюсь использовать сглаживание GAM в ggplot2. Согласно этой беседе и этот код, ggplot2 загружает mgcv используется для общих аддитивных моделей, только если n >= 1000. В противном случае пользователь вручную загрузить пакет. Насколько я понимаю, этот пример кода из разговора должен выполнять сглаживание с использованием geom_smooth(method="gam", formula = y ~ s(x, bs = "cs")):

library(ggplot2)
dat.large <- data.frame(x=rnorm(10000), y=rnorm(10000))
ggplot(dat.large, aes(x=x, y=y)) + geom_smooth() 

Но я получаю сообщение об ошибке:

geom_smooth: method="auto" and size of largest group is >=1000, so using gam with formula: y ~ s(x, bs = "cs"). Use 'method = x' to change the smoothing method.
Error in s(x, bs = "cs") : object 'x' not found

Та же ошибка возникает, если я пытаюсь выполнить следующее:

ggplot(dat.large, aes(x=x, y=y)) + geom_point() + geom_smooth(method="gam", formula = y ~ s(x, bs = "cs"))

Но, например, линейная модель будет работать:

ggplot(dat.large, aes(x=x, y=y)) + geom_smooth(method = "lm", formula = y ~ x)

Что я здесь делаю неправильно?

Мои версии R и пакетов должны быть актуальными:

R version 3.0.3 (2014-03-06)
Platform: x86_64-apple-darwin10.8.0 (64-bit)

other attached packages: mgcv_1.7-29  ggplot2_0.9.3.1 

person Mikko    schedule 25.04.2014    source источник
comment
отлично работает для меня. попробуйте переустановить ggplot2 и перезапустить сеанс.   -  person Ben Rollert    schedule 25.04.2014
comment
Кстати, R 3.1.0 был выпущен 10 апреля 2014 г., может быть, попробовать воспроизвести его на чистой установке?   -  person tonytonov    schedule 25.04.2014
comment
@tonytonov Я тоже заметил это после вопроса. Я обновился до R version 3.1.0 (2014-04-10) mgcv_1.7-29 ggplot2_0.9.3.1, но все равно получаю то же сообщение об ошибке. Есть ли другие на OS X Mavericks? Может быть, это проблема конкретной ОС?   -  person Mikko    schedule 25.04.2014
comment
Предположительно да; пробовал и на win и на linux, проблема не воспроизводится.   -  person tonytonov    schedule 25.04.2014


Ответы (2)


Проблема заключалась в том, что у меня была функция summary, назначенная как s в моем .Rprofile. Это запутало аргумент s() в функции gam. Думаю, следует избегать назначения слишком большого количества сокращений. После удаления этого назначения все работает как надо.

Один из способов не путать пакеты с сокращениями .Rprofile — назначить их скрытой среде и присоединить эту среду к .Rprofile. Например (код заимствован из здесь):

.env <- new.env()
.env$s <- base::summary
attach(.env)

Затем s будет работать как summary, пока не загрузится mgcv.

dat.large <- data.frame(x=rnorm(10000), y=rnorm(10000))
s(dat.large)
       x                   y            
 Min.   :-3.823756   Min.   :-4.531882  
 1st Qu.:-0.683730   1st Qu.:-0.687335  
 Median :-0.006945   Median :-0.009993  
 Mean   :-0.010285   Mean   :-0.000491  
 3rd Qu.: 0.665435   3rd Qu.: 0.672098  
 Max.   : 3.694357   Max.   : 3.647825  

И изменило бы значение после загрузки пакета, но не запутало бы функциональность пакета:

ggplot(dat.large, aes(x=x, y=y)) + geom_smooth() # works
s(dat.large)
$term
[1] "dat.large"

$bs.dim
[1] -1

$fixed
[1] FALSE

$dim
[1] 1

$p.order
[1] NA

$by
[1] "NA"

$label
[1] "s(dat.large)"

$xt
NULL

$id
NULL

$sp
NULL

attr(,"class")
[1] "tp.smooth.spec"

EDIT Обходной путь, описанный выше, не работает в моем реальном коде, который намного сложнее. Если вы хотите сохранить это сокращение summary, самый простой обходной путь — просто поместить rm(s) перед загрузкой mgcv.

person Mikko    schedule 25.04.2014
comment
область видимости немного сбивает с толку в ggplot2. - person Ben Rollert; 25.04.2014
comment
@BenRollert Ага. Задания легко запутать в длинных сценариях, а .Rprofile добавляет еще один уровень сложности. Спасибо за комментарии Бен и tonytonov. Они заставили меня подумать, что у меня действительно что-то происходит с моим .Rprofile, поскольку проблема не может быть воспроизведена. - person Mikko; 25.04.2014
comment
Спасибо, что опубликовали ответ. Вы должны принять это. - person ilir; 25.04.2014

Моя проблема была вызвана поврежденной версией mgcv. Переустановка этого пакета решила проблему:

install.packages("mgcv")

Версии:

  • Линукс Минт 18 / 18.1
  • R 3.4.0

У меня была такая же проблема на двух разных машинах с Linux.

person CoderGuy123    schedule 09.07.2017