2017-12-05 6 views
0

Mein Ziel ist es, ein Diagramm zu erstellen, das die Unterschiede zwischen Regressionsgeraden mit kontinuierlichen vs kategorialen Variablen zeigt. Ich benutze ist der "SleepStudy" -Datensatz von Lock5Data, und ich möchte die Regressionslinien zeigen Vorhersage GPA von ClassYear als entweder kontinuierlich oder kategorisch. Der Code ist unten:r: Leeres Diagramm beim Zeichnen mehrerer Linien im Streudiagramm

library(Lock5Data) 
data("SleepStudy") 
fit2 <- lm(GPA ~ factor(ClassYear), data = SleepStudy) 
fit2_line <- aggregate(fit2$fitted.values ~ SleepStudy$ClassYear, FUN = mean) 
colnames(fit2_line) <- c('ClassYear','GPA') 

options(repr.plot.width=5, repr.plot.height=5) 
library(ggplot2) 
ggplot() + 
    geom_line(data=fit2_line, aes(x=ClassYear, y=GPA)) + # Fit line, ClassYear factor 
    geom_smooth(data=SleepStudy, method='lm', formula=GPA~ClassYear) + # Fit line, ClassYear continuous 
    geom_point(data=SleepStudy, aes(x=ClassYear, y=GPA)) # Data points as dots 

Was die leere Grafik produziert? Was fehlt mir hier?

Antwort

1

Sie müssen die Daten definieren, die Sie für die geom_smooth in der ggplot() verwenden. Dieser Code funktioniert:

ggplot(data=SleepStudy, aes(y = GPA,x = ClassYear)) + 
    geom_smooth(data=SleepStudy, method='lm', formula=y~x)+ 
    geom_line(data=fit2_line, aes(x=ClassYear, y=GPA)) + 
    geom_point(data=SleepStudy, aes(x=ClassYear, y=GPA)) 
+0

Vielen Dank! Ich bin überrascht, dass man nicht einfach die Daten für jedes Plot-Objekt definieren kann, solange die Achsen kartiert werden können. –

+0

@ThomasMatthew ist es möglich mit anderen Arten von Plot, wie Sie in 'geom_point' machen, aber' geom_smooth' ist nicht so flexibel –

Verwandte Themen