r语言正态性检验
时间: 2025-06-04 15:41:21 浏览: 10
### 使用R语言进行正态性检验
在R语言中,`shapiro.test()` 是一种常用的正态性检验方法。该函数基于Shapiro-Wilk测试,用于检测样本是否来自正态分布的数据集[^1]。
#### 方法一:使用 `shapiro.test()`
以下是通过 `shapiro.test()` 函数执行正态性检验的一个简单示例:
```r
# 设置随机种子以便结果可重复
set.seed(42)
# 创建一个模拟数据向量 (假定为正态分布)
x <- rnorm(100, mean = 5, sd = 2)
# 执行 Shapiro-Wilk 正态性检验
result_x <- shapiro.test(x)
# 输出检验结果
print(result_x)
```
运行以上代码后会返回如下形式的结果:
```
Shapiro-Wilk normality test
data: x
W = 0.98862, p-value = 0.5548
```
在此处,由于p值为0.5548(>0.05),因此可以接受原假设,即认为数据来源于正态分布[^3]。
对于另一个非正态分布的例子,我们可以创建偏斜的数据并再次应用此测试:
```r
y <- runif(100, min=0, max=1) # 非正态分布的均匀分布数据
result_y <- shapiro.test(y)
print(result_y)
```
可能获得这样的输出:
```
Shapiro-Wilk normality test
data: y
W = 0.7, p-value = 7e-13
```
这里因为p值非常小 (<0.05),所以拒绝原假设,说明这些数据不遵循正态分布[^2]。
#### 方法二:针对DataFrame中的分组数据使用`tapply()`
当我们希望对数据框内的不同类别分别做正态性检验时,可以利用`tapply()`配合`shapiro.test()`完成操作。例如,在`birthwt` 数据集中按种族分类检查婴儿体重(`bwt`) 是否满足正态分布条件:
```r
library(MASS) # 加载MASS包以访问birthwt数据集
tapply(birthwt$bwt, birthwt$race, shapiro.test)
```
这将分别为每种种族下的婴儿出生重量提供独立的Shapiro-Wilk 测试报告[^4]。
除了上述提到的方式外,还有其他几种可用于评估数据正常性的技术,比如绘制QQ图或者采用Kolmogorov-Smirnov Test (`ks.test()`) 来比较经验累积分布函数(ECDFs) 和理论标准正态CDF之间的差异程度等替代方案。
阅读全文
相关推荐


















