J'ai une régression polynomiale simple que je fais comme suit
attach(mtcars)
fit <- lm(mpg ~ hp + I(hp^2))
Maintenant, je trace comme suit
> plot(mpg~hp)
> points(hp, fitted(fit), col='red', pch=20)
Cela me donne ce qui suit
Je veux connecter ces points dans une courbe lisse, l'utilisation de lignes me donne les éléments suivants
> lines(hp, fitted(fit), col='red', type='b')
Qu'est-ce que j'oublie ici. Je veux que la sortie soit une courbe lisse qui relie les points
Essayer:
lines(sort(hp), fitted(fit)[order(hp)], col='red', type='b')
Parce que vos unités statistiques dans l'ensemble de données ne sont pas ordonnées, donc, lorsque vous utilisez lines
, c'est un gâchis.
J'aime utiliser ggplot2
pour cela car il est généralement très intuitif d'ajouter des couches de données.
library(ggplot2)
fit <- lm(mpg ~ hp + I(hp^2), data = mtcars)
prd <- data.frame(hp = seq(from = range(mtcars$hp)[1], to = range(mtcars$hp)[2], length.out = 100))
err <- predict(fit, newdata = prd, se.fit = TRUE)
prd$lci <- err$fit - 1.96 * err$se.fit
prd$fit <- err$fit
prd$uci <- err$fit + 1.96 * err$se.fit
ggplot(prd, aes(x = hp, y = fit)) +
theme_bw() +
geom_line() +
geom_smooth(aes(ymin = lci, ymax = uci), stat = "identity") +
geom_point(data = mtcars, aes(x = hp, y = mpg))
En règle générale, une bonne façon de procéder consiste à utiliser la fonction predict()
. Choisissez des valeurs x
, utilisez predict()
pour générer les valeurs y
correspondantes et tracez-les. Cela peut ressembler à ceci:
newdat = data.frame(hp = seq(min(mtcars$hp), max(mtcars$hp), length.out = 100))
newdat$pred = predict(fit, newdata = newdat)
plot(mpg ~ hp, data = mtcars)
with(newdat, lines(x = hp, y = pred))
Voir la réponse de Roman pour une version plus sophistiquée de cette méthode, où les intervalles de confiance sont également calculés. Dans les deux cas, le tracé réel de la solution est accessoire - vous pouvez utiliser des graphiques de base ou ggplot2
ou tout ce que vous souhaitez - la clé est utilisez simplement la fonction de prédiction pour générer les valeurs y appropriées. C'est une bonne méthode car elle étend à toutes sortes d'ajustements, pas seulement aux modèles linéaires polynomiaux. Vous pouvez l'utiliser avec des modèles non linéaires, des GLM, des splines de lissage, etc. - tout ce qui a une méthode predict
.