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:
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.
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%.
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 r0 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?
0 votos
@whuber seguro. También he añadido algo a la pregunta. En esencia, necesito detectar un punto fuera de la tendencia... Muy vago lo sé. Son valores de consumo de energía. Sólo debería aumentar. Por eso digo que el primer ajuste es el "correcto". En el segundo (a mis ojos) todavía hay 5 puntos "buenos" frente a dos valores incorrectos. ¿Algo mejor? :-)
1 votos
(+1) "Sólo debería aumentar" es la clave: estás preguntando sobre cómo actuar (robusto) regresión monótona. Ayudaría enfatizar más ese punto en tu pregunta: obtendrás mejores respuestas.
1 votos
@Michele Tal vez podrías echar un vistazo a la
nnls
(mínimos cuadrados no negativos). Eso debería ayudarte con las restricciones de positividad, pero no con los valores atípicos.