Hypergeometric Probability Distribution

GNU R:

# Hypergeometric Probability HypergeometricProbability <- function(populationSize, numOfSuccess, numOfTrials, numOfSuccessTrials) { numOfFailure <- populationSize - numOfTrials numOfFailureTrials <- numOfSuccess - numOfSuccessTrials myProbability <- choose(numOfTrials, numOfSuccessTrials) * choose(numOfFailure, numOfFailureTrials) / choose(populationSize, numOfSuccess) myProbability } HypergeometricMean <- function(populationSize, numOfSuccess, numOfTrials) { myMean <- numOfTrials * (numOfSuccess / populationSize) myMean } HypergeometricStdDeviation <- function(populationSize, numOfSuccess, numOfTrials) { myMean <- HypergeometricMean(populationSize, numOfSuccess, numOfTrials) myStdDeviation <- sqrt(hypergeometricMean * ((populationSize - numOfTrials) / populationSize)) * ((populationSize - numOfTrials) / (populationSize - 1)) myStdDeviation } HypergeometricStdDeviation2 <- function(populationSize, hypergeometricMean, numOfTrials) { myStdDeviation <- sqrt(hypergeometricMean * ((populationSize - numOfTrials) / populationSize)) * ((populationSize - numOfTrials) / (populationSize - 1)) myStdDeviation } PlotHypergeometricChart <- function(populationSize, numOfSuccess, numOfTrials) { myMean <- HypergeometricMean(populationSize, numOfSuccess, numOfTrials) myStdDeviation <- HypergeometricStdDeviation2(populationSize, numOfSuccess, myMean) myChartTitle <- sprintf("母體數=%d 成功數=%d 平均值=%.4f 標準差=%.4f", populationSize, numOfSuccess, myMean, myStdDeviation) curve(main=myChartTitle, choose(numOfTrials, x) * choose(populationSize - numOfTrials, numOfSuccess - x) / choose(populationSize, numOfSuccess), from=1, to=100, xlab="值", ylab="機率密度") myChartTitle }

圖形:

應用: