2016-01-29 7 views
9

Я пытаюсь повторить этот простой пример, приведенный в Coursera R регрессионных моделей курса:Как использовать метод лёссового в GGally :: ggpairs используя функцию обертки

require(datasets) 
data(swiss) 
require(GGally) 
require(ggplot2) 
ggpairs(swiss, lower = list(continuous = "smooth", params = c(method = "loess"))) 

Я ожидаю увидеть пар 6x6 сюжет - один диаграммы рассеяния с более легкими и доверительными интервалами лёсса для каждой комбинации из 6 переменных в швейцарских данных.

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

Error in display_param_error() : 'params' is a deprecated argument. Please 'wrap' the function to supply arguments. help("wrap", package = "GGally")

Я просмотрел файлы справки ggpairs() и wrap() и перепробовал множество перестановок функций wrap() и wrap_fn_with_param_arg().

я могу получить эту работу, как и ожидалось:

ggpairs(swiss, lower = list(continuous = wrap("smooth"))) 

Но как только я добавить лёссовую участие, он не делает:

ggpairs(swiss, lower = list(continuous = wrap("smooth"), method = wrap("loess"))) 

Я получаю эту ошибку, когда я попытался строку выше ,

Error in value[3L] : The following ggpair plot functions are readily available: continuous: c('points', 'smooth', 'density', 'cor', 'blank') combo: c('box', 'dot', 'facethist', 'facetdensity', 'denstrip', 'blank') discrete: c('ratio', 'facetbar', 'blank') na: c('na', 'blank')

diag continuous: c('densityDiag', 'barDiag', 'blankDiag') diag discrete: c('barDiag', 'blankDiag') diag na: c('naDiag', 'blankDiag')

You may also provide your own function that follows the api of function(data, mapping, ...){ . . . } and returns a ggplot2 plot object Ex: my_fn <- function(data, mapping, ...){ p <- ggplot(data = data, mapping = mapping) + geom_point(...) p } ggpairs(data, lower = list(continuous = my_fn))

Function provided: loess

Очевидно, что я вхожу в лесс в неправильном месте. Может ли кто-нибудь помочь мне понять, как добавить лессовую часть?

Обратите внимание, что моя проблема отличается от this one, так как я спрашиваю, как реализовать лесс в ggpairs, поскольку аргумент params стал устаревшим.

Большое спасибо.

ответ

17

Один быстрый способ, чтобы написать свою собственную функцию ... один ниже, был отредактирован из одной представленной сообщени ggpairs ошибки в вашем вопросе

library(GGally) 
library(ggplot2)  
data(swiss) 

# Function to return points and geom_smooth 
# allow for the method to be changed 
my_fn <- function(data, mapping, method="loess", ...){ 
     p <- ggplot(data = data, mapping = mapping) + 
     geom_point() + 
     geom_smooth(method=method, ...) 
     p 
    } 

# Default loess curve  
ggpairs(swiss[1:4], lower = list(continuous = my_fn)) 

enter image description here

# Use wrap to add further arguments; change method to lm 
ggpairs(swiss[1:4], lower = list(continuous = wrap(my_fn, method="lm"))) 

enter image description here


Возможно, это g Ives немного больше контроля над аргументами, которые передаются каждому geon_

my_fn <- function(data, mapping, pts=list(), smt=list(), ...){ 
       ggplot(data = data, mapping = mapping, ...) + 
         do.call(geom_point, pts) + 
         do.call(geom_smooth, smt) 
       } 

# Plot 
ggpairs(swiss[1:4], 
     lower = list(continuous = 
         wrap(my_fn, 
          pts=list(size=2, colour="red"), 
          smt=list(method="lm", se=F, size=5, colour="blue")))) 
+2

Это так полезно, спасибо очень много! – meenaparam

7

Может быть, вы принимаете Coursera онлайн курс регрессионные модели и попытаться преобразовать Rmarkdown файл, указанный в процессе в HTML-файл, и прийти через это как я.

Как я попробовал это:

require(datasets); data(swiss); require(GGally); require(ggplot2) 
g = ggpairs(swiss, lower = list(continuous = wrap("smooth", method = "lm"))) 
g 

Также вы можете попробовать использовать method="loess", но результат выглядит немного отличается от приведенного в лекции. method = "lm" может быть лучше, как я вижу.

+0

Спасибо за предложение, но когда я попробую ваш код, я получаю сообщение об ошибке Ошибка: Неизвестные параметры: метод – meenaparam

+1

@meenaparam В моем случае у меня нет ошибок. Некоторый вывод 'R.version': _platform_' x86_64-pc-linux-gnu', _os_ 'linux-gnu', _version.string_' R version 3.3.3 (2017-03-06) '. – Cryptor

+0

Теперь это работает для меня, они должны обновить 'ggally', спасибо! – meenaparam

1

Я подозревал, что вы проходили курс Курсеры. Хотя, я не мог найти репозиторий github, содержащий примеры ggplot.

Вот что я сделал, чтобы заставить его работать:

gp = ggpairs(swiss, lower = list(continuous = "smooth")) 
gp 
+0

Спасибо @ Firefighter1017, но это дает линейную посадку ('lm'), а не лесс гладкую, как я хотел. См. Ответ @ scarain выше, чтобы заставить ваш код работать. – meenaparam