caso ergódico Proceso estocástico: media, varianza

Preview:

Citation preview

Proceso estocástico: media, varianza, correlación temporal en uncaso ergódico© 2019 Antonio Sala Piqueras, Universitat Politècnica de València. Todos los derechos reservados.

Este código ejecutó sin errores en Matlab R2018b.

Table of Contents

Generación de datos............................................................................................................................................... 1Análisis de los datos............................................................................................................................................... 2

Media, varianza y desviación típica.................................................................................................................... 2Covarianza entre distintos instantes....................................................................................................................4

Ergodicidad.............................................................................................................................................................. 6Funciones auxiliares.............................................................................................................................................. 12

Generación de datosMuestrasExperimento=500;datos=formulasecreta(MuestrasExperimento);plot(datos), grid on, title('Una realización'), xlabel('tiempo'), ylabel('Volt')

NExperimentos=2000;MuchosDatos=zeros(NExperimentos,MuestrasExperimento);for i=1:NExperimentos

1

MuchosDatos(i,:)=formulasecreta(MuestrasExperimento);endplot(MuchosDatos'), grid on, title('2000 realizaciones'), xlabel('tiempo'), ylabel('Volt')

Análisis de los datos

Media, varianza y desviación típica

Media=mean(MuchosDatos);plot(Media), grid on, title('MEDIA'), xlabel('tiempo'), ylabel('Volt')

2

Varianza=var(MuchosDatos);DsvT=sqrt(Varianza);plot(DsvT), grid on, title('Desv. Típica'), xlabel('tiempo'), ylabel('Volt')

3

Covarianza entre distintos instantes

MatrizVCCompleta=cov(MuchosDatos);plot(MatrizVCCompleta(350,:)), grid on, xlabel('tiempo'), title('Covarianza entre x(350) y resto.'), ylabel('Volt^2')

4

TT=[5 10 30 60 100 150 200 275 350 425];plot(MatrizVCCompleta(TT,:)'), grid on, xlabel('tiempo'), ylabel('Volt^2')

5

ErgodicidadEste proceso lineal, con ruido de Distrib. Normal es ergódico, y podremos calcular varianzas, covarianzas, etc.

con una serie muy larga del mismo...

Importante: el código de arriba es formalmente la forma más correcta de hacerlo (vale para no estacionario,

no ergódico)... pero repetir un experimento suele salir más caro que prolongarlo... suponiendo ergodicidad y

estacionariedad, un experimento largo suele ser "tecnológicamente" más aconsejable... pero si el tiempo

de correlación es muy grande el experimento ha de ser "demasiado" largo, con lo cual tampoco está claro...

MuestrasExperimentoE=20300;datos=formulasecreta(MuestrasExperimentoE);plot(datos), grid on, title('Una realización muuuuy larga'), xlabel('tiempo'), ylabel('Volt'), axis tight

datosestacionario=datos(301:end);plot(datosestacionario), grid on, title('Fragmento estacionario'), xlabel('tiempo'), ylabel('Volt')

6

Veamos un "trocito" ampliado:

plot(2000:2150,datosestacionario(2000:2150)), grid on,axis([2000 2150 -4 4])

7

LL=length(datosestacionario)

LL = 20000

mediaest=mean(datosestacionario)

mediaest = -0.0126

varianzaestacionario=var(datosestacionario)

varianzaestacionario = 1.1486

datosestacionario=datosestacionario-mediaest;

Calculemos la autocovarianza a partir de un único experimento

horizontemax=500;ticautocovars=zeros(1,horizontemax);for distanciatemporal=0:horizontemax temp=0; for tiempo=1:(LL-distanciatemporal) temp=temp+datosestacionario(tiempo)*datosestacionario(tiempo+distanciatemporal); end autocovars(distanciatemporal+1)=temp/(LL-distanciatemporal-1);%divido entre Nmuestras-1, arrays empiezan en 1.endtoc

Elapsed time is 15.546898 seconds.

8

plot(0:horizontemax,autocovars), hold on, plot(-horizontemax:0,fliplr(autocovars)), grid on, hold off

tic[CC,lags]=xcov(datosestacionario,horizontemax,'unbiased');toc

Elapsed time is 0.006458 seconds.

plot(lags,CC), grid on

9

CCcorr=CC/CC(horizontemax+1); % el del centroplot(lags,CCcorr), grid on %es lo mismo escalado, ahora correlación

10

¿Es el número de muestras suficiente? ¿Intervalos de confianza estadístico?

En general, cuanto más dure la correlación entre diferentes instantes, más largo ha de ser el experimento:

las muestras sólo son "independientes" cuando ha pasado suficiente tiempo... Es este ejemplo, approx 150

muestras... si la correlación es alta, las muestras no aportan nueva información, pero si la correlación es baja,

las nuevas muestras son "casi" independientes...

Grosso modo, el número de muestras "efectivo" es el número total dividido entre la integral de la correlación.

Eso es "exacto" para determinada fórmula de la media cuando se promedian más muestras que el intervalor

con correlación significativamente diferente de cero.

plot(cumsum(CCcorr)), grid on

11

tau=max(cumsum(CCcorr))

tau = 131.6892

Nefectivo=MuestrasExperimentoE/tau

Nefectivo = 154.1508

Funciones auxiliaresfunction D=formulasecreta(MuestrasExp) x=10+0.1*randn(); x2=10; D=zeros(1,MuestrasExp); for i=1:MuestrasExp D(i)=x; %x=0.978*x+0.022*randn()*11;%1st order... x=0.9*x+0.1*x2; x2=0.978*x2+0.022*randn()*11;%2nd order... endend

12

Recommended