NORMDIST()와 NORMSDIST()함수
Bit/C# / 2012. 2. 3. 16:52
vba로 작성된 코드를 c/c++이나 vb로 바꾸려다보면 제일 먼저 걸리는 문제가 엑셀과 관련된 부분을 바꿔야하는 것이다. 특히 worksheetfunction을 사용하는 경우 더욱 그러하다. 별 고민없이 가져다 사용한 함수를 따로 만들어야 한다. 이럴때 엑셀의 편리함을 절실히 느끼게 되고 심한 경우엔 그냥 vba로 주저앉게 된다. vba로 만든 ADF(Augmented Dickey Fuller test)를 vb로 바꾸려니 통계함수가 걸리는 것이다.
NORMSDIST()함수는 표준 정규 누적 분포 함수의 확률값을 구한다. 이 분포의 평균은 0이고 표준 편차는 1이다. NORMDIST()함수는 지정한 평균과 표준편차에 따라 정규분포값을 구한다. 따라서 NORMSDIST()함수는 NORMDIST()함수의 특별한 경우라고 볼 수 있다. 즉 NORMSDIST(x)=NORMDIST(x,0,1,TRUE)와 같다.
다음은 NORMSDIST()함수의 vb버전이다.
'// The cumulative normal distribution function
Public Function CND(X As Double) As Double
Const PI = 3.14159265358979
Dim L As Double
Dim K As Double
Const a1 = 0.31938153
Const a2 = -0.356563782
Const a3 = 1.781477937
Const a4 = -1.821255978
Const a5 = 1.330274429
L = Abs(X)
K = 1 / (1 + 0.2316419 * L)
CND = 1 - 1 / Sqr(2 * PI) * Exp(-L ^ 2 / 2) _
* (a1 * K + a2 * K ^ 2 + a3 * K ^ 3 + a4 * K ^ 4 + a5 * K ^ 5)
If X < 0 Then
CND = 1 - CND
End If
End Function
NORMSDIST()함수는 표준 정규 누적 분포 함수의 확률값을 구한다. 이 분포의 평균은 0이고 표준 편차는 1이다. NORMDIST()함수는 지정한 평균과 표준편차에 따라 정규분포값을 구한다. 따라서 NORMSDIST()함수는 NORMDIST()함수의 특별한 경우라고 볼 수 있다. 즉 NORMSDIST(x)=NORMDIST(x,0,1,TRUE)와 같다.
다음은 NORMSDIST()함수의 vb버전이다.
'// The cumulative normal distribution function
Public Function CND(X As Double) As Double
Const PI = 3.14159265358979
Dim L As Double
Dim K As Double
Const a1 = 0.31938153
Const a2 = -0.356563782
Const a3 = 1.781477937
Const a4 = -1.821255978
Const a5 = 1.330274429
L = Abs(X)
K = 1 / (1 + 0.2316419 * L)
CND = 1 - 1 / Sqr(2 * PI) * Exp(-L ^ 2 / 2) _
* (a1 * K + a2 * K ^ 2 + a3 * K ^ 3 + a4 * K ^ 4 + a5 * K ^ 5)
If X < 0 Then
CND = 1 - CND
End If
End Function