2017-09-15 6 views
0

Ich versuche, einige lineare und polynomische Regressionen mit ggplot zu plotten. Dies ist sehr einfach, wenn die Regressionskoeffizienten innerhalb die geom_smoot Schätzungsfunktion:Plotten Regression von seinen Koeffizienten mit ggplot

ggplot (mtcars, aes(x=wt, y=mpg, fill=factor(cyl), colour=factor(cyl))) + geom_smooth(method='lm', formula = y ~ poly(x,2)) + geom_point() 

aber hier habe ich nur eine Vorhersage darstellen möge (oder mehr, wie im Beispiel oben), basierend auf Vorwissen über die Regression Parameter.

Also hier mit meiner Regressions Schätzungen können durch Druck:

dlply(mtcars,.(cyl), lm, formula=mpg ~ poly(wt,2)) %>% 
llply(summary) %>% 
ldply(coefficients) 

Jetzt möchte ich die Handlung in einer umgekehrten Art und Weise zu bauen, von den Schätzungen für die Handlung. Oder noch besser, um eine Vorhersage von anderen Werten für diese Schätzungen zu erstellen (z. B. Intercept=20, poly(wt,2)1=-15 und poly(wt,2)2=4 für cyl=4), und dann eine Auftragung wie die obige zu erhalten.

Aber hier ist, wo ich nicht weiß, wie man vorgeht. Ich denke, ich brauche eine andere geom_smooth, geom_line oder ähnliches für jede Ebene von cyl, einschließlich in jedem dieser die entsprechenden Werte der Schätzungen, aber kann nicht herausfinden, wie.

Antwort

3

Normalerweise mache ich dies, indem ich einen Datenrahmen von Vorhersagen erzeuge.

mod <- lm(mpg ~ poly(wt,2), mtcars) 
pred <- data.frame(wt = seq(0,6,0.01)) 
pred$mpg <- predict(mod, pred) 
ggplot() + 
    geom_line(data = pred, aes(x=wt, y=mpg)) + 
    geom_point(data = mtcars, aes(x=wt, y=mpg, colour=factor(cyl))) 

Sie können natürlich die Parameter beliebig ändern.

pred$mpg <- 57 - pred$wt * 21 + pred$wt^2 * 3.3 

Alternativ können Sie stat_function verwenden:

ggplot(pred, aes(x=wt)) + 
    stat_function(fun = function(x) 57 - 21*x + 3.3*x^2) + 
    geom_point(data = mtcars, aes(y=mpg, colour=factor(cyl))) 

Ein letzter Punkt: you can't interpret the coefficients of a poly() fit the way you think you would.

+0

Diese Vorhersage ist basierend auf den Regressionsparametern, die durch die "lm" -Funktion geschätzt werden. Wie könnte ich es verwenden, um eine Zeile basierend auf benutzerdefinierten Parametern zu markieren, wie in der Frage gezeigt? – EuGENE

+0

Mit Ihrem Vorschlag könnte ich tatsächlich die Schätzungen manuell ändern (ej: 'mod $ coefficient [3] = 4') und dann' prognose' verwenden. Es gibt keinen direkteren Weg, dies zu erreichen, oder? – EuGENE

+0

Bearbeitete meine Antwort, um eine Lösung zu bieten. –

2

Ich dachte, dies könnte eine gute Übung sein, um das broom Paket zu betrachten. Ich war nicht ganz sicher, welchen Weg Sie gehen wollte, also hier einige Beispiele von dem, was ich gefunden habe:

Plotten Regressionen:

Ich weiß nicht, wie Sie Ihre Polynomfunktion plotten, das ist also ein Übung für Sie, aber hier ist ein Code, eine Polynomregression in einen Datenrahmen zu erhalten:

library(dplyr) 
library(broom) 
library(tidyr) 

mtcars %>% group_by(cyl) %>% do(tidy(lm(mpg ~ poly(wt, 2), data=.))) %>% 
    select(cyl, term, estimate) %>% 
    spread(term, estimate) 
# Source: local data frame [3 x 4] 
# Groups: cyl [3] 
# 
# cyl `(Intercept)` `poly(wt, 2)1` `poly(wt, 2)2` 
# * <dbl>   <dbl>   <dbl>   <dbl> 
# 1  4  26.66364  -10.170962  3.003872 
# 2  6  19.74286  -2.426656  -1.589859 
# 3  8  15.10000  -6.003055  -1.933630 

aber hier ist eine für eine lineare Regression:

fit <- mtcars %>% group_by(cyl) %>% do(tidy(lm(mpg ~ wt, data=.))) %>% 
    select(cyl, term, estimate) %>% 
    spread(term, estimate) 
ggplot(mtcars, aes(x=wt, y=mpg, colour=cyl)) + geom_point() + 
    geom_abline(data=fit, aes(slope=wt, intercept=`(Intercept)`, colour=cyl)) 

enter image description here

Sie können nicht nur die Passform zeichnen, wie Sie x- und y-Werte zu schaffen, brauchen werden, so vielleicht einige vorhergesagten Werte:

wt <- c(2:5) 
mtcars %>% group_by(cyl) %>% do(augment(lm(mpg ~ poly(wt, 2), data=.), newdata=data.frame(wt=wt))) %>% 
    ggplot(aes(x=wt, y=.fitted, group=cyl, colour=cyl)) + geom_line() 

enter image description here

Verwandte Themen