정규분포의 합성곱(convolution)을 통해 카이제곱분포를 만들어내는 문제다.
Zv~N(0,1) 의 제곱의 합 sum(Zv^2 ... Zv^2)은 Chisq(v)을 따른다.
convolution 개념이 여기서도 나오는구나...?
그럼 코드 보자. 예제에서는 v=2, n(표본 개수)=10000을 다룬다.
1000은 적으니 10000으로 합시다.
# 내가 직접 짠 방법
n <- 10000
v.1 <- rnorm(n,0,1)
v.2 <- rnorm(n,0,1)
chi <- v.1 ** 2 + v.2 **2
q <- qchisq(ppoints(n),2)
hist(chi,q,cex=0.25)
mean(q); mean(chi);
sd(q);sd(chi);
#책에서 제안한 방법: vector 대신 matrix(2차원) 이용
n <- 10000
nu <- 2 #아 v가 아니라 greek nu였구나.
X <- matrix(rnorm(n*nu),n,nu)^2 #data, n_row, n_col순 입력.
# 잠깐만 **이랑 ^ 둘 다 지원한다고..?
#X[1:5] # X[:5]처럼 앞에 자른 index는 인식하지 않음.
y.1 <- rowSums(X) #방법1: 행 합해서 chisq(2) 만들기
y.2 <- apply(X,MARGIN=1,FUN=sum)
#apply: 대상(X)의 k(=1)번째 축(=행)에 FUNction(여기서는 sum) 적용.
mean(chi); mean(y.1); mean(y.2); mean(q)
sd(chi); sd(y.1); sd(y.2); sd(q); #결과:4개 다 비슷함.
cf. R이 내부적으로 사용하는 자료구조는
- Vector #1차원/동일한 변수형.
- Matrix #2차원/동일한 변수형
- Array #3차원/동일한 변수형
- Dataframe #여러 변수형으로 이루어진 2차원 Matrix.
- List #가장 포괄적인 자료형이래요. 잘은 모름. list()
의 5가지라고 한다. 필요할 일 있으면 나중에 또 알아보자.
근데 하다 보니까 R이 어느정도 손에 익는다. 맨 윗 코드는 책 안 보고 그냥 짰거든. 근데 잘 돌아간다. 조금만 더 하면 더 익숙해질 것 같다.
'공부 : 금융공학, 금융, 통계, 공학, 경제 등' 카테고리의 다른 글
예제 4.10: 합성곱 (0) | 2022.04.21 |
---|---|
예제 4.8 변환법 - 스튜던트 t 분포 (0) | 2022.04.19 |
예제 4.7 [qqplot() 이해가 잘 안 감.] (0) | 2022.04.18 |
예제 4.5 [베타 분포 공부 필요] (0) | 2022.04.17 |
예제 3.8 (0) | 2022.04.16 |