機率分布 (Probability Distributions)
套路 5: 機率分布 (Probability Distributions)
什麼是資料的機率分布? 說白了就是描述不同結果可能發生的機率的數學函數 (probability density function,pdf)。下表是幾個常用的機率分布在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),p與e是常數數。由此公式可知常態分佈由兩個參數(μ, 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) ,G是gamma 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 1的t
stat_function(fun = "dt", colour =
"red", args = list(df = 5), size = 1) # df 5的t
結果: 自由度df = 1, 5的t分布
F distribution公式 (probability density function):
其中d1 d2是自由度 (degree of freedom) ,B是beta 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) ,G是gamma 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, 18的c2分布
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}。由此公式可知二項式分佈由參數p及n決定。
程式範例:
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的布ㄚ松分佈
留言
張貼留言