Processing math: 100%

8 votos

Regresión monotónica robusta en R

Tengo la siguiente tabla en R

df <- structure(list(x = structure(c(12458, 12633, 12692, 12830, 13369, 
13455, 13458, 13515), class = "Date"), y = c(6080, 6949, 7076, 
7818, 0, 0, 10765, 11153)), .Names = c("x", "y"), row.names = c("1", 
"2", "3", "4", "5", "6", "8", "9"), class = "data.frame")

> df
           x     y
1 2004-02-10  6080
2 2004-08-03  6949
3 2004-10-01  7076
4 2005-02-16  7818
5 2006-08-09     0
6 2006-11-03     0
8 2006-11-06 10765
9 2007-01-02 11153

Puedo trazar los puntos y un ajuste lineal de Tukey ( line función en R ) a través de

plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$y)$fitted.values)

que produce:

enter image description here

Todo bien. El gráfico anterior muestra los valores de consumo de energía, que se espera que aumenten, así que estoy contento con que el ajuste no pase por esos dos puntos (que posteriormente se marcarán como valores atípicos).

Sin embargo, "sólo" eliminar el último punto y volver a trazar

df <- df[-nrow(df),]
plot(data=df,  y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)

El resultado es completamente diferente.

enter image description here

Mi necesidad es tener idealmente el mismo resultado en ambos escenarios anteriores. R no parece tener una función lista para usar para la regresión monotónica, además de isoreg que, sin embargo, es constante a trozos.

EDITAR:

Como ha señalado @Glen_b, la relación entre los valores atípicos y el tamaño de la muestra es demasiado grande (~28%) para la técnica de regresión utilizada anteriormente. Sin embargo, creo que puede haber algo más a tener en cuenta. Si añado los puntos al principio de la tabla:

df <- rbind(data.frame(x=c(as.Date("2003-10-01"), as.Date("2003-12-01")), y=c(5253,5853)), df)

y volver a calcular como en el caso anterior plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values) Obtengo el mismo resultado, con una proporción de ~22%.

enter image description here

0 votos

¿Podría explicarnos qué quiere decir con "la línea de Tukey"? (Utilizó varios métodos de ajuste de líneas resistentes).

0 votos

@whuber oh, ya veo, lo siento. ¿Es el método implementado en la función R line . Puede obtener más detalles escribiendo ?line en la consola r

0 votos

Gracias, pero me temo que no sirve de nada: la ayuda se limita a remitir al libro EDA de Tukey de 1977, con el que estoy bastante familiarizado y en el que puedo identificar muchos métodos de ajuste de líneas--y el código simplemente invoca un programa C. Tal vez podríamos avanzar si pudieras explicar más claramente lo que estás tratando de lograr. ¿Cómo caracterizarías (en general) la diferencia entre tus dos "escenarios"? ¿Por qué prefiere la primera solución?

10voto

AdamSane Puntos 1825

Observo que después de eliminar el último punto, sólo tiene siete valores, de los cuales dos (¡el 28,6%!) son valores atípicos. Muchos métodos robustos no tienen un punto de ruptura tan alto (por ejemplo, la regresión de Theil se rompe justo en ese punto para n=7, aunque a grandes n llega al 29,3%), pero si hay que tener un desglose tan alto que pueda gestionar tantos valores atípicos, hay que elegir algún enfoque que realmente tenga ese punto de desglose más alto.

Hay algunos disponibles en R; el rlm función en MASS (estimación M) debería ocuparse de esto particular caso (tiene una alta descomposición frente a los y-outliers), pero no tendrá robustez frente a influyente los valores atípicos.

Función lqs en el mismo paquete debería ocuparse de los valores atípicos influyentes, o bien hay una serie de buenos paquetes para la regresión robusta en CRAN.

Puede que encuentres la obra de Fox y Weisberg Regresión robusta en R ( pdf ) un recurso útil sobre varios conceptos de regresión robusta.

Todo esto es sólo tratar con la regresión lineal robusta y está ignorando la restricción de monotonicidad, pero me imagino que será menos de un problema si usted consigue la cuestión de desglose resuelto. Si todavía está obteniendo una pendiente negativa después de realizar una regresión robusta de alto desglose, pero quiere una línea no decreciente, usted establecería la línea para tener una pendiente cero - es decir, elegir una estimación de ubicación robusta y establecer la línea para ser constante allí. (Si quiere una regresión robusta no lineal pero monótona, debería mencionarlo específicamente).


En respuesta a la edición:

Parece que has interpretado mi ejemplo de la regresión de Theil como un comentario sobre el punto de ruptura de line . No fue así; simplemente fue el primer ejemplo de una línea robusta que me llegó y que se rompió con una proporción menor de contaminación.

Como whuber ya explicó, no podemos saber fácilmente cuál de varias líneas está siendo utilizada por line . La razón por la que line se rompe como lo hace depende de cuál de los varios posibles estimadores robustos que menciona Tukey y line puede utilizar.

Por ejemplo, si se trata de la línea que dice "divide los datos en tres grupos y para la pendiente utiliza la pendiente de la línea que une las medianas de los dos tercios exteriores" (a veces llamada línea de resistencia de tres grupos o el línea mediana-mediana ), entonces su punto de ruptura es asintóticamente 1/6, y su comportamiento en muestras pequeñas depende de cómo se asignen exactamente los puntos a los grupos cuando n no es un múltiplo de 3.

Tenga en cuenta que no estoy diciendo que es la línea de resistencia de tres grupos que se aplica en line - de hecho creo que no lo es - sino simplemente que cualquier cosa que hayan implementado en line puede tener un punto de ruptura tal que la línea resultante no pueda hacer frente a 2 puntos Impares de 8, si están en las posiciones "correctas".

De hecho, la línea que se implementa en line tiene un comportamiento extraño - tan impar que me pregunto si podría tener un bug - si haces esto:

 x = y = 1:9 #all points lie on a line with slope 1
 plot(x,y)
 abline(line(x,y),col=2)

Entonces el line La línea tiene una pendiente de 1,2:

enter image description here

De memoria, no recuerdo que ninguna de las líneas de Tukey tenga ese comportamiento.


Añadido mucho más tarde: Informé de este problema a los desarrolladores hace tiempo; tardaron un par de versiones en solucionarlo, pero ahora line (que resultó ser una forma de la línea de tres grupos de Tukey) ya no tiene este error; ahora parece comportarse como se espera en todos los casos que he probado.

0 votos

Hola, gracias por todo esto. Por el momento mi necesidad es lineal regresión monótona. El punto de la descomposición es muy interesante y definitivamente debería haberlo considerado. Sin embargo, ¿puede comentar el tercer gráfico que acabo de añadir? He añadido dos puntos al principio que deberían llevar la proporción al 22%.

0 votos

Por cierto lqs ¡hace el trabajo! Así que acepto tu respuesta :-) muchas gracias. ¡Si todavía puedes ayudarme a entender el tercer gráfico sería genial! Saludos

1 votos

He hecho una edición que espero aclare algo las cosas. Si se me ha escapado algo, hágamelo saber.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X