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%
line
. Puede obtener más detalles escribiendo ?line
en la consola r
nnls
paquete (mínimos cuadrados no negativos). Eso debería ayudarlo con las restricciones de positividad, pero no con los valores atípicos.