superponer - Ajustar una línea con LOESS en R
superponer graficas en r (3)
Desafortunadamente, los datos ya no están disponibles, pero una forma más fácil de ajustar una línea no paramétrica (Diagrama de dispersión ponderada localmente o simplemente LOESS si lo desea) es usar el siguiente código:
scatter.smooth(y ~ x, span = 2/3, degree = 2)
Tenga en cuenta que puede jugar con los parámetros span
y degree
para obtener una suavidad arbitraria.
Tengo un conjunto de datos con algunos puntos y quiero encajar en una línea. Lo probé con la función de loess
. Lamentablemente obtengo resultados muy extraños. Ver la trama abajo. Espero una línea que pase más por los puntos y sobre toda la trama. ¿Cómo puedo lograr eso?
Cómo reproducirlo:
Descargue el conjunto de datos desde https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1 (solo dos kb) y use este código:
load(url(''https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1''))
lw1 = loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
lines(data$y,lw1$fitted,col="blue",lwd=3)
Cualquier ayuda es muy apreciada. ¡Gracias!
Has trazado valores ajustados contra y
lugar de contra x
. Además, deberá ordenar los valores de x antes de trazar una línea. Prueba esto:
lw1 <- loess(y ~ x,data=data)
plot(y ~ x, data=data,pch=19,cex=0.1)
j <- order(data$x)
lines(data$x[j],lw1$fitted[j],col="red",lwd=3)
Puede ser tarde, pero tienes opciones con ggplot (y dplyr). Primero, si solo quieres trazar una línea de loess sobre los puntos, puedes intentar:
library(ggplot2)
load(url("https://www.dropbox.com/s/ud32tbptyvjsnp4/data.R?dl=1"))
ggplot(data, aes(x, y)) +
geom_point() +
geom_smooth(method = "loess", se = FALSE)
De otra manera, es mediante la función de predict()
usando un ajuste de loess. Por ejemplo, utilicé funciones dplyr para agregar predicciones a una nueva columna llamada "loess"
:
library(dplyr)
data %>%
mutate(loess = predict(loess(y ~ x, data = data))) %>%
ggplot(aes(x, y)) +
geom_point(color = "grey50") +
geom_line(aes(y = loess))
Actualización : Se agregó una línea de código para cargar los datos de ejemplo proporcionados Actualización2 : Corrección en el nombre de la función geom_smoot()
acoording @phi comment