Upload
others
View
14
Download
0
Embed Size (px)
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