第六讲 R-数据正态分布检验
在“R与生物统计专题”中,我们会从介绍R的基本知识展开到生物统计原理及其在R中的实现。以从浅入深,层层递进的形式在投必得医学公众号更新。
在上一讲中,我们介绍了第五讲 R-数据描述性统计分析作图(点我可跳转)。这两天天大家已经初步尝试了R的统计学描述和R作图,接下来我们要学习稍微难一点点的R统计学技能。
在很多的数据统计方法中,对数据的分布情况都有一定的要求,比如相关性检验,t检验,方差分析, 要求数据遵循正态分布或高斯分布。回归分析也要求残差满足正态分布(方差齐性)。因此,在进行这些统计之前,需要对数据的正态性进行检验。
如果数据非正态性,不满足条件的话,可能导致结果出现偏差,甚至错误。
如果数据为非正态分布,我们首先考虑的是数据能否进行对数或平方根转换而变成正态分布,如果经过转换以后,还是无法达到正态分布的要求,建议使用非参数检验。
我们通常使用图形目视检查和相应统计检验方法来检查数据的正态性。
1. 安装和加载R包
# 安装及加载ddplyr:
install.packages("dplyr")
library(dplyr)
install.packages("ggpubr")
# 或者使用github内最新版本
if(!require(devtools)) install.packages("devtools")
devtools::install_github("kassambara/ggpubr")
# 加载ggpubr如下:
library(ggpubr)
如果是Mac电脑的话,可能在安装ggpubr的时候会报错:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools),missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun在这种情况下,请进入Mac的Terminal软件,输入xcode-select –install或者sudo xcode-select --reset
2. 将数据导入R
2. 将数据导入R
在这里,我们将使用名为iris的内置R数据集。
# 导入R内自带的iris数据集
library(datasets)
data(iris)# 将数据存储在变量my_data中
my_data <- iris
3. 检查数据
你可以使用head()和tails()函数检查数据,这将分别显示数据的第一部分和最后一部分。
dim(my_data)
[1] 150 5
# 显示前六行内容
head(my_data, 6)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
4. 评估R中数据的正态性
我们要测试变量Sepal.Length是否正态分布。
如果样本量足够大(n> 30),则违反正态性假设不会造成重大问题(中心极限定理)。这意味着我们在原则上可以忽略数据存在轻微的的分布非正态并使用参数测试。
但是,为了保持一致,我们可以使用Shapiro-Wilk的显着性检验将样本分布与正常分布进行比较,以确定数据是否显示出与正态性的严重偏离。
密度图能够直观看到有关分布,如果图形呈对称钟形,我们可以初步判断数据呈正态分布。
library("ggpubr")
ggdensity(my_data$Sepal.Length,
main = "Density plot of sepal length",
xlab = "sepal length")
QQ图(或分位数图)绘制给定样本与正态分布之间的相关性,并给出了45度参考线,即y=x。当所有点都大致落在该参考线时,我们可以假定数据为正态。
library(ggpubr)
ggqqplot(my_data$Sepal.Length)
视觉方法往往只能看个数据分布的大概。显着性检验可以从统计学意义上将样本分布与正常分布进行比较,以确定数据是否显示出与正态性的严重偏离。
进行正态性检验的方法有几种,例如Kolmogorov-Smirnov(KS)正态性检验和Shapiro-Wilk检验。
这些检验的零假设是“样本分布正常”。
如果检验有效(P<0.05),则分布为非正态分布。
目前广泛使用的是Shapiro-Wilk方法进行正态性检验,它比KS效能更高。检验的原理是基于数据与相应正常分数之间的相关性。
正态性测试对样本量敏感。小样本最常通过正态性测试。因此,重要的是将外观检查和显着性测试相结合以做出正确的决定。
R函数shapiro.test()可用于对一个变量(单变量)执行Shapiro-Wilk正态性检验:
shapiro.test(my_data$Sepal.Length)
Shapiro-Wilk normality test
data: my_data$Sepal.Length
W = 0.97609, p-value = 0.01018
从输出来看,p值<0.05,意味着数据的分布与正态分布存在显著差异。但是如前所述,由于本数据含有150个样本,超过30,且从前视觉判断,数据不存在明显的分布不均匀,所以即便P=0.01,我们在这里也可以认为,数据不存在严重的非正态偏差,可以考虑不做数据转换,直接使用。
好了,本期讲解就先到这里。
在之后的更新中,我们会进一步为您介绍R的入门,以及常用生物统计方法和R实现。欢迎关注,投必得医学手把手带您走入R和生物统计的世界。
提前打个预告,接下来我们要学习R语言的进阶统计学技能啦,下一期将会更新“用R语言进行相关性分析及作图”。喜欢的同学们快快关注起来吧。
第二讲 R-编程基础-运算、数据类型和向量等基本介绍
第三讲 R编程基础-矩阵和数据框
第四讲 R-描述性统计分析
当然啦,R语言的掌握是在长期训练中慢慢积累的。一个人学习太累,不妨加入“R与统计交流群”,和数百位硕博一起学习。
快扫二维码撩客服,
带你进入投必得医学交流群,
让我们共同进步!
↓↓
- END -
长按二维码关注「投必得医学」,更多科研干货在等你!
麻烦点一下在看再走呗