Как использовать метод loess в GGally :: ggpairs с помощью функции wrap

Я пытаюсь повторить этот простой пример, приведенный в курсе "Модели регрессии Coursera R":

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

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

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

Ошибка в display_param_error(): "params" является устаревшим аргументом. Пожалуйста, "оберните" функцию для предоставления аргументов. помощь ("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")))

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

Ошибка в значении [3L]: Следующие функции графика ggpair легко доступны: непрерывный: c ('точки', 'сглаживание', 'плотность', 'cor', 'blank') комбинированный: c ('коробка', 'точка ',' facethist ',' facetdensity ',' denstrip ',' blank ') дискретный: c (' ratio ',' facetbar ',' blank ') na: c (' na ',' blank ')

diag непрерывный: c ('densityDiag', 'barDiag', 'blankDiag') diag дискретный: c ('barDiag', 'blankDiag') diag na: c ('naDiag', 'blankDiag')

Вы также можете предоставить свою собственную функцию, соответствующую API функции (data, mapping,...) {. , , } и возвращает объект графика ggplot2 Пример: my_fn <- function (data, mapping,...) {p <- ggplot (data = data, mapping = mapping) + geom_point (...) p} ggpairs (data, lower = список (непрерывный = my_fn))

Предоставленная функция: лесс

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

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

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

Ответ 1

Одним быстрым способом является создание собственной функции... тот, который был приведен ниже, был отредактирован из сообщения, предоставленного сообщением 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))

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

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

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


Это, возможно, дает немного больше контроля над аргументами, которые передаются каждому 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

Возможно, вы проводите регрессионные модели курса 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" может быть лучше, как я вижу.

Ответ 3

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

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

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