web-dev-qa-db-fra.com

Tracer la courbe de régression polynomiale dans R

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

Plot of mpg versus hp

Fitted Values

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')

Line plot

Qu'est-ce que j'oublie ici. Je veux que la sortie soit une courbe lisse qui relie les points

24
psteelk

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.

24
Davide Passaretti

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))

enter image description here

21
Roman Luštrik

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))

enter image description here

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.

11
Gregor