2016-01-29 15 views
9

Próbuję replikować tego prostego przykładu podanego w modele regresji oczywiście Coursera R:Jak stosować metodę lessowej w GGally :: ggpairs użyciem funkcji zawijania

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

Spodziewam się, aby zobaczyć pary 6x6 działki - jedną Scatterplot z mniejszą gładkością i przedziałami ufności dla każdej kombinacji 6 zmiennych w danych szwajcarskich.

Jednak pojawia się następujący błąd:

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

Spojrzałem w plikach pomocy ggpairs() i wrap() i próbowałem wiele permutacji funkcji wrap() i wrap_fn_with_param_arg().

mogę uzyskać to do pracy zgodnie z oczekiwaniami:

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

Ale gdy dodaję część lessowej w, to nie:

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

otrzymuję ten błąd, gdy próbowałem linię wyżej .

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

Oczywiście wchodzę do lessu w niewłaściwym miejscu. Czy ktoś może mi pomóc zrozumieć, jak dodać część less?

Zauważ, że mój problem jest inny niż this one, ponieważ pytam, jak zaimplementować less w ggpairs, ponieważ argument params stał się przestarzały.

Dziękuję bardzo.

Odpowiedz

17

Jednym szybkim sposobem jest napisać własną funkcję ... jeden poniżej został stworzony z jednej dostarczonych przez komunikat ggpairs błędu w swoim pytaniu

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


To może Ives nieco większą kontrolę nad argumentami, które są przekazywane do każdej 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

To bardzo pomocne, dzięki bardzo! – meenaparam

7

Może biorą Coursera kurs online modele regresji i spróbować przekonwertować plik Rmarkdown podane przez kurs html plik i natknąć się ten błąd jak ja.

Sposób starałem się to:

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

Ponadto można spróbować użyć method="loess", ale wynik wygląda nieco inaczej niż podany na wykładzie. method = "lm" może być lepiej dopasowany, jak widzę.

+0

Dzięki za sugestię, ale kiedy próbuję Twojego kodu, pojawia się błąd Błąd: Nieznane parametry: metoda – meenaparam

+1

@meenaparam W moim przypadku nie mam błędów. Niektóre wyjścia 'R.version': _platform_' x86_64-pc-linux-gnu', _os_ 'linux-gnu', _version.string_' R wersja 3.3.3 (2017-03-06) '. – Cryptor

+0

To działa teraz dla mnie, musieli zaktualizować 'ggally', dzięki! – meenaparam

1

Podejrzewałem również, że bierzesz lekcję Coursery. Chociaż nie mogłem znaleźć żadnego repozytorium github zawierającego przykłady ggplota.

Oto co zrobiłem, aby to działało:

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

Dzięki @ Firefighter1017, ale to daje liniowe dopasowanie ('lm'), a nie less loess jak chciał. Zobacz odpowiedź @ scarain powyżej, aby kod działał. – meenaparam

Powiązane problemy