2016-09-05 3 views
0

Es ist ein Follow-up question. Wenn ich den unten angegebenen Code ausführe, erhalte ich eine Warnmeldung, die meiner Meinung nach auf keine Facettenanforderung in meinem Code zurückzuführen ist, während der Quellcode, der in der Verknüpfung erwähnt wird, Facetten enthält. Schauen Sie nach und lassen Sie mich wissen, welcher Teil geändert werden muss. Ich freue mich auf!Add p-Wert und R2 ggplot [Follow-up]

Code:

library(dplyr) 
library(ggplot2) 
library(ggpmisc) 

df <- diamonds %>% 
    dplyr::filter(cut%in%c("Fair","Ideal")) %>% 
    dplyr::filter(clarity%in%c("I1" , "SI2" , "SI1" , "VS2" , "VS1", "VVS2")) %>% 
    dplyr::mutate(new_price = ifelse(cut == "Fair", 
            price* 0.5, 
            price * 1.1)) 


p <- ggplot(df, aes(x,y, color=factor(cut))) 
p <- p + stat_smooth(method = "lm", formula = y ~ x-1, size = 1, level=0.95) 
p <- p + geom_point(alpha = 0.3) 
p <- p + stat_poly_eq(aes(label = paste(..rr.label..)), 
         label.x.npc = "right", label.y.npc = 0.15, formula = formula, 
         parse = TRUE, size = 3) + 
      stat_fit_glance(method = 'lm', method.args = list(formula = formula), 
         geom = 'text', aes(label = paste("P-value = ", 
         signif(..p.value.., digits = 4), sep = "")),label.x.npc = 'right', 
         label.y.npc = 0.35, size = 3) 
print(p) 

Warnmeldungen:

1: failed Computation in stat_poly_eq(): Objekt vom Typ 'Schließung' nicht

2 subsettable ist: Berechnung fehlgeschlagen in stat_fit_glance(): Objekt vom Typ 'Verschluss' ist keine Teilmenge

+0

Wenn Sie 'dplyr' bereits mit' library (dplyr) '' geladen haben, müssen Sie 'dplyr ::' (zB 'dplyr :: filter' usw.) nicht voraussetzen, wenn Sie Funktionen von aufrufen 'dplyr'. –

Antwort

3

Kurz ans wer: Sie benötigen

formula <- y ~ x 

hinzuzufügen (oder was auch immer Sie Ihre Formel definieren zu sein), bevor Sie ggplot nennen (d vor der Zeile, die p <- ggplot(...) lautet.


A "closure" is a type of function in R. So die Warnmeldung „Objekt vom Typ‚Schließung‘ist nicht subsettable“ bedeutet, dass das, was Code, den Sie ein Objekt nicht erwartet wurde ausgeführt wurden, die eine Funktion ist.

Wenn wir uns Ihren Code genauer ansehen, sehen wir formula = formula in Ihrem Anruf an stat_poly_eq und stat_fit_glance. Beachten Sie, dass formula eine Funktion in R ist. Wenn Sie kein Objekt formula separat definieren, bedeutet R, dass Sie sich auf die Funktion formula beziehen. stat_poly_eq() und stat_fit_glance() beschweren sich, weil sie erwarten, dass das formulaArgument in der Funktion ein formula -Klassenobjekt ist, keine Funktion.

Allgemeiner sollten Sie Ihre Formeln nicht "Formel" nennen, weil es Verwirrung schafft. Sie könnten z.B. "Modell" stattdessen.

+0

Großartig, danke! Ich bekomme zwei R2 und p-Werte. Warum ist der p-Wert Null? Das ist auch sehr seltsam, ich habe versucht, mit Ziffern zu ändern, funktioniert aber immer noch nicht für die meisten Spalten 'signif (.. p.value .., digits = 4)' – Rocky

+2

Das ist, weil für das Modell, das Sie passen, der p-Wert ist so klein, dass es nahe bei Null ist. Wenn Sie das 'Besen'-Paket installiert haben, tun Sie 'Besen' (lm (y ~ x - 1, df))' und Sie werden sehen, dass es einen P-Wert von Null meldet. –

+0

Wo soll ich 'Besen :: Blick (lm (y ~ x - 1, df))' 'erwähnen? Vor der Zeile, die 'p <- ggplot (..)' liest? – Rocky