2013-06-19 31 views
8

Hier einige Daten und eine grafische Darstellung:geom_smooth auf einer Teilmenge von Daten

set.seed(18) 
data = data.frame(y=c(rep(0:1,3),rnorm(18,mean=0.5,sd=0.1)),colour=rep(1:2,12),x=rep(1:4,each=6)) 

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+geom_point()+ geom_smooth(method='lm',formula=y~x,se=F) 

enter image description here

Wie Sie die lineare Regression zu sehen ist stark von den Werten beeinflussen, wobei x = 1. Kann ich lineare Regressionen erhalten, die für x> = 2 berechnet wurden, aber die Werte für x = 1 anzeigen (y ist entweder 0 oder 1). Der resultierende Graph wäre genau derselbe, mit Ausnahme der linearen Regressionen. Sie würden nicht durch den Einfluss der Werte auf abscisse = 1

Antwort

10

"leiden" Es ist so einfach wie geom_smooth(data=subset(data, x >= 2), ...). Es ist nicht wichtig, ob diese Handlung nur für dich selbst ist, aber realisiere, dass etwas wie dieses für andere irreführend wäre, wenn du nicht erwähnt, wie die Regression durchgeführt wurde. Ich würde empfehlen, die Transparenz der ausgeschlossenen Punkte zu ändern.

ggplot(data,aes(x=x,y=y,colour=factor(colour)))+ 
geom_point(data=subset(data, x >= 2)) + geom_point(data=subset(data, x < 2), alpha=.2) + 
geom_smooth(data=subset(data, x >= 2), method='lm',formula=y~x,se=F) 

enter image description here

+1

Aahh Ich liebe einfache Lösungen! Danke vielmals. Und danke auch für den Rat und Transparenztrick. –

+0

Was kann ich tun, wenn diese Lösung den Fehler "Ästhetik muss entweder die Länge 1 oder die gleichen wie die Daten" in meinem Datensatz aufweist? –

7

Die regelmäßige lm Funktion hat ein weights Argument, das Sie ein Gewicht auf eine bestimmte Beobachtung zuweisen kann. Auf diese Weise können Sie den Einfluss der Beobachtung auf das Ergebnis verdeutlichen. Ich denke, dies ist ein allgemeiner Weg, um mit dem Problem umzugehen, anstatt die Daten zu unterteilen. Die Ad-Hoc-Zuweisung von Gewichten ist natürlich nicht gut für die statistische Stabilität der Analyse. Es ist immer am besten, hinter den Gewichten eine Begründung zu haben, z. Beobachtungen mit geringem Gewicht haben eine höhere Unsicherheit.

Ich denke, unter der Haube ggplot2 verwendet die lm Funktion, so dass Sie in der Lage sein, das weights Argument zu übergeben. Sie können die Gewichte durch die Ästhetik (aes) hinzufügen, unter der Annahme, dass das Gewicht in einem Vektor gespeichert ist:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = weight), method='lm') 

wo die:

ggplot(data,aes(x=x,y=y,colour=factor(colour))) + 
    geom_point()+ stat_smooth(aes(weight = runif(nrow(data))), method='lm') 

Sie auch Gewicht in einer Spalte im Datensatz setzen könnte Spalte heißt weight.

Verwandte Themen