如何在 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 ') 

R 中的 Shapiro-Wilk 正态性检验

我们可以看到,分布呈钟形,峰值位于分布中心,这是正态分布数据的典型特征。

示例 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 ') 

R 中的 Shapiro-Wilk 检验直方图

我们可以看到该分布是右偏的,并且不具有与正态分布相关的典型“钟形”。因此,我们的直方图与 Shapiro-Wilk 检验的结果相匹配,并确认我们的样本数据并非来自正态分布。

如何处理非正态数据

如果给定的数据集不是正态分布的,我们通常可以执行以下转换之一以使其更正态分布:

1. 对数变换:将响应变量从 y 变换为log(y)

2. 平方根变换:将响应变量从 y 变换为√y

3. 立方根变换:将响应变量从 y 变换为y 1/3

通过执行这些变换,响应变量通常近似正态分布。

查看 本教程,了解如何在实践中执行这些转换。

其他资源

如何在 R 中执行 Anderson-Darling 测试
如何在 R 中执行 Kolmogorov-Smirnov 检验
如何在 Python 中执行 Shapiro-Wilk 检验

添加评论

您的电子邮箱地址不会被公开。 必填项已用*标注