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 el 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:
Todo muy bien. El gráfico anterior muestra los valores de consumo de energía, que se espera que solo aumenten, por lo que estoy contento con el ajuste que no pasa por esos dos puntos (que posteriormente se marcarán como valores atípicos).
Sin embargo, "simplemente" elimina el último punto y vuelve a responder
df <- df[-nrow(df),]
plot(data=df, y ~ x)
lines(df$x, line(df$x, df$
)$fitted.values)
El resultado es completamente diferente.
Mi necesidad es tener idealmente el mismo resultado en los dos escenarios anteriores. R no parece tener una función lista para usar para la regresión monotónica, además de lo isoreg
cual, sin embargo, es constante por partes.
EDITAR:
Como señaló @Glen_b, la relación de tamaño atípico a muestra es demasiado grande (~ 28%) para la técnica de regresión utilizada anteriormente. Sin embargo, creo que podría haber algo más a considerar. Si agrego los puntos al comienzo 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 recalculo nuevamente como arriba plot(data=df, y ~ x); lines(df$x, line(df$x,df$y)$fitted.values)
obtengo el mismo resultado, con una ración de ~ 22%
fuente
line
. Puede obtener más detalles escribiendo?line
en la consola rnnls
paquete (mínimos cuadrados no negativos). Eso debería ayudarlo con las restricciones de positividad, pero no con los valores atípicos.Respuestas:
Observo que después de eliminar el último punto, solo tiene siete valores, de los cuales dos (¡28.6%!) Son valores atípicos. Muchos métodos robustos no tienen un punto de descomposición tan alto (p. Ej., La regresión de Theil se descompone justo en ese punto para n = 7, aunque en general va al 29.3%), pero si debe tener un desglose tan alto que puede gestionar tantos valores atípicos, debe elegir un enfoque que realmente tenga ese punto de ruptura más alto.n
Hay algunos disponibles en R; la
rlm
función enMASS
(estimación M) debería tratar este caso particular (tiene un alto desglose contra los valores atípicos), pero no tendrá solidez frente a los valores atípicos influyentes .La función
lqs
en el mismo paquete debe tratar con valores atípicos influyentes, o hay varios paquetes buenos para una regresión robusta en CRAN.Puede encontrar la regresión robusta de Fox y Weisberg en R ( pdf ) un recurso útil sobre varios conceptos de regresión robustos.
Todo esto solo se trata de una regresión lineal robusta e ignora la restricción de monotonicidad, pero me imagino que será un problema menor si soluciona el problema de descomposición. Si todavía obtiene una pendiente negativa después de realizar una regresión robusta de alto desglose, pero desea una línea que no disminuya, configuraría la línea para que tenga una pendiente cero, es decir, elija una estimación de ubicación robusta y establezca la línea como constante allí. (Si desea una regresión robusta no lineal pero monotónica, debe mencionarla específicamente).
En respuesta a la edición:
Parece haber interpretado mi ejemplo de la regresión de Theil como un comentario sobre el punto de ruptura de
line
. No era; fue simplemente el primer ejemplo de una línea robusta que se me ocurrió que se descompuso en una proporción menor de contaminación.Como Whuber ya explicó, no podemos decir fácilmente cuál de varias líneas está utilizando
line
. La razón por la queline
se descompone depende de cuál de los varios estimadores robustos posibles que Tukey menciona yline
podría usar.Por ejemplo, si es la línea que va 'divide los datos en tres grupos y para la pendiente use la pendiente de la línea que une las medianas de los dos tercios exteriores' (a veces llamada la línea resistente de tres grupos , o la línea mediana-mediana) ), entonces su punto de ruptura es asintóticamente 1/6, y su comportamiento en muestras pequeñas depende exactamente de cómo se asignan los puntos a los grupos cuando no es múltiplo de 3.n
Tenga en cuenta que no estoy diciendo que es la línea resistente tres grupos que se implementa en
line
- de hecho creo que es no - sino simplemente que lo que han puesto en práctica enline
bien puede tener un punto de ruptura de tal manera que la línea resultante no puede tratar con 2 puntos impares de 8, si están en las posiciones 'correctas'.De hecho, la línea implementada
line
tiene un comportamiento extraño, tan extraño que me pregunto si podría tener un error, si haces esto:Entonces la
line
línea tiene pendiente 1.2:Fuera de mi cabeza, no recuerdo ninguna de las líneas de Tukey que tengan ese comportamiento.
Agregado mucho más tarde: informé este problema a los desarrolladores hace algún tiempo; tomó un par de lanzamientos antes de que se solucione, 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 lo esperaba en todos los casos que he intentado.fuente
lqs
hace el trabajo! Así que acepto tu respuesta :-) muchas gracias. ¡Si todavía pudieras ayudarme a entender el tercer gráfico, sería genial! Saludoslqs
por ahora. Gracias de nuevo