首先准备两个样本:
set.seed(0)
a <- runif(100, min = -3, max = 3)
b <- rnorm(100, mean = 0, sd = 9)
正态分布检验的方法有:
1. ks.test()
ks.test函数是R语言自带的函数, 对单样本或双样本做Kolmogorov-Smirnov检验, 是用来检验数据的累计函数是否来自某个确切的分布, 故如果假设的正态分布的均值和方差, 可用ks.test函数进行正态分布检验, ks.test函数的声明如下:
ks.test(x, y, ...,
alternative = c("two.sided", "less", "greater"),
exact = NULL)
x: 向量, 是要验证的数据;
y: 如果是一个向量, 则验证其和x的累计分布是否一致; 也可以是一个字符串, 比如"pnorm", 指向具有连续型累积分布函数的分布;
...: 如果y是一个字符串, 则在这里设置y分布的参数;
alternative: 备择假设, 默认检验两分布的累计密度分布相同;
exact: 是否需要计算精确的p值, 默认一个样本, 样本数少于100, 且没有相同值, 或者双样本, 样本数的乘积少于10000时, 会精确计算p值.
比如要检验a,b是否来自标准正态分布以及a,b是否来自同一个分布:
ks.test(a,"pnorm", mean = 0, sd = 9) # 1.692e-12
ks.test(b,"pnorm", mean = 0, sd = 9) # 0.2196
ks.test(a, b) # 1.001e-07
2. shapiro.test()
shapiro.test函数也是R语言自带的一个函数, 用来做Shapiro-Wilk正态性检验, 函数声明如下:
shapiro.test(x)
x: 需要做正态性检验的数据, 非缺失值个数应在3到5000个.
比如要检验a,b是否来自正态分布: