使用R拟合分布
brightbird
2015年9月18日
零.几个常用的概率函数介绍
这里,参考R语言实战,以及[Fitting Distribution with R]的附录。
一.认识各种分布的形态
1.1 连续型随机变量的分布
首先,我们来回顾一遍各类分布函数的表达式,及其关系。
先逐一介绍与标准正态分布相关的一些分布:正态分布,卡方分布,\(t-\)分布,\(F-\)分布,\(Wishart\)分布。
先上个图,一睹为快。
以上几个分布之间的关系如以下结构图所示。
[广义线性模型导论3rd edition,p10]
1.1.1 正态分布
正态分布\(N(\mu, \sigma^2)\)的密度函数: \[ f(y,\mu,\sigma^2)=\frac{1}{\sqrt{2\pi\sigma^2}}exp\left[-\frac{1}{2}(\frac{y-\mu}{\sigma})^2\right] \]
正态分布的形态如图。
library(ggplot2)
library(reshape2)
library(dplyr)
#产生分布数据
set.seed(123)
data_norm<-data.frame(x1 = rnorm(n = 200, m = 0, sd = 1),
x2 = rnorm(n = 200, m = 0, sd = sqrt(2)),
x3 = rnorm(n = 200, m = 0, sd = sqrt(0.5)),
x4 = rnorm(n = 200, m = 1, sd = 1),
x5 = rnorm(n = 200, m = -1, sd =1)
)
data_norm_long<-melt(data_norm)
ggplot(data = data_norm_long, aes(x = value, colour = variable))+
geom_density()+
ggtitle("正态分布密度函数")
正态分布可以衍生出如下的分布。
1.1.2 卡方分布
若\(Z_{i}\sim\ i.i.d N(0, 1)\),则有
\[X^2 = \sum_{i = 1}^{n}Z_{i}^2\sim\ \chi^2(n)
\]
set.seed(123)
data_chisq<-data.frame(x1 = rchisq(200, 10, ncp = 0),
x2 = rchisq(200, 50, ncp =0),
x3 = rchisq(200, 100, ncp = 0))
data_chisq_long<-melt(data_chisq)
## No id variables; using all as measure variables
ggplot(data = data_chisq_long, aes(x = value, colour = variable))+
geom_density()+
ggtitle("卡方分布密度函数")
1.1.3 \(t-\)分布
若\(Z\sim\ N(0, 1)\),\(X^2\sim\ \chi^2(n)\),并且\(Z\)和\(X^2\)独立,则有 \[ T = \frac{Z}{(X^2/n)^2}\sim\ t(n) \]
set.seed(123)
data_t<-data.frame(x1 = rt(200, 10, ncp = 0),
x2 = rt(200, 50, ncp =0),
x3 = rt(200, 100, ncp = 0))
data_t_long<-melt(data_t)
## No id variables; using all as measure variables
ggplot(data = data_t_long, aes(x = value, colour = variable))+
geom_density()+
ggtitle("t-分布密度函数")
1.1.4 \(F-\)分布
若\(X_{1}^2\sim\chi^2(n)\),\(X_{2}^2\sim\chi^2(m)\),并且\(X_{1}\)和\(X_{2}\)相互独立,则有 \[ F = \frac{X_1^2}{n}/\frac{X_2^2}{m}\sim\ F(n, m) \]
set.seed(123)
data_f<-data.frame(x1 = rf(200,df1 = 10, df2 = 10, ncp = 0),
x2 = rf(200,df1 = 5, df2 = 3, ncp =0),
x3 = rf(200, df1 = 3, df2 = 5, ncp = 0))
data_f_long<-melt(data_f)
## No id variables; using all as measure variables
ggplot(data = data_f_long, aes(x = value, colour = variable))+
geom_density()+
ggtitle("F-分布密度函数")
1.1.5 \(Wishart\)分布
\(Wishart\)分布是\(\chi^2\)分布在\(p\)维正态情况下的推广。这里对多维情况暂不展开介绍。
1.2 离散型随机变量的分布
1.2.1 伯努利(\(Bernoulli\))分布
伯努利分布记为\(Bernoulli(p)\),只有0和1两种取值。概率测度函数如下: \[ f_{X}(x) = p^x(1-p)^x\ for\ x = 0, 1 \]
1.2.2 二项(\(Binomial\))分布
二项分布\(B(n,p)\)的可能取值范围为\({0,1,...,n}\)。其概率测度函数如下: \[ f_{X}(x) = \binom{n}{x}p^x(1-p)^x,\ x = 0,1,...,n. \]
set.seed(123)
data_binom<-data.frame(x1 = rbinom(n = 1000, size = 10, prob = 0.6),
x2 = rbinom(n = 1000, size = 50, prob = 0.6),
x3 = rbinom(n = 1000, size = 100, prob = 0.6),
x4 = rbinom(n = 1000, size = 500, prob = 0.6))
data_binom_long<-melt(data_binom)
ggplot(data = data_binom_long, aes(x = value, colour = variable))+
geom_density()+
ggtitle("二项分布概率分布图")
1.2.3 负二项(\(Negative Binomial\))分布
负二项分布。
1.2.4 几何(\(Geometric\))分布
1.2.5 泊松(\(Poission\))分布
1.3 指数分布族及其相互联系
1.3.1 指数分布族
[广义线性模型导论3rd edition,p58]
1.3.2 指数分布
1.3.3 Weibull分布
1.3.4 Beta分布
1.3.5 Gama分布
1.3.6 双指数(\(Double Exponential\))分布
1.4 其他分布
1.4.1 均匀(\(Uniform\))分布
1.4.2 柯西(\(Cauchy\))分布
1.4.3 对数正态(\(Lognormal\))分布
1.5 可视化探索的步骤举例
首先,通过直方图,经验累积分布形态等来观察数据的分布形态。
#产生一组服从N(10,2)分布的随机数
set.seed(123)
x.norm<-rnorm(n = 200, m =10, sd = 2)
#绘制直方图
hist(x.norm, main = "观测样本的直方图")
#拟合密度曲线
plot(density(x.norm), main = "密度函数估计")
#绘制累积经验分布图
plot(ecdf(x.norm), main = "累积经验分布函数")
#绘制QQ图
z.norm<-(x.norm - mean(x.norm))/sd(x.norm)
qqnorm(z.norm)
abline(0,1)
其次,通过QQ图来验证数据是否符合正态分布。
二.模型选择
三.参数估计
- 模拟估计
- 矩估计
- 极大似然估计
四.拟合优度指标
五.拟合优度检验
参考文献
- R语言实战
- 广义线性模型导论, 3rd Edition.
- Probability and Statistics for Economics
- Fitting Distribution with R
- http://www.magesblog.com/2011/12/fitting-distributions-with-r.html