如何在 r 中执行 shapiro-wilk 检验(附示例)
夏皮罗-威尔克检验是正态性检验。它用于确定样本是否来自正态分布。
这种类型的检验对于确定给定数据集是否来自正态分布非常有用,这是许多统计检验中常用的假设,包括 回归、 方差分析、 t 检验等。 ‘其他的。
我们可以使用 R 中的以下内置函数轻松地对给定数据集执行 Shapiro-Wilk 测试:
夏皮罗.测试(x)
金子:
- x:数据值的数值向量。
此函数生成W检验统计量以及相应的 p 值。如果 p 值小于 α = 0.05,则有足够的证据表明样本不是来自正态分布总体。
注意:样本大小必须介于 3 到 5,000 之间才能使用 shapiro.test() 函数。
本教程展示了此功能实际使用的几个示例。
示例 1:对正态数据进行 Shapiro-Wilk 检验
以下代码显示如何对样本大小 n=100 的数据集执行 Shapiro-Wilk 检验:
#make this example reproducible set.seed(0) #create dataset of 100 random values generated from a normal distribution data <- rnorm(100) #perform Shapiro-Wilk test for normality shapiro.test(data) Shapiro-Wilk normality test data:data W = 0.98957, p-value = 0.6303
测试的 p 值为0.6303 。由于该值不小于0.05,我们可以假设样本数据来自正态分布的总体。
这个结果应该不足为奇,因为我们使用 rnorm() 函数生成样本数据,该函数从平均值 = 0 和标准差 = 1 的正态分布生成随机值。
相关: R 中 dnorm、pnorm、qnorm 和 rnorm 指南
我们还可以生成直方图来直观地验证样本数据是否呈正态分布:
hist(data, col=' steelblue ')
我们可以看到,分布呈钟形,峰值位于分布中心,这是正态分布数据的典型特征。
示例 2:非正态数据的 Shapiro-Wilk 检验
以下代码展示了如何对样本大小 n=100 的数据集执行 Shapiro-Wilk 检验,其中值是根据泊松分布随机生成的:
#make this example reproducible set.seed(0) #create dataset of 100 random values generated from a Poisson distribution data <- rpois(n=100, lambda=3) #perform Shapiro-Wilk test for normality shapiro.test(data) Shapiro-Wilk normality test data:data W = 0.94397, p-value = 0.0003393
测试的 p 值为0.0003393 。由于该值小于 0.05,因此我们有足够的证据表明样本数据并非来自正态分布总体。
这个结果应该不足为奇,因为我们使用 rpois() 函数生成样本数据,该函数根据泊松分布生成随机值。
相关: R 中的 dpois、ppois、qpois 和 rpois 指南
我们还可以制作一个直方图来直观地看出样本数据不是正态分布的:
hist(data, col=' coral2 ')
我们可以看到该分布是右偏的,并且不具有与正态分布相关的典型“钟形”。因此,我们的直方图与 Shapiro-Wilk 检验的结果相匹配,并确认我们的样本数据并非来自正态分布。
如何处理非正态数据
如果给定的数据集不是正态分布的,我们通常可以执行以下转换之一以使其更正态分布:
1. 对数变换:将响应变量从 y 变换为log(y) 。
2. 平方根变换:将响应变量从 y 变换为√y 。
3. 立方根变换:将响应变量从 y 变换为y 1/3 。
通过执行这些变换,响应变量通常近似正态分布。
查看 本教程,了解如何在实践中执行这些转换。
其他资源
如何在 R 中执行 Anderson-Darling 测试
如何在 R 中执行 Kolmogorov-Smirnov 检验
如何在 Python 中执行 Shapiro-Wilk 检验