前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言做正态性检验的一个小例子

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

作者头像
用户7010445
发布2020-10-26 16:28:45
3.3K0
发布2020-10-26 16:28:45
举报

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

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

比如代码

代码语言:javascript
复制
> 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的样本就可以了

示例代码

代码语言:javascript
复制
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

示例代码

代码语言:javascript
复制
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 这个对应的中文名是啥暂时还不知道。

示例代码

代码语言:javascript
复制
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

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

比如试一下

代码语言:javascript
复制
ad.test(1:100)


Anderson-Darling normality test

data:  1:100
A = 1.0837, p-value = 0.007308
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-10-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小明的数据分析笔记本 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档