機率分布 (Probability Distributions)


套路 5: 機率分布 (Probability Distributions)

什麼是資料的機率分布? 說白了就是描述不同結果可能發生的機率的數學函數 (probability density functionpdf)。下表是幾個常用的機率分布在R中的名稱:
機率分布
名稱
機率分布
名稱
Normal
norm
Student t
t
F
f
Chisquare
chisq
Uniform
unif
Binomial
binom
Poisson
pois
Logistic
logis

下表是每個機率分布在R中的函數名稱:
函數名稱
說明
d機率分布名
例如: dnorm是常態分布的density function (pdf)
p機率分布名
例如: pnorm是常態分布的cumulative density function (cdf)
q機率分布名
例如: qnorm是常態分布的quantile function
r機率分布名
例如: rnorm是常態分布的random deviates function

以下是舉例使用R模擬幾種機率分布並畫圖。

Normal distribution公式 (probability density function):
其中μ母體(population)的算數平均數s母體標準差 (population standard deviation)pe常數數。由此公式可知常態分佈由兩個參數(μ, s )決定。
(μ = 0, s = 1 ) 平均值為0標準差為1標準常態分布(standard normal distribution)

程式範例:
set.seed(4321)   # 亂數種子
dat <- data.frame(values = rnorm(10000, mean = 0.8))  
#產生10000平均值0.8標準差1的標準常態分布數值
library(ggplot2)   # 呼叫ggplot2
ggplot(dat, aes(x = values)) +    # dat資料畫圖
  geom_histogram(aes(y = ..density..), binwidth = 0.2, colour = "black", fill = "white") +
  geom_density(alpha = 0.1, fill = "#FF6688")
結果: 平均值為0.8標準差為1標準常態分布(standard normal distribution)

t distribution公式 (probability density function):
其中n自由度 (degree of freedom) Ggamma function。由此公式可知t分佈由參數n決定。

程式範例:
library(ggplot2)
ggplot(data.frame(x = c(-3, 3)), aes(x)) +
  stat_function(fun = dnorm, colour = "sky blue", args = list(mean = 0, sd = 1), size = 1) +
  stat_function(fun = "dt", colour = "green", args = list(df = 1), size = 1) +   # df 1t
  stat_function(fun = "dt", colour = "red", args = list(df = 5), size = 1)     # df 5t
結果: 自由度df = 1, 5t分布

F distribution公式 (probability density function):
其中d1 d2自由度 (degree of freedom) Bbeta function。由此公式可知F分佈由參數d1 d2決定。

程式範例:
library(ggplot2)
ggplot(data.frame(x = c(0, 10)), aes(x)) +
  stat_function(fun = "df", colour = "green", args = list(df1 = 1, df2 = 3), size = 1) +
  stat_function(fun = "df", colour = "red", args = list(df1 = 3, df2 = 9), size = 1) +
  stat_function(fun = "df", colour = "blue", args = list(df1 = 9, df2 = 27), size = 1)
結果: 自由度df = (1, 3)  (3,9)  (9,27)F分布

c2 (Chi-square) distribution公式 (probability density function):
其中k自由度 (degree of freedom) Ggamma function。由此公式可知c2分佈由參數k決定。

程式範例:
library(ggplot2)
ggplot(data.frame(x = c(0, 32)), aes(x)) +
  stat_function(fun = "dchisq", colour = "green", args = list(df = 1), size = 1) +
  stat_function(fun = "dchisq", colour = "red", args = list(df = 9), size = 1) +
  stat_function(fun = "dchisq", colour = "blue", args = list(df = 18), size = 1)
結果: 自由度df = 1, 9, 18c2分布
Uniform distribution:

程式範例:
library(ggplot2)
ggplot(data.frame(x = c(0, 10)), aes(x)) +
  stat_function(fun = "dunif", colour = "green", args = list(min = 0, max = 1), size = 1) +
  stat_function(fun = "dunif", colour = "red", args = list(min = 0, max = 5), size = 1) +
  stat_function(fun = "dunif", colour = "blue", args = list(min = 0, max = 10), size = 1)
結果: (min, max) (0,1), (0,5)(0,10) uniform分布

Binomial distribution公式 (probability density function):
其中p (1 - p)事件出現的機率 k Î {0, 1,..., n}。由此公式可知二項式分佈由參數pn決定。

程式範例:
library(ggplot2)
v  <- 0:20
df <- data.frame(x = v, y = dbinom(v, 30, 0.3))
ggplot(df, aes(x = x, y = y)) + geom_bar(stat = "identity", col = "red", fill = "green") +
  scale_y_continuous(expand = c(0.01, 0)) + xlab("x") + ylab("Density")
結果: n, p = 30, 0.3的二項式分布

Poisson distribution公式 (probability density function):
其中l事件出現機率的期望值 k Î {0, 1,..., n}。由此公式可知布ㄚ松分佈由參數l決定。

程式範例:
library(ggplot2)
ggplot(data.frame(x=c(0,20)), aes(x)) +
  stat_function(fun = "dpois", colour = "blue", args = list(1), size = 1) +
  stat_function(fun = "dpois", colour = "red", args = list(3), size = 1) +
  stat_function(fun = "dpois", colour = "green", args = list(9), size = 1)
結果: l = 1, 3, 9的布ㄚ松分佈


留言

這個網誌中的熱門文章

統計不球人 目錄 (Table of Contents)

如何選擇統計方法 1

如何檢查資料是否接近常態分布 (Normality Test using R)