chi- square 알고리즘
- 최초 등록일
- 2005.06.18
- 최종 저작일
- 2005.06
- 8페이지/
한컴오피스
- 가격 2,500원
![할인쿠폰받기](/images/v4/document/ico_det_coupon.gif)
소개글
레가 확률과 정론 레폿으로 낸 소스와 discussion
그리고 결과 화면입니다.
컴파일 실행환경
비쥬얼 C
본문내용
이번 프로그램은 컴퓨터 프로그램에 의해 랜덤 변수(random variable)를 발생시켰을때(50,250,500) 그 값이 적합한 값인지를 Chi-square테스트를 해 보는 것이었다. 그리고 이때 발생된 실험을 통해 누적된 분포(empirical cumulative distribution)와 발생된 누적 확률분포함수(cumulative distribution function)의 값을 비교하는 것이었다. 이번 Chi-square테스트를 하기 위해서 우선 exponential random sample을 각각 50개, 250개, 500개를 발생키켰을때, 이때 발생하는 exponential값을 가지고 내가 나누어준 구간(0.2)에 발생한 갯수를 가지고 실험에 임하게 된다. 이 개수는 Chi-square테스트를 하는데 사용되게 되는데 Chi-square계산 수식중 (실제적 측정치 - expect value) 부분에서 이 exponential값은 실제적 측정치(관측값)으로 들어가게 된다. 그리고 Chi-square값을 계산하기 위해서 필요한 값은 expected value(기대값)인데, 수식에서 expected value(Mk) = N*Bk를 이용하여 유도한다. 여기서 N은 컴퓨터 프로그램에 의해 발생된 랜덤 변수값 50,250,500을 의미하고, Bk값은 구간내에서 발생된 값으로서 그 값은 누적확률분포(cdf)의 특성을 이용하여 구한다. 구간에서의 발생하는 확률값은 P[a< X <=b] = Fx[b]-Fx[a]인 cdf의 특성을 이용하여 구하게 되는데, 만약 P[0.2<X<0.4]라고한다면 Fx[0.4]-Fx[0.2]값을 구하게 되고, 이때 Fx[0.4]=1-exp(-Ramda*0.4)이라는 cdf와 exponential의 성질을 이용하게 된다. 이렇게 구해진 Fx[0.4]까지의 분포함수에서 Fx[0.2]를 빼줌으로서 해서 0.2에서 0.4까지의 분포값을 구할 수 있었다. 하지만 이 부분에서 가장 처음(0)일때는 이전까지의 값이 없기 때문에 축적되지 않으므로 값을 할당해 주지 않았으며, 가장 끝(3.8)에서는 exponential의 그래프에서도 볼 수 있듯이 끝으로 갈수로 꼬리가 생기기 때문에 구간 3.8을 넘어서는 것까지도 생각해 주어야 했다. 이렇게 유도 된 expected value은 Chi-square테스트를 위해 사용된다.
#include<stdio.h>
#include<math.h>
#define A 16807.0 // multiplier
#define M 2147483647.0 // modulus
#define Ramda 1
static double r_seed = 1.0; // seed number
double rnd(); // 난수 발생 함수
double expo(double a); // exponential 함수
void main()
{
int i, count, N; // N은 random number
double j,value=0.0,sum=0.0,obser[20]={0,},cnt[1000]={0,}, // 배열선언과 초기화 부분
cdf[20]={0,},ex_cdf[20]={0,},mk[20]={0,},bk[20]={0,},ex[20]={0,},chi[20]={0,};
printf("N (50,250,500) = "); // random number입력받는 부분
scanf("%d",&N);
for (i=0; i<N; i++) {
cnt[i] = expo(Ramda); // 발생된 exponential값을 배열에 집어넣음
count = 0; // 해당 interval에 발생된 값을 카운터 하기 위한 변수
for (j=0;<font color=aaaaff>..</font>
참고 자료
없음