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

  • 網路資源:

  • 通常求『標準常態分佈』累積機率值,必須要透過查表,本方法用『梯形面積逼近法』求其近似值。

    • 使用 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)
ċ
StandardNormalDistribution.R
(2k)
李智,
2011年4月15日 上午6:45