Tengo un diagrama de dispersión. ¿Cómo puedo agregar una línea de tendencia no lineal?
r
data-visualization
nonlinear-regression
trend
Karina Khusainova
fuente
fuente
Respuestas:
Vamos a crear algunos datos.
A continuación se muestra cómo se puede ajustar una línea de loess o el ajuste de una regresión no lineal.
fuente
Si usa
ggplot2
(el tercer sistema de trazado, en R, después de la base R y la red), esto se convierte en:Puede elegir cómo se suavizan los datos: consulte los
?stat_smooth
detalles y ejemplos.fuente
stat_smooth
tecleando?stat_smooth
como dijo Vincent. :-)Sin saber exactamente lo que está buscando, con el
lattice
paquete puede agregar fácilmente una curva de loesstype="smooth"
; p.ej,Consulte los
help("panel.loess")
argumentos que se pueden pasar a la rutina de ajuste de loess para cambiar, por ejemplo, el grado del polinomio a usar.Actualizar
Para cambiar el color de la curva de loess, puede escribir una pequeña función y pasarla como
panel
parámetro axyplot
:fuente
Su pregunta es un poco vaga, por lo que haré algunas suposiciones sobre cuál es su problema. Sería de gran ayuda si pudiera poner un diagrama de dispersión y describir un poco los datos. Por favor, si estoy haciendo malas suposiciones, ignore mi respuesta.
Primero, es posible que sus datos describan algún proceso que razonablemente cree que no es lineal. Por ejemplo, si está intentando hacer una regresión en la distancia para que un automóvil se detenga con un frenado repentino frente a la velocidad del automóvil, la física nos dice que la energía del vehículo es proporcional al cuadrado de la velocidad, no la velocidad sí mismo. Por lo tanto, es posible que desee probar la regresión polinómica en este caso, y (en R) podría hacer algo así
model <- lm(d ~ poly(v,2),data=dataset)
. Hay mucha documentación sobre cómo obtener varias no linealidades en el modelo de regresión.Por otro lado, si tiene una línea que es "tambaleante" y no sabe por qué es tambaleante, entonces un buen punto de partida probablemente sería una regresión ponderada localmente, o
loess
en R. Esto hace una regresión lineal en un pequeño región, a diferencia de todo el conjunto de datos. Es más fácil imaginar una versión de "k vecino más cercano", donde para calcular el valor de la curva en cualquier punto, encuentre los k puntos más cercanos al punto de interés y promedie. Loess es así, pero usa la regresión en lugar de un promedio directo. Para esto, usemodel <- loess(y ~ x, data=dataset, span=...)
, donde laspan
variable controla el grado de suavizado.Por otro lado (sin manos), ¿estás hablando de tendencias? ¿Es este un problema temporal? Si es así, sea un poco cauteloso con la interpretación excesiva de las líneas de tendencia y la significación estadística. Las tendencias en series temporales pueden aparecer en procesos "autorregresivos", y para estos procesos la aleatoriedad del proceso ocasionalmente puede construir tendencias a partir de ruido aleatorio, y la prueba de significación estadística incorrecta puede decirle que es significativo cuando no lo es.
fuente
Poniendo puntos de muestra de diagrama de dispersión y curva suave en el mismo gráfico:
fuente