R语言——正态分布

Posted by Longfei Han on December 19, 2014

预计阅读时间: 14分钟

总计阅读次数:

1. 正态分布

正态分布在数学和计算机等领域中是一个非常重要的概率分布,记为normal distribution,也称为高斯分布。正态分布出现在许多区域统计:例如,采样分布均值是近似地常态的,即使被采样的样本的原始群体分布并不服从正态分布(中心极限定理)。

若随机变量X服从均值为\(\mu\),标准差为\(\sigma\)的概率分布,记为:

\[X \sim N(\mu,\sigma^2)\]

则其概率密度函数为:

\[f(x)=\frac{1}{\sigma\sqrt{2\pi}}e^{\frac{-(x-\mu)^2}{2\sigma^2}}\]

正态分布的概率密度函数曲线呈钟形,对于单变量的正态分布而言,约68.3%数值分布在距离平均值有1个标准差之内的范围,约95.4%数值分布在距离平均值有2个标准差之内的范围,以及约99.7%数值分布在距离平均值有3个标准差之内的范围。该理论也称为“68-95-99.7法则”或“经验法则”。

经验法则

2. 正态分布检验

在R中,生成服从正态分布的随机变量序列可通过rnorm()函数实现,服从正态分布的随机变量在某点的pdfcdf取值分别用dnorm()pnorm()实现。同时,R中还提供了许多函数用于检验某随机变量是否服从正态分布,如Shapiro-Wilk normality检验、直方图或者QQ图,分别对应R中shapiro.test()hist()qqnorm()函数。

其中,Shapiro-Wilk normality test检验也记为SW检验,类似于线性回归的检验方法,是检验其于回归曲线的残差,用于验证一个随机样本数据是否来自正态分布,属于拟合优度统计量检验方法。一般推荐在样本量较小的时候使用该检验方法。SW检验返回两个检验值:p-value和W。当p-value大于显著性水平0.05,不能拒绝零假设:即样本来自正态分布。统计量W 为:

\[W=\frac{(\sum{a_iy_i})^2}{\sum(y_i-\bar{y})^2}\]

\(y_i\)是对原随机变量样本排序后得到的样本数据,\(a_i\)可由下式获得:

\[(a_1,\ldots,a_n)=\frac{m^TV^{-1}}{(m^TV^{-1}V^{-1}m)^\frac{1}{2}}\]

其中,m是服从标准正态分布的随机变量排序后的期望取值,V是两个排序后变量的协方差矩阵。统计量W最大值是1,可以把W看作是顺序排列样本值\(y_i\)和系数\(a_i\)之间相关系数的平方或者是线性回归的确定性系数,它的值越高,越表示样本与正态分布越匹配。但是仅凭这一个参数是不够的,在非正态分布的小样本数据中也经常会出现较大的W值,所以一般在选用SW检验时,p-value会起到主导作用

相对SW检验而言,QQ图是将数据的分布与标准正态分布进行比较,属于图示法。如果被比较的两个分布比较相似,则其QQ图近似地位于y = x上。如果两个分布线性相关,则QQ图上的点近似地落在一条直线上,但并不一定是y = x这条线。若样本数据近似正态分布,QQ图上的点会近似的在直线\(Y=\sigma*X+\mu\)附近,其中\(\sigma\)是标准差,\(\mu\)是均值,所以可以通过直线来近似求得所服从的正态分布的参数。

R中的正态分布检验代码如下所示:

#生成服从标准正态分布的随机变量x,样本数为1000
x <- rnorm(1000, mean = 0, sd = 1)
#SW检验:样本数量需控制在3~5000
shapiro.test(x)
par(mfrow=c(2,2))
#绘制QQ图和直方图
qqnorm(x)
hist(x)
#随机生成长度为100的服从均匀分布的随机变量
y <- runif(100, min = 0, max = 1)
#SW检验
shapiro.test(y)
#绘制QQ图和直方图
qqnorm(y)
hist(y)
dev.off()

正态分布

图中第一列为生成服从标准正态分布的随机变量x,第二列对应生成服从均匀分布的随机变量y。通过SW检验结果可以看出随机变量x的p-value大于0.05,不能拒绝原假设,所以随机变量x服从正态分布;相反,随机变量y则明显不服从正态分布。同样,在QQ图中,随机变量x更接近于y=x直线,随机变量y则没有。

3. 多元正态分布

多变量正态分布亦称为多变量高斯分布,它是单维正态分布向多维的推广。该分布可以由以下的PDF来描述,其中\(\sigma\)为变量间的协方差矩阵:

\[f_X(x_1,\ldots,x_N)=\frac{1}{(2\pi)^{\frac{N}{2}}(\mid\sum\mid)^\frac{1}{2}}e^{-\frac{1}{2}(x-\mu)^T\sum^{-1}(x-\mu)}\]

多元正态分布采用svd等矩阵分解方法生成(在SVD算法介绍中讲解该部分内容)。 假设要生成生成序列长度为n,服从d元正态分布的随机变量\(x\sim N_d(\mu,\sum)\),则基本步骤如下:

  1. 生成大小为n*d维度的矩阵Z,其中Z包含d个长度为n服从标准正态分布的随机变量;
  2. 计算协方差矩阵的矩阵分解\(\sum=Q^TQ\);
  3. 使用矩阵的线性变换方法\(X=ZQ+J\mu^T\),其中J为单位列向量;
  4. 最后获得随机变量X,随机变量X的每行是一个随机变量。

blog comments powered by Disqus