2016-10-19 2 views
0

나는 다음과 같은 알고리즘에 따라 카이 제곱 확률 변수를 생성하기 위해 노력하고있어 :실수는

enter image description here

A (i)는도 독립적 인 표준 정규 확률 변수 witn의 분입니다 홀수는 각각 입니다.

dch = double(1000) 
t = double(1) 
for(i in 1:1000) { 
    for(j in 1:m) { 
    x = runif(1, 0, 1) 
    t = t + x*x 
    } 
    dch[i] = t 
} 

하지만 잘못된 밀도 플롯을 얻고있다 :

내가 쓴 코드는 다음과 같습니다

위키 백과는 다음과 같은 정의를 제공합니다. 실수는 어디에 있습니까? 어떻게 해결할 수 있습니까?

+2

음,'m'을 정의하지 않았습니다. 당신은 정규 무작위 변수가 아닌 균일 무작위 변수를 사용합니다. 그게 내가 바라는 실수 야. – Gregor

+1

또한 PNG 이미지를 제대로 읽을 수는 없지만 2에서 m/2로 이동하는 것처럼 보입니다. 1에서 m으로 이동합니다. 제품의 로그는 로그의 합계로 다시 쓸 수 있습니다. 당신은 합산하고 있지만 어떤 로그도 가지고 있지 않습니다 ... – Gregor

+1

물론 일반 RV의 로그를 취할 수는 없으므로 코드 (균일 무작위 변수)가 정확하고 설명 (표준 정규 확률 변수) 문제가 있습니다. – Gregor

답변

2

Gregor가 의견에서 제안했듯이 알고리즘의 입력을 잘못 해석합니다. 자유도가 m 인 카이 제곱을 얻는 한 가지 방법은 m 독립 표준 제곱 법선을 더하는 것입니다. 그러나 이것이 우리가 알고있는 유일한 분포 관계는 아닙니다. Chi-squared (2)는 평균이 2 인 지수 분포와 같으며 지수는 inverse transform sampling, 즉 반전으로 생성하는 것이 간단합니다. 따라서 원칙적으로 m이 짝수이면 m/2 지수 (2)를 생성하고 합산하려고합니다. m이 홀수 인 경우 동일한 작업을 수행하지만 하나의 표준 표준 제곱을 추가합니다.

그게 바로 간단한 구현으로 지수를 생성하기 위해 m/2 로그 평가를 수행해야한다는 것입니다. superposition 지수를 적용 할 수 있으므로 로그 평가를 하나만하면됩니다. 초월 함수는 계산적으로 비싸기 때문에 알고리즘의 효율성이 향상됩니다.

먼지가 침전 - S, 하지 노멀 's의 (0,1) 통일이다'알고리즘의 두 번째 줄에 z는 표준 정규이지만, a은.

관련 문제