Wykreślenie krzywej regresji wielomianowej w R
Mam prostą regresję wielomianową, którą wykonuję w następujący sposób
attach(mtcars)
fit <- lm(mpg ~ hp + I(hp^2))
Teraz rysuję następująco
> plot(mpg~hp)
> points(hp, fitted(fit), col='red', pch=20)
To daje mi następujące
Chcę połączyć te punkty w gładką krzywą, używając linii daje mi następujące
> lines(hp, fitted(fit), col='red', type='b')
Co mi tu umyka. Chcę, aby wyjście było gładką krzywą, która łączy punkty 3 answers
Try:
lines(sort(hp), fitted(fit)[order(hp)], col='red', type='b')
Ponieważ twoje jednostki statystyczne w zbiorze danych nie są uporządkowane, więc kiedy używasz {[1] }to bałagan.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-28 06:59:40
Lubię do tego używać ggplot2
, ponieważ zwykle dodawanie warstw danych jest bardzo intuicyjne.
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))
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-04-28 07:32:14
Ogólnie dobrym sposobem jest użycie funkcji predict()
. Wybierz kilka wartości x
, Użyj predict()
do wygenerowania odpowiednich wartości y
i wykreśl je. Może to wyglądać mniej więcej tak:
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))
Zobacz odpowiedź Romana dla bardziej fantazyjnej wersji tej metody, gdzie przedziały ufności są również obliczane. W obu przypadkach rzeczywiste wykreślenie rozwiązania jest przypadkowe - możesz użyć grafiki bazowej lub ggplot2
lub cokolwiek innego, co chcesz - kluczem jest wystarczy użyć funkcji predict, aby wygenerować odpowiednie wartości y. jest to dobra metoda, ponieważ rozciąga się na wszelkiego rodzaju dopasowania, nie tylko wielomianowe modele liniowe. Możesz go używać z modelami nieliniowymi, GLMs, splinami wygładzającymi itp. - wszystko metodą {[6] }.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-09 17:47:44