R语言自定义函数,利用QQ图和shaprio.test检验正态分布

来源:互联网 发布:财务会计软件目的 编辑:程序博客网 时间:2024/04/30 08:17

代码

#自定义函数


norm.test<-function(data,alpha=0.05,pic=TRUE){ #alpha为显著性水平,这里的默认值为0.05 

if(pic==TRUE){#画图形
dev.new()
par(mfrow=c(2,1))
qqnorm(data,main="qq图")
qqline(data)
hist(data,freq=F,main="直方图和密度估计曲线")
lines(density(data),col="blue")#密度估计曲线
x<-c(round(min(data)):round(max(data)))
lines(x,dnorm(x,mean(data),sd(data)),col="red")#正态分布曲线
}
sol<-shapiro.test(data)
if(sol$p.value>alpha){
print(paste("success:服从正态分布,p.value=",sol$p.value,">",alpha))
}else{
print(paste("error:不服从正态分布,p.value=",sol$p.value,"<=",alpha))
}
sol
}

#函数调用

data<-rnorm(100,mean=5,sd=3)#数据为随机生成的满足正态分布的数据集,个数为100,平均值为5,标准差为5

norm.test(data)


################

说明

1、norm是正态分布,dnorm是正态分布的概率密度函数,rnorm是生成正态分布的随机数,pnorm是分布函数

2、关于QQ图

(1)QQ图用于检验指标样本是否服从某种分布状态,样本越是服从某种分布规则,绘制的QQ图越会趋于一条直线

(2)qqnorm函数绘制正态分布的QQ图

(3)qqline函数用于绘制QQ图的近似直线,其解析式为,其中a是正态分布的标准差,截距b为均值

3、关于shapiro.test函数

该函数的参数为要检验的数据集,返回值为一个对象,对象的属性p.value与显著性水平相比(一般与0.05相比),如果p.value值大,则可以说其服从正态分布,该值越接近1越好。


运行结果





参考

1、《R语言与网站分析》

2、《R语言 Shapiro-Wilk检验》  http://blog.sina.com.cn/s/blog_403aa80a01019lwd.html

0 0