Wiem, jak dodać liniową linię trendu, korzystając z funkcji lm
i abline
, ale w jaki sposób dodać inne linie trendu, takie jak linie trendów logarytmicznych, wykładniczych i mocy?Jak dodać różne linie trendów w R?
17
A
Odpowiedz
38
Oto jeden przygotowałem wcześniej:
# set the margins
tmpmar <- par("mar")
tmpmar[3] <- 0.5
par(mar=tmpmar)
# get underlying plot
x <- 1:10
y <- jitter(x^2)
plot(x, y, pch=20)
# basic straight line of fit
fit <- glm(y~x)
co <- coef(fit)
abline(fit, col="blue", lwd=2)
# exponential
f <- function(x,a,b) {a * exp(b * x)}
fit <- nls(y ~ f(x,a,b), start = c(a=1, b=1))
co <- coef(fit)
curve(f(x, a=co[1], b=co[2]), add = TRUE, col="green", lwd=2)
# logarithmic
f <- function(x,a,b) {a * log(x) + b}
fit <- nls(y ~ f(x,a,b), start = c(a=1, b=1))
co <- coef(fit)
curve(f(x, a=co[1], b=co[2]), add = TRUE, col="orange", lwd=2)
# polynomial
f <- function(x,a,b,d) {(a*x^2) + (b*x) + d}
fit <- nls(y ~ f(x,a,b,d), start = c(a=1, b=1, d=1))
co <- coef(fit)
curve(f(x, a=co[1], b=co[2], d=co[3]), add = TRUE, col="pink", lwd=2)
Dodaj legendę opisowego:
# legend
legend("topleft",
legend=c("linear","exponential","logarithmic","polynomial"),
col=c("blue","green","orange","pink"),
lwd=2,
)
Wynik:
ogólnym i mniej długo ręka sposób kreślenia krzywe mają po prostu przejść x
i th Lista e współczynników do funkcji curve
, takich jak:
curve(do.call(f,c(list(x),coef(fit))),add=TRUE)
17
ggplot2
podejście z wykorzystaniem stat_smooth
, stosując te same dane jak thelatemail
DF <- data.frame(x, y)
ggplot(DF, aes(x = x, y = y)) + geom_point() +
stat_smooth(method = 'lm', aes(colour = 'linear'), se = FALSE) +
stat_smooth(method = 'lm', formula = y ~ poly(x,2), aes(colour = 'polynomial'), se= FALSE) +
stat_smooth(method = 'nls', formula = y ~ a * log(x) +b, aes(colour = 'logarithmic'), se = FALSE, start = list(a=1,b=1)) +
stat_smooth(method = 'nls', formula = y ~ a*exp(b *x), aes(colour = 'Exponential'), se = FALSE, start = list(a=1,b=1)) +
theme_bw() +
scale_colour_brewer(name = 'Trendline', palette = 'Set2')
Można też dopasować wykładniczy linię trendu jak przy użyciu glm
z funkcją łącza dziennika
glm(y~x, data = DF, family = gaussian(link = 'log'))
Dla nieco zabawy, można użyć theme_excel
z ggthemes
library(ggthemes)
ggplot(DF, aes(x = x, y = y)) + geom_point() +
stat_smooth(method = 'lm', aes(colour = 'linear'), se = FALSE) +
stat_smooth(method = 'lm', formula = y ~ poly(x,2), aes(colour = 'polynomial'), se= FALSE) +
stat_smooth(method = 'nls', formula = y ~ a * log(x) +b, aes(colour = 'logarithmic'), se = FALSE, start = list(a=1,b=1)) +
stat_smooth(method = 'nls', formula = y ~ a*exp(b *x), aes(colour = 'Exponential'), se = FALSE, start = list(a=1,b=1)) +
theme_excel() +
scale_colour_excel(name = 'Trendline', palette = 'Set2')
Powiązane problemy
- 1. Jak dodać różne linie dla aspektów
- 2. NSMutableAttributedString dodaj różne linie trasowania
- 3. matplotlib.pyplot Jak nazwać różne linie na tym samym wykresie?
- 4. Jak dodać linie do końca pliku - linux
- 5. Ograniczenie limitu Trendów Google
- 6. Korzystanie z codziennych trendów Twitter4j?
- 7. poligraficzne nowe linie z print() w R
- 8. Alternatywa API do trendów Google
- 9. Jak dodać dokumentację do data.frame w R?
- 10. Dodać datę w php daje różne wyniki
- 11. Dodawanie częściowe linie poziome z ggplot2 w R
- 12. jak dodać linie do istniejącego pliku za pomocą python
- 13. Jak dodać nowe linie do etykiet na wykresach D3?
- 14. d3.js Jak dodać linie do wykresu słupkowego
- 15. "sed": Jak dodać nową linię po dopasowaniu ciągu + 2 linie
- 16. Zapobiec Visual Studio dodać linie przerwy w sprawozdaniach switch-case
- 17. Jak dodać RMSE, nachylenie, przechwycenie, r^2 do R działki?
- 18. Administrator Django różne linie wprowadzania zmian i dodawanie widoku
- 19. Jak dodać interaktywną wizualizację do R markdown
- 20. Dołącz linie i punkty na wykresie legendy kraty w R
- 21. Czy linie odczytu mogą być wykonywane równolegle w ramach R
- 22. Konwersja początek i koniec Współrzędne na linie Przestrzennych w R
- 23. Jak wyrównać linie w Crystal Reports?
- 24. zacisk Rstudio R dają różne wyjścia
- 25. Jak dodać kolumnę w ramce danych w R
- 26. Różne wartości zwracane przez ulimit -r
- 27. R pomoc pliki na różne OS
- 28. Dłuższe linie w legendzie()
- 29. Jak dodać różne języki programowania do Eclipse (C++, C#, Java)
- 30. Decydowanie i implementacja algorytmu wyznaczania trendów w Django
Jest to bardzo przydatne. Jak mogę użyć tej odpowiedzi na osi X daty? – pomarc