代码
#自定义函数
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
这篇博客介绍了如何在R语言中创建自定义函数norm.test,用于通过QQ图和Shapiro-Wilk检验来判断数据是否符合正态分布。文章详细解释了正态分布的基本概念,QQ图的作用以及shapiro.test函数的使用,并提供了一个使用随机正态分布数据的例子。读者可以参考此文章理解R语言中的正态性检验过程。

4699

被折叠的 条评论
为什么被折叠?



