一般根据数据是否符合正态分布,选择合适的统计方法:
统计方法 | 适用情况 |
---|---|
t.test() | 比较两组(参数) |
wilcox.test() | 比较两组(非参数) |
aov()或anova() | 比较多组(参数) |
kruskal.test() | 比较多组(非参数) |
1. T检验
T检验,亦称student t检验(Student's t test),主要用于样本含量较小(例如n<30),总体标准差σ未知的正态分布资料。t检验是用t分布理论来推论差异发生的概率,从而比较两个平均数的差异是否显著。它与Z检验、卡方检验并列。
做t检验需要满足的条件:
1. 服从正态分布
2. 方差齐性(方差是离散量,反映了数据的离散程度,如果两个方差的离散程度相差太大,说明两组数据的离散程度不一致,称为不齐性)不满足方差齐性用t'检验
1.1 shapiro.test()
函数检验数据是否服从正态分布
data1 <- sample(1:100,50)
shapiro.test(data1)
# Shapiro-Wilk normality test
#data: data1
#W = 0.94483, p-value = 0.02101 ##(p>0.05不能拒绝原假设,说明这组数据符合正态分布)
其他进行正态性检验的函数 (如下函数都属于nortest包)
Lillie.test()
ad.test()
cvm.test()
pearson.test()
sf.test()
不同的函数可能会得到不同的结果。
对于不服从正态分布的数据,可以采用一些方法使它服从正态分布。
1.2 方差齐性检验var.test()
var.test只能用于两样本方差齐性检验
var.test()
1.3 t检验(使用t.test()
函数)
- 两组样本均数的比较(两组样本的t检验)
# 生成两组符合正态分布的数据
data3 <- rnorm(100,3,5)
data4 <- rnorm(200,3.4,8)
##方差齐性检验
var.test(data3,data4)
# F test to compare two variances
# data: data3 and data4
# F = 0.37241, num df = 99, denom df = 199,
# p-value = 1.339e-07
# alternative hypothesis: true ratio of variances is not equal to 1
# 95 percent confidence interval:
# 0.2670589 0.5297787
# sample estimates:
# ratio of variances
# 0.3724146
###可以看到p值远<0.05,方差不齐
#t检验
#⚠️方法不齐时要设置var.equal = F,设置var.equal = F时进行的是t' test
t.test(data3,data4,var.equal = F)
# Welch Two Sample t-test
# data: data3 and data4
# t = 0.39341, df = 286.43, p-value = 0.6943
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -1.158859 1.737839
# sample estimates:
# mean of x mean of y
# 3.407682 3.118192
###可以看到p>0.05,95%置信区间包括了0(和p>0.05等价),两组数据均值没有统计学差异
- 样本均数与总体均数的t检验
t.test(data3,mu=3.2) #mu设置总体均数
# One Sample t-test
# data: data3
# t = 0.43198, df = 99, p-value = 0.6667
# alternative hypothesis: true mean is not equal to 3.2
# 95 percent confidence interval:
# 2.453729 4.361636
# sample estimates:
# mean of x
# 3.407682
- 配对t检验
data3 <- rnorm(200,3,5)
data4 <- rnorm(200,3.4,5)
t.test(data3,data4,paired = TRUE) #paired默认=False
# Paired t-test
# data: data3 and data4
# t = -2.1637, df = 199, p-value = 0.03168
# alternative hypothesis: true difference in means is not equal to 0
# 95 percent confidence interval:
# -2.02744560 -0.09397804
# sample estimates:
# mean of the differences
# -1.060712
1.4数据变换
当数据不满足正态分布的时候,要进行t检验必须进行原始数据的变换。如取log,平方根,倒数,boxCox转换
等。
2. Wilcox秩和检验 wilcox.test()
Wilcox秩和检验(又称Mann-Whitney U检验)是对原假设的非参数检验,在不需要假设两组样本数据为正态分布的情况下,测试二者数据分布是否存在显著差异,此检验适用于数据分布属于非正态性的分析对象,其适用范围相较于t检验广泛。
#利用mtcars数据
library(stats)
data("mtcars")
boxplot(mtcars$mpg~mtcars$am,ylab='mpg',names = c('automatic','manual))
#执行wilcoxon秩和检验验证自动档手动档数据分布是否一致
wilcox.test(mpg~am,data = mtcars)
#wilcox.test(mtcars$mpg[mtcars$am==0],mtcars$mpg[mtcars$am==1]) ##(与上面等价)
# Wilcoxon rank sum test with continuity correction
# data: mpg by am
# W = 42, p-value = 0.001871
# alternative hypothesis: true location shift is not equal to 0
# Warning message:
#In wilcox.test.default(x = c(21.4, 18.7, 18.1, 14.3, 24.4, 22.8, :
# cannot compute exact p-value with ties
执行wilcoxon秩和检验(也称Mann-Whitney U检验)这样一种非参数检验 。t检验假设两个样本的数据集之间的差别符合正态分布(当两个样本集都符合正态分布时,t检验效果最佳),但当服从正态分布的假设并不确定时,我们执行wilcoxon秩和检验来验证数据集中mtcars中自动档与手动档汽车的mpg值的分布是否一致,p值<0.05,原假设不成立。意味两者分布不同。警告“无法精確計算带连结的p值“这是因为数据中存在重复的值,一旦去掉重复值,警告就不会出现。