查看数据是否正常分布在R中
有人可以帮我填写R中的以下function:
#data is a single vector of decimal values normally.distributed <- function(data) { if(data is normal) return(TRUE) else return(NO) }
正常性testing不会做大多数人认为他们做的事情。 夏皮罗的testing,安德森·达林和其他人都是零假设testing反对正常的假设。 这些不应该用来决定是否使用正常的理论统计程序。 事实上,他们对数据分析师来说几乎没有任何价值。 在什么条件下,我们有兴趣拒绝零假设数据是正态分布的? 我从来没有遇到过正常的testing是正确的事情的情况。 当样本规模较小时,即使大的偏离正态性也没有被检测到,当样本量较大时,即使偏离正态性的最小偏差也会导致被拒绝的空值。
例如:
> set.seed(100) > x <- rbinom(15,5,.6) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.8816, p-value = 0.0502 > x <- rlnorm(20,0,.4) > shapiro.test(x) Shapiro-Wilk normality test data: x W = 0.9405, p-value = 0.2453
因此,在这两种情况下(二项和对数正态variables),p值大于0.05,导致拒绝零(数据是正常的)失败。 这是否意味着我们要得出结论,数据是正常的? (提示:答案是否定的)。 拒绝拒绝与接受不同。 这是假设检验101。
但是更大的样本量呢? 我们来看看分布几乎正常的情况。
> library(nortest) > x <- rt(500000,200) > ad.test(x) Anderson-Darling normality test data: x A = 1.1003, p-value = 0.006975 > qqnorm(x)
这里我们使用一个200度自由度的t分布。 qq曲线显示分布比现实世界中可能看到的任何分布更接近正态分布,但testing以非常高的置信度拒绝正态分布。
对正态性的显着性检验是否意味着在这种情况下我们不应该使用正态理论统计量? (另一个提示:答案是否定的)
我也强烈推荐TeachingDemos
包中的SnowsPenultimateNormalityTest
。 不过,这个函数的文档比testing本身更有用。 使用testing前请仔细阅读。
SnowsPenultimateNormalityTest
肯定有其优点,但你也可以看看qqnorm
。
X <- rlnorm(100) qqnorm(X) qqnorm(rnorm(100))
考虑使用函数shapiro.test
,执行Shapiro-Wilks正态性testing。 我一直很满意。
库(DNE)
X <-rnorm(1000,0,1)
is.norm(X,10,0.05)
安德森 – 达林testing也是有用的。
library(nortest) ad.test(data)
当你进行一个testing的时候,你确实有可能拒绝零假设。
查看下一个R代码:
p=function(n){ x=rnorm(n,0,1) s=shapiro.test(x) s$p.value } rep1=replicate(1000,p(5)) rep2=replicate(1000,p(100)) plot(density(rep1)) lines(density(rep2),col="blue") abline(v=0.05,lty=3)
该图表显示,无论您是否有样本量大小的一小部分,都可以有5%的时间拒绝零假设(typesI错误)