05wk-1: 마코프체인 (1)

최규빈

2023-03-30

강의영상

youtube: https://youtube.com/playlist?list=PLQqh36zP38-xlV_TS7zhmYyyYNKv8np4W

확률벡터

- 확률변수와 확률벡터

  • 확률변수 X:(Ω,F)(R,R)
  • 확률벡터 X:(Ω,F)(Rd,Rd)

- 기호표현1

  • 확률변수: X(ω)=x
  • 확률벡터: X(ω)=(x1,x2,,xd)

여기에서 (x1,x2,,xd)는 col-vec, row-vec 구분 없이 길이가 d인 vector 라고 생각한다. 언제든 편의에 따라 row-vector 혹은 col-vector로 해석할 수 있다.

- 기호표현2

  • 확률변수 X
  • 확률벡터 X=(X1,X2,,Xd), 여기에서 X1,X2,,Xd는 각각 r.v.

- 기호표현3 (외우세요!!)

  • X(ω)=(X1,X2,,Xd)(ω)=(X1(ω),X2(ω),,Xd(ω))=(x1,x2,,xd)

(예제1) 동전을 2회 던지자!

1. outcomes: HH,HT,TH,TT

2. sample space: Ω={HH,HT,TH,TT}

3. event: ,{HH},{HT},{TH},{TT},{HH,HT},,Ω

4. σ-field: F=2Ω

5. probability measure function: P:Ω[0,1] such that

  • P()=0
  • P(HH)=14
  • P(HT)=14
  • P(TH)=14
  • P(TT)=14
  • P({HH,HT})=12
  • P(Ω)=1

6. random vector: X:ΩR2 such that

  • X(HH)=(1,1)
  • X(HT)=(1,0)
  • X(TH)=(0,1)
  • X(TT)=(0,0)

6의 다른표현들

  • X(ω1)=(X1,X2)(ω1)=(X1(ω1),X2(ω1))=(1,1)
  • X(ω2)=(X1,X2)(ω2)=(X1(ω2),X2(ω2))=(1,0)
  • X(ω3)=(X1,X2)(ω3)=(X1(ω3),X2(ω3))=(0,1)
  • X(ω4)=(X1,X2)(ω4)=(X1(ω4),X2(ω4))=(0,0)

확률벡터의 평균 ()

확률변수의 평균

- 예제1: 동전을 던지는 예제

ω x=X(ω) P(X=x)
ω1 0 12
ω2 1 12

E(X)=x=01xP(X=x)=(0×12+1×12)=12(0+1)

- 예제2: 주사위를 던지는 예제

ω x=X(ω) P(X=x)
ω1 1 16
ω2 2 16
ω3 3 16
ω4 4 16
ω5 5 16
ω6 6 16

E(X)=x=16xP(X=x)=16(1+2+3+4+5+6)=3

확률벡터의 평균

- 예제1: 동전을 2회 던지는 예제

ω x=X(ω) P(X=x)
ω1 [00] 14
ω2 [01] 14
ω1 [10] 14
ω2 [11] 14

E(X)=14([00]+[01]+[10]+[11])=[1212]=[E(X1)E(X2)]

E(X1)=E(X2)인 이유?? iid 이니까~

- 예제2: 동전을 10회 던지는 예제

ω x=X(ω) P(X=x)
ω1 [0,0,,0] 1210
ω2 [0,0,,1] 1210
ω1024 [1,1,,1] 1210

E(X)=[121212]=[E(X1)E(X2)E(X10)]

시간평균, 앙상블평균

motivating example

- 예제1: 동전을 1000번 던지는 예제를 상상하자. 앞면이 나올 확률은 p이며 이 p는 0.5인지 모른다고 가정하자.

import numpy as np 
unknown_probability = np.random.rand()
x = np.random.binomial(n=1,p=unknown_probability,size=1000) # X(ω) for some ω
x
array([1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 0, 0, 1, 0,
       1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0,
       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0,
       1, 1, 1, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
       1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1,
       1, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0,
       1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
       1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1,
       1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1, 0, 0, 1,
       1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1,
       1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1,
       1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 0,
       1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 0, 0,
       1, 1, 0, 1, 0, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1, 0, 1,
       1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1,
       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1,
       1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1,
       1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 0,
       1, 1, 1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 0,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 0, 0, 1, 1, 1, 0,
       0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
       1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1, 0, 1, 0, 0,
       1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1,
       1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1, 1,
       1, 1, 1, 0, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1,
       1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1,
       1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 1, 1, 1, 0,
       0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1,
       1, 1, 1, 0, 1, 1, 1, 0, 1, 1])
  • 이것은 적당한 ω에 맵핑되어있는 하나의 realization 이다.

- 질문: unknown_probability는 얼마일까??

np.mean(x), unknown_probability
(0.796, 0.7863482228867129)

- 비판: 문제 이상하게 푼다?

ω x=X(ω) P(X=x)
ω1 [0,0,,0] 121000
ω2 [0,0,,1] 121000
ω21000 [1,1,,1] 121000

E(X)=[E(X1)E(X2)E(X1000)]

  • E(X1000)=121000(대충 0 혹은 1이 있는 숫자들을 더한것)=p
x[-1] # 이게 하나의 X_{1000} 에 대한 하나의 실현치일 뿐임. 
1

따라서 개념상으로는 아래와 같이 시뮬레이션하여 구하는게 옳음

sample1 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample2 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample3 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample4 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample5 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample6 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
sample7 = np.random.binomial(n=1,p=unknown_probability,size=1000) 
(sample1[-1]+sample2[-1]+sample3[-1]+sample4[-1]+sample5[-1]+sample6[-1]+sample7[-1])/7
0.8571428571428571
unknown_probability
0.7863482228867129

좀 더 많이…

samples = np.stack([np.random.binomial(n=1,p=unknown_probability,size=1000) for i in range(43052)])
samples
array([[1, 1, 1, ..., 1, 0, 1],
       [1, 0, 1, ..., 0, 1, 1],
       [1, 0, 0, ..., 1, 1, 1],
       ...,
       [1, 1, 1, ..., 1, 1, 0],
       [0, 1, 0, ..., 1, 1, 1],
       [1, 0, 1, ..., 1, 1, 1]])
samples.shape
(43052, 1000)
np.mean(samples[:,-1]) # E(X_{1000})을 근사한것
0.7862120226702592

용어정리의 시간

- 확률변수열을 표현할 때 i대신 t로 바꾼다면?

  • X1,X2,X3,,Xi,,Xn X1,X2,X3,Xt,XT
  • E(Xi) E(Xt)
  • 1ni=1nXi 1Tt=1TXt

- 용어: E(Xt)를 앙상블평균 (ensemble average) 이라고 하고, 1Tt=1TXt를 시간평균 (time average) 이라고 한다.

생각의 시간 (1)

- 원래 E(X1000)1Tt=1TXt와 같은 방식으로 근사계산할 수 없긴해. (말도 안되는 소리임..)

- 예제1: 아래와 같은 확률변수열를 고려하자.

  • X1Ber(0.5).
  • Xt=Xt1 for t=2,3,4,,1000.

E(X1000)을 구하여라. E(X1000)1Tt=1TXt와 같은 방식으로 근사할 수 있는가?

(풀이)

E(X1000)=0.5임. 하지만 1Tt=1TXtE(X1000)을 근사할 수 없음.

시뮬1 – calculating time average of one-sample (x1,,x1000)

x1 = np.random.binomial(n=1,p=0.5,size=1).item()
x1
0
one_sample = np.array([x1]*1000)
one_sample
array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
       0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
np.mean(one_sample)
0.0

시뮬2 – approximating ensemble average with 43052 samples

samples = np.array([[np.random.binomial(n=1,p=0.5,size=1).item()] * 1000 for i in range(43052)])
samples 
array([[1, 1, 1, ..., 1, 1, 1],
       [0, 0, 0, ..., 0, 0, 0],
       [1, 1, 1, ..., 1, 1, 1],
       ...,
       [0, 0, 0, ..., 0, 0, 0],
       [0, 0, 0, ..., 0, 0, 0],
       [1, 1, 1, ..., 1, 1, 1]])
np.mean(samples[:,-1])
0.5003251881445694

- 하지만 사실 iid가정이 있다면 앙상블평균을 시간평균으로 추정해도 문제 없어.

- 예제2: 서로 독립인 1000개의 확률변수를 N(0,1)에서 뽑는다고 하자.

  • Xt=ϵti.i.d.N(0,1)

이때는 E(X1000)1Tt=1TXt와 같은 방식으로 근사할 수 있다.

시뮬1 – calculating time average of one-sample (x1,,x1000)

one_sample = np.random.binomial(1,0.5,1000)
np.mean(one_sample)
0.536

시뮬2 – approximating ensemble average with 43052 samples

np.stack([np.random.binomial(1,0.5,1000) for i in range(43052)])[:,-1].mean()
0.4999535445507758

- 결론: 원래 time-average와 ensemble-average는 “전혀” 다른 개념이다. 그런데, 확률변수열이 iid일 경우는 time-average로 ensemble-average를 근사계산 할 수 있다.

- 아래의 그림은 time-average와 ensemble-average의 차이를 파악하기 용이한 예제이다.

그림1: Davidson (1994) 에서 발췌한 그림.

AR(1)

- 예제3: ϵti.i.d.N(0,1) 일 때, 아래와 같은 확률변수 열을 고려하자.

  • X1=ϵ1
  • Xt=78Xt1+ϵt for t=2,3,,T
eps = np.random.randn(1000)
x = np.zeros(1000)
x[0] = eps[0]
for t in range(1,1000):
    x[t] = (7/8)*x[t-1] +eps[t]
import matplotlib.pyplot as plt 
plt.plot(x,'--o',alpha=0.5)

이때 E(XT)1Tt=1TXt와 같은 방식으로 근사할 수 있을까?

(풀이)

우선 독립인지 아닌지 체크해보자.

check: XtXt1은 독립??

plt.plot(x[:-1],x[1:],'o',alpha=0.2)

  • corr이 있음.. 독립아님 ensemble-average를 time-average로 근사할 수 없다??

참고로 독립이라면~

plt.plot(eps,'--o',alpha=0.5)

plt.plot(eps[1:],eps[:-1],'o',alpha=0.2)


시뮬1 – calculating time average of one-sample (x1,,xT)

def gen(T=1000):
    eps = np.random.randn(T)
    x = np.zeros(T)
    x[0] = eps[0]
    for t in range(1,T):
        x[t] = (7/8)*x[t-1] +eps[t]
    return x
one_sample = gen()
np.mean(one_sample)
-0.04427929741501683

시뮬2 – approximating ensemble average with 43052 samples

samples = np.stack([gen() for ω in range(43052)])
np.mean(samples[:,-1])
-0.001607068412044872

근사 되는 것 같은데..?

생각의 시간 (2)

- 확률변수는 값이 랜덤으로 바뀌는 변수느낌이 아니라 X:ΩR 인 잴 수 있는 함수임.

- 확률벡터는 값이 랜덤으로 바뀌는 벡터느낌이 아니라 X:ΩRd 인 잴 수 있는 함수임.

- 동전을 반복하여 던져서 관측한 아래와 같은 확률변수열(=확률벡터)

0,1,0,0,1,1,,1

은 어떠한 ωΩ에 대응하는 하나의 realization X(ω)=x 임. (즉 one-sample임)

- 그런데 확률변수열을 독립으로 얻었다면 이러한 one-sample을 쪼개서 마치 여러개의 샘플을 얻은것처럼 생각할 수 있으며 이때

E(XT)1Tt=1TXt

와 같은 방식으로 근사할 수 있음.

- 사실상 E(X1)=E(X2)==E(XT)1Tt=1TXt 이므로 ( iid) 결국 아직 관측되지 않은 미래시점 T+1의 값에 대해서도

E(XT+1)1Tt=1TXt

라고 주장할 수 있음.

- 이렇게 one-sample을 여러개의 조각으로 쪼개는 기법은 iid에서만 성립할 것 같음. 만약에 iid가정이 없다면 (시뮬2)와 같은 방식으로 여러샘플을 통하여 ensemble-average를 근사시켜야 함. 정리하면 아래와 같음.

  1. one-sample만 관측가능, iid 조건 만족 분석가능
  2. 여러개의 sample 관측가능 , iid 조건 만족 분석가능
  3. one-sample만 관측가능, iid 조건 만족하지 않음 분석불가능??
  4. 여러개의 sample 관측가능 , iid 조건 만족하지 않음 분석가능

- 문제: 그런데 실제로 우리가 다루고 싶은 자료의 형태는 3의 경우가 많다.

- 소망: 그래서 iid가 아니지만 마치 iid인것 처럼 one-sample을 가지고 분석하고 싶다.

앞으로 해야 할 것: 독립인듯 독립아닌 독립같은 확률과정은 없을까?


독립인듯 독립아닌 독립같은 확률과정

fig, ax = plt.subplots(3,3,figsize=(10,10))
ax[0][0].plot(x[:-1],x[1:],'o',alpha=0.1)
ax[0][1].plot(x[:-2],x[2:],'o',alpha=0.1)
ax[0][2].plot(x[:-3],x[3:],'o',alpha=0.1)
ax[1][0].plot(x[:-4],x[4:],'o',alpha=0.1)
ax[1][1].plot(x[:-5],x[5:],'o',alpha=0.1)
ax[1][2].plot(x[:-6],x[6:],'o',alpha=0.1)
ax[2][0].plot(x[:-7],x[7:],'o',alpha=0.1)
ax[2][1].plot(x[:-8],x[8:],'o',alpha=0.1)
ax[2][2].plot(x[:-9],x[9:],'o',alpha=0.1)