对正态分布的检验往往具有两种方法,即从定性和定量两个角度出发。定性方法一般有直方图、Q-Q图和P-P图;定量方法一般有shapiro正态性检验和K-S正态性检验。下面将对这些定性和定量的方法做一个总结。

一、定性方法

1、直方图

通过直方图可以非常直观的发现变量的分布情况,同时往直方图中添加核密度曲线和理论正态分布曲线可以比较这条曲线的差异性。

脚本如下:

set.seed(1)

x <- rt(1000,5)

#绘制直方图

hist(x, freq = FALSE, breaks = seq(min(x),

max(x), length = 20), main = 'x的直方图',

ylab = '核密度值')

#添加核密度图

lines(density(x), col = 'red', lty = 1, lwd = 2)

#添加正态分布图

x <- x[order(x)]

lines(x, dnorm(x, mean(x), sd(x)),

col = 'blue', lty = 2, lwd = 2.5)

#添加图例

legend('topright',

legend = c('核密度曲线','正态分布曲线'),

col = c('red','blue'), lty = c(1,2),

lwd = c(2,2.5), bty = 'n')


本例中产生1000个自由度为5的t分布随机数,从直方图看,x似乎符合正态分布的形状,但其实际的核密度曲线与正态分布曲线又存在明显的差异。

2、Q-Q图

Q-Q图是一种散点图,对应于正态分布的Q-Q图,纵坐标是标准正态分布的分位数,横坐标为样本值的分位数。可利用QQ图鉴别样本数据是否近似于正态分布,只需看QQ图上的点是否近似地在一条直线附近

脚本如下:

set.seed(1)

x <- rt(1000,5)

qqnorm(x, xlab = '实际分布', ylab = '正态分布',

main = 'x的Q-Q图', col = 'blue')

qqline(x)


图中显示绝大多数点还是在直线附近的,但还有一些点偏离了黑色直线,存在尖峰厚尾的分布形状,可能该序列不服从正态分布。

3、P-P图

P-P图是根据变量的累积比例与指定分布的累积比例之间的关系所绘制的图形。通过P-P图可以检验数据是否符合指定的分布。当数据符合指定分布时,P-P图中各点近似呈一条直线。P-P图和Q-Q图的用途完全相同,只是检验方法存在差异

脚本如下:

set.seed(1)

x <- rt(1000,5)

x <- x[order(x)]

P <- pnorm(x, mean(x), sd(x))

#生成实际数据的累积分布值

cdf <- 0

for(i in 1:length(x)){cdf[i] <- sum(x <= x[i])/length(x)}

#绘制P-P图

plot(cdf, P, xlab = '实际分布', ylab = '正态分布',

main = 'x的P-P图', xlim = c(0,1), ylim = c(0,1),

col = 'blue')

#添加参考线

abline(a = 0, b = 1)


P-P图的结果与Q-Q图类似,绝大多数的数据还是落在直线上的,但仍有一部分数据是偏离直线的。

二、定量方法

定性方法中的直方图、Q-Q图和P-P图都能够直观的发现某个连续变量是否服从正态分布,但对于非常接近于正态分布的变量却无法准确判断是不是正态分布。为了解决这个问题,还可以从定量的角度出发,发现某个变量服从正态分布的概率,即从假设检验角度研究正态分布。

1、shapiro正态性检验

shapiro正态性检验比较适合样本量比较小的检验,一般低于5000的样本可以使用该方法。

脚本如下:

set.seed(1)

x <- rt(1000,5)

shapiro <- shapiro.test(x)

shapiro


很明显,该序列x服从正态性分布的概率非常之渺小,p-value<0.05,不能接受x服从正态性分布的原假设,从而得到x不服从正态分布。

2、K-S正态性检验

K-S正态性检验是一种基于经验累积分布函数(ECDF)的检验,该检验与shapiro正态性检验的区别主要在于样本量的考虑上,K-S正态性检验适合大样本的检验,超过5000样本可以考虑使用该方法。

脚本如下:

set.seed(1)

x <- rt(10000,5)

shapiro <- shapiro.test(x)

shapiro

ks <- ks.test(x,'pnorm')

ks


发现对于大样本(超过5000)shapiro正态性检验无法执行,此时使用K-S正态性检验可以得知x不服从正态性分布,原因是p-value远远小于0.05,即拒绝x服从正态分布的原假设。

三、定性和定量方法相结合

上文中分别介绍了定性和定量的正态性检验方法,下面对这两类方法做一个汇总,自定义一个函数,使得输出结果既包含直方图、Q-Q图和P-P图的定性结果,又包含shapiro正态性检验和K-S正态性检验的定量结果。

脚本如下:

norm.test <- function(x, breaks = 20, alpha = 0.05,

plot = TRUE){

if(plot == TRUE)

{#设置图形界面(多图合为一张图)

opar <- par(no.readonly = TRUE)

layout(matrix(c(1,1,2,3),2,2,byrow = TRUE),

width = c(2,2),heights = c(2,2))

#绘制直方图

hist(x, freq = FALSE, breaks = seq(min(x),

max(x), length = breaks), main = 'x的直方图',

ylab = '核密度值')

#添加核密度图

lines(density(x), col = 'red', lty = 1, lwd = 2)

#添加正态分布图

x <- x[order(x)]

lines(x, dnorm(x, mean(x), sd(x)),

col = 'blue', lty = 2, lwd = 2.5)

#添加图例

legend('topright',

legend = c('核密度曲线','正态分布曲线'),

col = c('red','blue'), lty = c(1,2),

lwd = c(2,2.5), bty = 'n')

#绘制Q-Q图

qqnorm(x, xlab = '实际分布', ylab = '正态分布',

main = 'x的Q-Q图', col = 'blue')

qqline(x)

#绘制P-P图

P <- pnorm(x, mean(x), sd(x))

cdf <- 0

for(i in 1:length(x)){cdf[i] <- sum(x <= x[i])/length(x)}

plot(cdf, P, xlab = '实际分布', ylab = '正态分布',

main = 'x的P-P图', xlim = c(0,1),

ylim = c(0,1), col = 'blue')

abline(a = 0, b = 1)

par(opar)

}

#定量的shapiro检验

if (length(x) <= 5000) {

shapiro <- shapiro.test(x)

if(shapiro$p.value > alpha)

print(paste('定量结果为:', 'x服从正态分布,',

'P值 =',round(shapiro$p.value,5), '> 0.05'))

else

print(paste('定量结果为:', 'x不服从正态分布,',

'P值 =',round(shapiro$p.value,5), '<= 0.05'))

shapiro

}

else {

ks <- ks.test(x,'pnorm')

if(ks$p.value > alpha)

print(paste('定量结果为:', 'x服从正态分布,',

'P值 =',round(ks$p.value,5), '> 0.05'))

else

print(paste('定量结果为:', 'x不服从正态分布,',

'P值 =',round(ks$p.value,5), '<= 0.05'))

ks

}

}

做了个序列的测试,效果如下:

这样就可以同时通过定性和定量的角度确定单变量是不是服从正态分布了。

文中脚本下载链接:

http://yunpan.cn/cH7dXVnCPRqKs 访问密码 f11e

参考书目:

R语言与网站分析

R语言实战

总结:文中使用到的R包和函数

stats包

hist()

qqnorm()

qqline()

plot()

lines()

legend()

qnorm()

dnorm()

shapiro.test()

ks.test()

paste()

定性与定量的单变量正态性检验相关推荐

  1. SAS:单变量正态性检验

    ------------------------------------------------------------------------------------------- PROC UNI ...

  2. R 回归 虚拟变量na_R语言 | 生存分析之R包survival的单变量和多变量Cox回归

    生存分析之R包survival的单变量和多变量Cox回归续前文生存分析(Survival Analysis). 在前文初步简介了生存分析的概念,以及展示了一种生存分析模型Kaplan-Meier的使用 ...

  3. 如何选择适合自己的研究方法?定性vs定量vs混合方法研究

    定性vs定量vs混合方法研究 今天我们将对三种研究类型进行考察:定性.定量和混合方法,以及探讨在科研中我们如何选择正确的方法. 学术小白会听到一些术语,如定性.定量和混合方法研究.但这些到底是什么呢? ...

  4. sas univariate 结果解释_SAS中的univariate单变量过程

    在SAS系统中,除了可以使用MEANS过程执行描述性统计分析外,也可用UNIVARIATE过程进行描述性统计分析.UNIVARIATE过程的基本功能如下: 描述性统计分析,涉及偏度.峰度.分位数的计算 ...

  5. 数据分析介绍之二——单变量数据观察之直方图

    数据分析介绍之二--单变量数据观察之直方图 点和抖动图很好,因为它们很简单. 然而,它们既不漂亮也不直观,最重要的是,它们难以从图中读出定量信息. 特别是,如果我们处理较大的数据集,那么我们需要一个更 ...

  6. [数据可视化]Pandas单变量画图

    Pandas单变量画图 Bar Chat Line Chart Area Chart Histogram df.plot.bar() df.plot.line() df.plot.area() df. ...

  7. 单变量和多变量财务预警模型_非肿瘤单基因这样挖掘可以轻松发3分+SCI!

    今天跟大家分享的是2020年2月发表在SCIENTIFIC REPORTS(IF:3.998)杂志上的一篇文章,在文章中作者利用GEO数据集,鉴定腰背痛的DEGs,然后通过功能注释.富集分析以及PPI ...

  8. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、编写自定义函数在三线表中添加p值

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.编写自定义函数在三线表中添加p值 目录

  9. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、设置transpose参数转置三线表、变量作为列,子组(strata)作为行

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.设置transpose参数转置三线表.变量作为列,子组(strata)作为行 目录

  10. R语言使用table1包绘制(生成)三线表、使用单变量分列构建三线表、自定义overall的标签名称

    R语言使用table1包绘制(生成)三线表.使用单变量分列构建三线表.自定义overall的标签名称 目录

最新文章

  1. Matcher 类中的group(),group(int i),groupCount()
  2. c# equals与==的区别【转】
  3. 【Linux】25.ubuntu使用 nethogs 监测网络流量情况
  4. 整理了7道Python函数的练习题,希望对你学习函数有帮助
  5. Python爬虫之旅_(数据解析)_正则
  6. 启用密码管理之前创建的用户连接Oracle报ORA-28002处理一则
  7. 优秀网页设计:带给你灵感的联系页面设计
  8. 线性代数的本质笔记-更新ing
  9. Magento--修改已存在的订单的运费
  10. android 组件化_你曾遇到的某大厂奇葩问题:Android组件化开发,组件间的Activity页面跳转...
  11. 如何优化cocos2d/x程序的内存使用和程序大小
  12. 09_$.ajax()参数详解及标准写法
  13. 蒙特卡洛模拟分析市场风险
  14. 【附源码】小白打造「传奇游戏」 (一)
  15. web开发 省市县三级联动
  16. 睡眠麻痹 CSP HSP
  17. 安卓app里播放youtube视频
  18. NOIP2017 普及 luogu3957 跳房子
  19. 苏炳添博士论文研究自己,奥运学术两兼顾
  20. ARC 138 A - Larger Score「二分 + 后缀最小值」

热门文章

  1. php绘制的图像是什么格式,图片一般是什么格式
  2. 小球斜抛公式用C语言怎么写,利用C4droid绘制小球斜抛运动轨迹(考虑空气阻力)...
  3. 测回角值计算用计算机,土木工程测量6-计算题库及参考答案
  4. 官宣 慧存医疗与泽平科技战略合作1
  5. SolrCloud 初体验
  6. 待嫁闺中:PPTV的辛酸史
  7. Android 新浪微博开发者平台应用申请及配置说明
  8. 转:谦逊不是罕见的美德,而是人人可习得的能力
  9. ​LeetCode刷题实战510:二叉搜索树中的中序后继 II
  10. JD如何获取cookie