varias superponer ojiva modificar lineas graficos graficas ggplot ejes barplot r trendline

ojiva - superponer graficas en r ggplot



¿Cómo agrego diferentes líneas de tendencia en R? (2)

Sé cómo agregar una línea de tendencia lineal usando las funciones lm y abline , pero ¿cómo agrego otras líneas de tendencia, como las líneas de tendencia logarítmica, exponencial y de potencia?


Aquí hay uno que preparé anteriormente:

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

Añadir una leyenda descriptiva:

# legend legend("topleft", legend=c("linear","exponential","logarithmic","polynomial"), col=c("blue","green","orange","pink"), lwd=2, )

Resultado:

Una forma genérica y menos extensa de trazar las curvas es simplemente pasar x y la lista de coeficientes a la función de curve , como:

curve(do.call(f,c(list(x),coef(fit))),add=TRUE)


Un enfoque ggplot2 usando stat_smooth , usando los mismos datos que 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'')

También puede ajustar la línea de tendencia exponencial utilizando glm con una función de enlace de registro

glm(y~x, data = DF, family = gaussian(link = ''log''))

Para un poco de diversión, puedes usar theme_excel de los 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'')