大数跨境
0
0

R语言做正态性检验的一个小例子

R语言做正态性检验的一个小例子 小明的数据分析笔记本
2020-10-10
0
导读:R语言里做做正态性检验通常用到的函数是shaporo.test()

R语言里做做正态性检验通常用到的函数是shaporo.test(),这个是叫Shapiro-Wilk(夏皮罗-威尔克)正态性性检验。

对应的原假设是 样本X来自的总体具有正态性分布

比如代码

> x<-rnorm(100)
> shapiro.test(x)

 Shapiro-Wilk normality test

data:  x
W = 0.99187, p-value = 0.8117

p值大于0.05接受原假设

今天一位同学提出 shaporo.test() 这个函数输出数据的范围是 3~5000,超出5000该如何做呢? 我自己之前还没有注意到过样本量超出5000的情况。

第一个想到的是 在大于5000的样本里再随机选一个小于5000的样本就可以了

示例代码

x<-rnorm(6000)
x1<-sample(x,3000,replace = F)
shapiro.test(x1)

但这种情况好像不太稳定,我试了一下有时候算出来的p值是小于0.05的。那我们就可以多抽几次,看p值小于0.05出现次数的多少

还找到一种方法是 直接可视化数据来观察

可以选密度分布图和qq图

参考链接是 http://www.sthda.com/english/wiki/normality-test-in-r

示例代码

x<-rnorm(6000)
library(ggpubr)
p1<-ggdensity(x)
p2<-ggqqplot(x)
library(cowplot)
plot_grid(p1,p2,ncol=2)
image.png

密度分布图是山形,qq图所有的点基本都分布在直线的周围,那就可以判定数据符合正态分布了。

另外还找到一个函数 ad.test() 

这个函数对应的R包 nortest

找到这个函数的链接是 https://github.com/jamovi/jmv/issues/160

这个函数对应的是 Anderson-Darling test for normality 这个对应的中文名是啥暂时还不知道。

示例代码

library(nortest)
ad.test(rnorm(100, mean = 5, sd = 3))

 Anderson-Darling normality test

data:  rnorm(100, mean = 5, sd = 3)
A = 0.3425, p-value = 0.485

这个函数对应的零假设应该也是 样本来自正态总体

比如试一下

ad.test(1:100)


Anderson-Darling normality test

data:  1:100
A = 1.0837, p-value = 0.007308

很明显1:100不符合正态分布

这里得到p值小于0.05,拒绝原假设,最终的结论就是数据总体不符合正态分布。

好了,今天的内容就到这里了。

欢迎大家关注我的公众号

小明的数据分析笔记本

公众号二维码.jpg


【声明】内容源于网络
0
0
小明的数据分析笔记本
分享R语言和python在生物信息领域做数据分析和数据可视化的简单小例子;偶尔会分享一些组学数据处理相关的内容
内容 971
粉丝 0
小明的数据分析笔记本 分享R语言和python在生物信息领域做数据分析和数据可视化的简单小例子;偶尔会分享一些组学数据处理相关的内容
总阅读350
粉丝0
内容971