標準常態分佈-累積機率值計算

    • 網路資源:
    • Normal Distribution Calculator/Table
    • 通常求『標準常態分佈』累積機率值,必須要透過查表,本方法用『梯形面積逼近法』求其近似值。
      • 使用 GNU R 統計程式語言。
      • 分別提供百分位及千分位精確度。
      • 標準常態分佈特性:
        • 圖形對稱於平均值軸
        • 從負無限至平均值軸,其累積值等於 0.5。
        • 從平均值軸至正無限,其累積值等於 0.5。

# Standard Normal Probability Distribution

magicNum <- 1 / sqrt(2 * pi)

StandardNormalDesicityOriginal <- function(x) {

result <- exp(-0.5 * (x ^ 2)) / sqrt(2 * pi)

result

}

StandardNormalDesicity <- function(x) {

result <- magicNum * (1 / sqrt(exp(x ^ 2)))

result

}

StandardNormalProbabilityMargin <- function(x) {

if (x == 0) {

area <- 0.5

}

else {

if (x < 0) {

num <- x * 100

area <- 0.5

for (s in c(0:num)) {

area <- area - ((StandardNormalDesicity(s * 0.01) + StandardNormalDesicity(s * 0.01 - 0.01)) * 0.01 * 0.5)

}

}

else {

num <- x * 100 - 1

area <- 0.0

for (s in c(0:num)) {

area <- area + (StandardNormalDesicity(s * 0.01) + StandardNormalDesicity(s * 0.01 + 0.01)) * 0.01 * 0.5

}

area <- 0.5 + area

}

}

area

}

StandardNormalProbabilityMargin2 <- function(x) {

if (x == 0) {

area <- 0.5

}

else {

if (x < 0) {

num <- x * 1000

area <- 0.5

for (s in c(0:num)) {

area <- area - ((StandardNormalDesicity(s * 0.001) + StandardNormalDesicity(s * 0.001 - 0.001)) * 0.001 * 0.5)

}

}

else {

num <- x * 1000 - 1

area <- 0.0

for (s in c(0:num)) {

area <- area + (StandardNormalDesicity(s * 0.001) + StandardNormalDesicity(s * 0.001 + 0.001)) * 0.001 * 0.5

}

area <- 0.5 + area

}

}

area

}

StandardNormalProbabilityRange <- function(x, y) {

if (x > y) {

m <- y

n <- x

}

else {

m <- x

n <- y

}

area <- StandardNormalProbabilityMargin(n) - StandardNormalProbabilityMargin(m)

area

}

StandardNormalProbabilityRange2 <- function(x, y) {

if (x > y) {

m <- y

n <- x

}

else {

m <- x

n <- y

}

area <- StandardNormalProbabilityMargin2(n) - StandardNormalProbabilityMargin2(m)

area

}

###################################################################################

d <- StandardNormalProbabilityMargin(-1.02)

print(d)

d <- StandardNormalProbabilityMargin(1.02)

print(d)

d <- StandardNormalProbabilityRange(0, 1.02)

print(d)