[R-es] Mann-Whitney con datos temporales

Javier Martínez-López javi.martinez.lopez en gmail.com
Mie Mar 30 01:17:12 CEST 2016


Hola a los dos y muchas gracias! Por lo que sea no había recibido el
correo de José Trujillo. He probado lo que me comentáis y no consigo
que al hacer el suavizado los residuos dejen de estar
autocorrelacionados. Os pego el código abajo con unos datos de
humedad. Usando el wilcox.test para estos datos (pareados o no) hay
diferencias significativas entre sitios/sensores. He seguido este
tutorial: http://a-little-book-of-r-for-time-series.readthedocs.org/en/latest/src/timeseries.html#simple-exponential-smoothing

###

a<-c(89.66, 90.38, 91.21, 92.15, 92.71, 92.52, 91.47, 88.83, 84.83,
79.57, 73.88, 69.16, 66.11, 64.01, 63.91, 65.92, 68.19, 72.48, 78.88,
83.34, 85.31, 86.89, 88.45, 88.89) # medias de humedad horaria sitio a

b<-c(76.09, 76.44, 76.98, 77.52, 77.53, 77.84, 77.87, 77.58, 74.57,
66.75, 58.2, 51.4, 48.58, 47.55, 47.79, 48.86, 51.94, 57.01, 62.77,
68.16, 72.36, 74.78, 75.66, 75.96) # medias de humedad horaria sitio b

library(randtests)

runs.test(a) # P << 0.05 # hay autocorrelación
runs.test(b) # P << 0.05 # hay autocorrelación
runs.test(a-b) # P << 0.05 # hay autocorrelación

acf(a-b) # hay autocorrelación

a_ts<-ts(a)
b_ts<-ts(b)

# Holt’s Exponential Smoothing

a_ts_forecasts <- HoltWinters(a_ts, gamma=FALSE)
plot(a_ts_forecasts)

b_ts_forecasts <- HoltWinters(b_ts, gamma=FALSE)
plot(b_ts_forecasts) # curioso el lag

library(forecast)

a_ts_forecasts2<-forecast.HoltWinters(a_ts_forecasts)
shapiro.test(a_ts_forecasts2$residuals) # son normales
runs.test(a_ts_forecasts2$residuals) # P << 0.05 # hay autocorrelación

b_ts_forecasts2<-forecast.HoltWinters(b_ts_forecasts)
shapiro.test(b_ts_forecasts2$residuals) # son normales
runs.test(b_ts_forecasts2$residuals) # P << 0.05 # hay autocorrelación

# Holt-Winters Exponential Smoothing

alog<-log(a_ts)

alog_ts_forecasts <- HoltWinters(alog, gamma=FALSE)
plot(alog_ts_forecasts) # curioso el lag

alog_ts_forecasts2<-forecast.HoltWinters(alog_ts_forecasts)
shapiro.test(alog_ts_forecasts2$residuals) # son normales
runs.test(alog_ts_forecasts2$residuals) # P << 0.05 # hay autocorrelación

###

También he probado con Simple Exponential Smoothing y con la función
SMA de la librería TTR con los mismos resultados. Si tenéis cualquier
sugerencia será bienvenida.

Gracias! Javier

2016-03-29 14:08 GMT+02:00 Carlos J. Gil Bellosta <cgb en datanalytics.com>:
> Hola, ¿qué tal?
>
> Estoy de acuerdo en todo menos en una cosa: que si las series están
> autocorrelaccionadas (que lo estarán casi seguro), las diferencias también
> lo estarán (necesariamente). Porque la primera cosa que se me ocurre (y no
> me parece descabellada) es que si el efecto de la ubicación es aditivo, es
> decir, si las temperaturas son
>
> temp(t) + a1 + e1(t) para el sitio 1
> temp(t) + a2 + e2(t) para el sitio 2
>
> al tomar las diferencias hora a hora desaparecería el efecto de la serie
> temporal subyacente, independientemente de su estructura y la prueba
> pareada lo sería sobre la diferencia entre a1 y a2. Y la prueba por parejas
> (de horas) tendría sentido.
>
> Se puede comprobar (incluso a ojo; o más bien, primero y fundamentalmente a
> ojo) si las diferencias tienen algún tipo de estructura temporal; en este
> caso, quedaría invalidado todo lo dicho. Por supuesto.
>
> Eso sí, sigue existiendo el problema de si las diferencias se deben a las
> ubicaciones o a los sensores.
>
> Salud,
>
> Carlos J. Gil Bellosta
> http://www.datanalytics.com
>
> El 29 de marzo de 2016, 12:15, José Trujillo Carmona <trujillo en unex.es>
> escribió:
>
>> En mi modesta opinión el problema planteado no es con las réplicas.
>>
>> Efectivamente el problema de las réplicas existe. Al haber un único sensor
>> en cada sitio no podrás saber si las diferencias las crea el sitio o el
>> sensor. Para mí la solución, si fuese factible, sería intercambiar sensores
>> un tiempo.
>>
>> Pero en todo caso el problema planteado creo que es comparar los dos
>> conjuntos de datos, con la salvedad de que las diferencias pueden ser
>> debidas al sitio o al sensor. Este problema topa con el problema principal
>> de la falta de independencia entre observaciones.
>>
>> El test de Mann-Whitney-Wilcoxon, como los tests paramétricos
>> convencionales, incluyen la suposición de que se está trabajando con una
>> muestra obtenida mediante muestreo aleatorio simple, o lo que es lo mismo
>> que los sucesivos valores encontrados son independientes entre sí. De hecho
>> el calculo de la distribución de probabilidad del estadístico de contraste
>> depende fuertemente de esta suposición.
>>
>> La solución que propone Carlos (tomar diferencias en datos apareados) no
>> resuelve para nada el problema: si las series están autocorrelacionadas,
>> las diferencias también lo estarán.
>>
>> En métodos paramétricos la solución es eliminar las componentes de
>> autocorrelación hasta conseguir que la serie sea ruido blanco. Las
>> soluciones no paramétricas suele ir en la misma dirección; aunque no creo
>> que esté indicada la estimación de un modelo ARIMA (paramétrico). Ahora
>> mismo no tengo tiempo de buscar las soluciones concretas, pero yo iría en
>> la siguiente dirección:
>>
>> 1º Comprobar si efectivamente la serie está autocorrelacionada mediante
>> algún test tipo test de Wald-Wolfowitz (ver en el paquete randtests). Si no
>> lo estuviese la utilización directa de Mann-Whitney no tendría ningún
>> problema.
>>
>> 2º Eliminar la autocorrelación mediante procedimientos de suavizado que
>> por no necesitar la estimación de parámetros son "free distribution" como
>> los de Suavizado Exponencial de Brown o los más complejos de Holt o incluso
>> Holt-Winter.
>>
>> Con los residuos de la serie suavizada (o alisada) hasta que las
>> observaciones sean independientes entre sí, utilizar el test de
>> Mann-Whitney.
>>
>> Saludos.
>>
>>
>>
>> El 29/03/16 a las 10:05, Carlos J. Gil Bellosta escribió:
>>
>>> Hola, ¿qué tal?
>>>
>>> En el peor de los casos, tendrías que comparar parejas de temperaturas
>>> (por
>>> hora). Es decir, con paired = T. Aún así, como dices, tendrías el problema
>>> de la correlación entre medidas.
>>>
>>> En este caso, como en casi todos, lo ideal es plantear un modelo similar a
>>>
>>> temp ~ temp(h) + sitio + error
>>>
>>> y ver si el coeficiente de sitio es o no cero. El problema particular de
>>> este ejemplo es que temp(h) (un modelo para la temperatura en función de
>>> la
>>> hora) es una función no lineal. Igual podrías probar con los GAM.
>>>
>>> Un saludo,
>>>
>>> Carlos J. Gil Bellosta
>>> http://www.datanalytics.com
>>>
>>>
>>> El 28 de marzo de 2016, 16:56, Javier Martínez-López <
>>> javi.martinez.lopez en gmail.com> escribió:
>>>
>>> Hola a tod en s,
>>>>
>>>> queremos hacer una comparación entre dos lugares muy alejados entre sí
>>>> en relación a la temperatura de cada sitio usando medias horarias de
>>>> un período determinado. Sólo hay medidas de un sensor en cada sitio y
>>>> queremos saber si las diferencias son significativas o no entre
>>>> sitios/curvas. Hemos usado un test de Mann–Whitney U con la función
>>>> wilcox.test (paired=F) ya que los valores no son normales (n = 24; 24h
>>>> en base a medias minutales). ¿Creéis que es correcto o estaríamos
>>>> incumpliendo alguna asunción del test al ser datos temporales y/o no
>>>> tener réplicas de los sensores?
>>>>
>>>> Muchas gracias y saludos,
>>>>
>>>> Javier
>>>>
>>>> _______________________________________________
>>>> R-help-es mailing list
>>>> R-help-es en r-project.org
>>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>>
>>>         [[alternative HTML version deleted]]
>>>
>>> _______________________________________________
>>> R-help-es mailing list
>>> R-help-es en r-project.org
>>> https://stat.ethz.ch/mailman/listinfo/r-help-es
>>>
>>
>>
>
>         [[alternative HTML version deleted]]
>
> _______________________________________________
> R-help-es mailing list
> R-help-es en r-project.org
> https://stat.ethz.ch/mailman/listinfo/r-help-es



Más información sobre la lista de distribución R-help-es