2017-08-03 6 views
2

Gegeben ein Beispiel boxplot dies mag in ggplot2 wiegen:Wie kann ich stat_smooth mit dem Kehrwert der Anzahl der Werte in ggplot2

ggplot(diamonds, aes(carat, price)) + 
    geom_boxplot(aes(group = cut_width(carat, 0.25)), outlier.alpha = 0.1) + 
    stat_smooth(method="lm", formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", aes(group=1), size=1.5) 

ich ein Bild, das wie folgt aussieht: enter image description here

jedoch die Die stat_smooth-Linie wird stark von der Anzahl der Punkte in jeder Karat-Kategorie beeinflusst. Ich würde es vorziehen, jede der Kategorien gleichwertig zu behandeln, was meiner Meinung nach bedeuten würde, jeden Punkt mit einem bestimmten Karatwert zu gewichten, wobei die Zahl der Gesamtzahl der Punkte mit diesem Wert umgekehrt ist. (Also, bei 5 würde der Punkt ein Gewicht von 1 haben, und bei 1 würde der Punkt ein Gewicht von 1/aBigNumber haben.) Ich habe die Gewichtsästhetik für die Handlung ausprobiert, aber sie bricht den Boxplot. Ich habe versucht, die für den reibungslosen wiegen Zugabe, aber ich erhalte eine Fehlermeldung:

Error: ggplot2 doesn't know how to deal with data of class uneval

So, wie ich Funktion glättend gewichten, so dass die Kategorien gleich behandelt werden (dh umgekehrt zu der Anzahl der Punkte in die Kategorie), und immer noch den Boxplot in der Ausgabe?

Antwort

2

Sie so etwas tun könnte ...

library(dplyr) 
diamonds2 <- diamonds %>% mutate(cutcarat=cut_width(carat, 0.25)) %>% 
          group_by(cutcarat) %>% 
          summarise(carat=mean(carat), price=mean(price)) 
ggplot() + 
     geom_boxplot(data=diamonds, 
        aes(x=carat, y=price, group = cut_width(carat, 0.25)), 
        outlier.alpha = 0.1) + 
     geom_smooth(data=diamonds2, 
        aes(x=carat, y=price), method="lm", 
        formula = y ~ poly(x,2), n= 40, se=TRUE, color="red", size=1.5) 

enter image description here

+1

Nur als Erklärung dessen, was hier vor sich geht: Die Glättungsfunktion Matrix ausgestattet, die einen Wertebereich und die durchschnittliche Leistung hat für diesen Wertebereich, der im Wesentlichen eine Kurve ergibt, die an gleich gewichtete Werte angepasst ist, da es nur einen an jedem Punkt im Intervall gibt. – MrSampson

Verwandte Themen