各类统计方法R语言实现(二)
各位小伙伴们大家好,今天是我们的系列推文“各类统计方法R语言实现”第二篇,今天介绍的主要内容有:正态性检验、方差齐性检验、t检验、近似t检验。
t检验亦称student t检验,是目前研究最常用的统计方法了,主要用于样本含量较小(例如n < 60),总体标准差σ未知的正态分布。t检验学习重点是各类检验方法的用途、使用条件和注意事项。
简介
此处选用的数据集仍是R语言自带的mtcar数据集,具体介绍见上次推文:各类统计方法R语言实现(一)
t检验按照实验设计可分为:
1、单样本t检验:已知样本均数与总体均数比较,总体均数一般为理论值、标准值等。
2、配对样本t检验:配对设计的计量资料。
3、两独立样本t检验:完全随机设计两样本均数的比较。
其中单样本t检验需要总体数据需要服从正态分布、配对样本t检验需要每对数据差值的总体服从正态分布、两独立样本t检验需要满足两总体服从正态分布且方差齐。
因此进行两独立样本t检验之前,需要进行正态性检验和方差齐性检验,若不服从正态分布,可考虑使用非参数检验;若服从正态分布但不服从方差齐性,则可使用近似t检验。
data(mtcars)
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
#计算描述统计分析
mtcars$cyl<-as.factor(mtcars$cyl)
mtcars$vs<-as.factor(mtcars$vs)
mtcars$am<-as.factor(mtcars$am)
mtcars$gear<-as.factor(mtcars$gear)
mtcars$carb<-as.factor(mtcars$carb)
#计算描述统计分析
summary(mtcars)
## mpg cyl disp hp drat
## Min. :10.40 4:11 Min. : 71.1 Min. : 52.0 Min. :2.760
## 1st Qu.:15.43 6: 7 1st Qu.:120.8 1st Qu.: 96.5 1st Qu.:3.080
## Median :19.20 8:14 Median :196.3 Median :123.0 Median :3.695
## Mean :20.09 Mean :230.7 Mean :146.7 Mean :3.597
## 3rd Qu.:22.80 3rd Qu.:326.0 3rd Qu.:180.0 3rd Qu.:3.920
## Max. :33.90 Max. :472.0 Max. :335.0 Max. :4.930
## wt qsec vs am gear carb
## Min. :1.513 Min. :14.50 0:18 0:19 3:15 1: 7
## 1st Qu.:2.581 1st Qu.:16.89 1:14 1:13 4:12 2:10
## Median :3.325 Median :17.71 5: 5 3: 3
## Mean :3.217 Mean :17.85 4:10
## 3rd Qu.:3.610 3rd Qu.:18.90 6: 1
## Max. :5.424 Max. :22.90 8: 1
正态性检验
使用Shapiro-Wilk法
shapiro.test(mtcars$mpg)
##
## Shapiro-Wilk normality test
##
## data: mtcars$mpg
## W = 0.94756, p-value = 0.1229
可以看到结果中p>0.05,服从正态分布。
还可使用图示法,绘制QQ图,加上95%置信区间
##绘制QQ图
library(car)
## Loading required package: carData
qqPlot(lm(mpg~am,data = mtcars),stimulate = TRUE, main="qq plot", col="blue", col.lines="red")
## Toyota Corolla Maserati Bora
## 20 31
结果大致呈一条直线,数据落在95%置信区间范围内则说明大致服从正态分布
方差齐性检验
方差齐性检验的方法有很多,本节主要介绍以下三种:
Bartlett检验:需要数据服从正态分布
Levene检验:不依赖总体分布具体形式,更为稳健,因此更常用。
Fligner-Killeen检验:不依赖总体分布具体形式。
##绘制箱线图,
plot(mpg~am,data = mtcars)
##Bartlett检验
bartlett.test(mpg~am,data = mtcars)
##
## Bartlett test of homogeneity of variances
##
## data: mpg by am
## Bartlett's K-squared = 3.2259, df = 1, p-value = 0.07248
可以看到结果中p>0.05,方差齐。
##Levene检验
leveneTest(mpg~am,data = mtcars)
## Levene's Test for Homogeneity of Variance (center = median)
## Df F value Pr(>F)
## group 1 4.1876 0.04957 *
## 30
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
可以看到结果中p<0.05,方差不齐。
##Fligner-Killeen检验
fligner.test(mpg~am,data = mtcars)
##
## Fligner-Killeen test of homogeneity of variances
##
## data: mpg by am
## Fligner-Killeen:med chi-squared = 4.4929, df = 1, p-value = 0.03404
可以看到结果中p<0.05,方差不齐。
t检验
##单样本t检验,mu表示的是总体平均数
t.test(mtcars$mpg,mu=20)
##
## One Sample t-test
##
## data: mtcars$mpg
## t = 0.08506, df = 31, p-value = 0.9328
## alternative hypothesis: true mean is not equal to 20
## 95 percent confidence interval:
## 17.91768 22.26357
## sample estimates:
## mean of x
## 20.09062
p>0.05,表示已知样本均数与总体均数相等
##配对t检验
length(mtcars$mpg)
## [1] 32
mpg1<-mtcars$mpg
mpg2<-mtcars$mpg+rnorm(32, mean = 5, sd = 1)
t.test(mpg1,mpg2,paired = T)
##
## Paired t-test
##
## data: mpg1 and mpg2
## t = -38.226, df = 31, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -4.962350 -4.459653
## sample estimates:
## mean of the differences
## -4.711002
p<0.05,结果有统计学差异
##两独立样本t检验
t.test(mpg~am,data = mtcars, paired = FALSE, var.equal = T)
##
## Two Sample t-test
##
## data: mpg by am
## t = -4.1061, df = 30, p-value = 0.000285
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -10.84837 -3.64151
## sample estimates:
## mean in group 0 mean in group 1
## 17.14737 24.39231
##两独立样本近似t检验(Welch法)
t.test(mpg~am,data = mtcars, paired = FALSE, var.equal = F)
##
## Welch Two Sample t-test
##
## data: mpg by am
## t = -3.7671, df = 18.332, p-value = 0.001374
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
## -11.280194 -3.209684
## sample estimates:
## mean in group 0 mean in group 1
## 17.14737 24.39231
以上代码整理汇总
p1<-shapiro.test(mtcars$mpg[mtcars$am == 0])$p.value
p2<-shapiro.test(mtcars$mpg[mtcars$am == 1])$p.value
varp3<-leveneTest(mpg~am,data = mtcars)$`Pr(>F)`[1]
ifelse(p1>0.05|p2>0.05,
ifelse(varp3>0.05,t.test(mpg~am,data = mtcars, paired = FALSE, var.equal = T)$p.value,
t.test(mpg~am,data = mtcars, paired = FALSE, var.equal = F)$p.value),
wilcox.test(mpg~am,data = mtcars,correct = FALSE)$p.value)
## [1] 0.001373638
ifelse(p1>0.05|p2>0.05,
ifelse(varp3>0.05,print("两独立样本t检验"),
print("两独立样本近似t检验(Welch法)")),
print("wilcox秩和检验"))
## [1] "两独立样本近似t检验(Welch法)"
## [1] "两独立样本近似t检验(Welch法)"
可以看到此处输出的是两独立样本近似t检验(Welch法)的结果。
好了,今天的R语言实现统计方法系列推文暂时告一段落,我们下次再见吧!
小伙伴们如果有什么统计上的问题,或者如果想要学习什么方面的生物信息内容,可以在微信群或者知识星球提问,没准哪天的推文就是专门解答你的问题哦!