Written by Pilwon Hur (2011/12/20)
연구를 하다 보면 가끔식 존재하지 않는 실험데이터를 만들어야 할 때가 있다. 예를 들어 손의 Index finger 에 DIP, PIP, MCP Joint Moment 를 예측하는 2개의 모델이 있다고 가정하자. 이 2개의 모델이 적합한지를 알기 위해서, 그리고 어떤 모델이 더 정확한지를 알기위해서 실험을 하기 전에 먼저 Simulation 을 통해서 결과를 미리 예측할 수 있다.
그런데, 시뮬레이션을 하기 위해서는 어떠한 distribution 을 가지는 Hand Length data 가 필요하다. (마치 subject 를 recruitment 하는 것 처럼). 그럼 이 어떤 distribution 을 가지는 Hand Length data 는 어떻게 구할까? Literature 에 보면 이미 Hand Length 의 mean 과 standard deviation 은 알려져 있다. 그렇다면 mean 과 standard deviation 을 가지고 아래와 같이 normal distribution 의 curve 를 만들 수 있을 것이다.
그런데, 이 normal distribution curve 를 가지고 실제의 Hand Length data 의 sample 은 어떻게 만들어 낼까? 의외로 간단하다. CDF (Cumulative Distribution Function) 를 사용하는 것이다. CDF 를 사용하는 이유는 CDF 가 one-to-one 이기 때문에 Inverse function 이 존재하기 때문이다.
CDF 의 inverse function 을 구했다면, 원하는 distribution 을 가지는 data sample 을 얻어내는 것은 아주 쉽다. Uniform distribution 을 갖는 random sample 을 사용하면 된다.
Normal distribution 뿐 아니라 어떠한 distribution 도 사용할 수 있다.
아래는 실제로 Matlab 을 사용한 결과이다. Matlab 의 "norminv" 함수는 Normal distribution 의 CDF 의 Inverse function 의 값을 return 하는 함수이다.
x=rand(1000,1); % 1000 개의 Uniform distribution sample
y=norminv(x,7.41,0.36); % Inverse CDF 를 사용한 Normal distribution 을 갖는 sample data
figure(1);
hist(x,50) % Uniform distribution 의 Histogram (확인용)
figure(2);
hist(y,50) % 위의 방법으로 얻어낸 Normal distribution 의 Histogram (확인용)
참 쉽죠잉? ㅋㅋ