在统计分析中,当研究对象是计量资料(又称定量资料、连续变量,如身高、体重、血压等)时,我们常常需要比较不同组别(如不同处理组、不同人群、不同时间点)之间某个指标的均值是否存在统计学上的显著差异。
本文将介绍计量资料的差异性分析方法及SPSS和R语言的详细操作,若数据满足正态性(可详见上篇),可选择t检验(两组)或方差分析(三组及以上),否则选择非参数检验。
本文仍使用R语言内置数据集iris为大家介绍。
目录
SPSS实现
1、t检验、方差分析
因为SPSS有些操作不能使用长字符串,为方便操作,本文将Species转换为数字“1,2,3”,命名为Species1。用之前介绍的选择个案的方法筛选Species1为“1”和“2”的数据,为大家介绍t检验的操作流程,用全部的数据介绍方差分析的操作流程。
01|选择菜单栏中的“分析” > “比较平均值” > “独立样本t检验”/“单因素ANOVA检验”
02|t检验
在独立样本t检验的弹出框中,将符合正态分布的变量拖入“检验变量”,将分组变量拖入“分组变量”,选中分组变量 > 点击“定义组”,在定义组的弹出框中填写组别的值,点击“继续”,最后“确定”。
|t检验的结果解读
①首先会给出每个组的平均值和标准差,可用于基线表的绘制;
②主要的检验结果包含方差齐性检验结果和t检验结果,莱文方差等同性检验的显著性(P)>0.05可认为方差齐,即采用“假定等方差”一行的t值和p值,若方差不齐则采用“不假定等方差”一行的t值和p值,p<0.05则可认为两组间存在显著性差异,反之则不认为两组间存在显著性差异。
03|单因素方差分析
在单因素ANOVA检验的弹出框中,将符合正态分布的变量拖入“检验变量”,将分组变量拖入“分组变量”,点击“选项” > 勾选“描述”、“方差齐性检验”、“韦尔奇检验” > 点击“继续”,最后“确定”。
|方差分析的结果解读
①也会给出每个组的描述,包括的平均值、标准差、95%CI置信区间、最大值、最小值,可用于基线表的绘制;
②方差齐性检验结果,p > 0.05,方差齐,否则方差不齐。
③方差分析检验结果,p<0.05则可认为三组中至少有一组之间存在显著差异(方差齐参考ANOVA结果,方差不齐参考韦尔奇结果)
2、多个样本均数间的多重比较
ANOVA的结果有统计学意义只能说明三组总体均数不全相等,若想进一步了解哪两个组总体均数不等,须进行多个样本均数间的两两比较又叫多重比较,若仍用两样本均数比较的t检验进行多重比较,会加大犯一类错误的概率(把总体均数间本无差别判为有差别)。本文介绍几种常用的多重比较的方法:
预先计划好的研究,多选LSD、Bonferroni(邦弗伦尼)
Dunnett专用于多个实验组与一个对照组进行比较,实验组之间不做比较
组间样本量相差不大时通常首选Tukey HSD(图基),组数不多时可选SNK
Scheffé(雪费)最万能,各组样本量不齐或需复杂比较时多选,但检验力较低
方差不齐且样本量不等时,常用Games-Howell(盖姆斯-豪厄尔)非参数方法
操作:在单因素ANOVA检验的弹出框中,选择“事后比较”,然后根据实际情况选择合适的方法。
|结果会给出每两个组之间的显著性差异
3、非参数检验
01 | 选择菜单栏中的“分析” > “非参数检验” > “旧对话框” > “2个独立样本”/“K个独立样本”(本案例选择“K个独立样本”,2组和多组之后的操作基本相同)
02 | 在弹框中,将不服从正态分布的变量拖入“检验变量列表”,将分组变量拖入“分组变量”,选中分组变量 > 点击“定义范围”,在分组范围的弹出框中填写组别的最大值和最小值,点击“继续”,最后点击“确定”
| 非参数检验结果解读
同样p<0.05,即可说明三组Petal.Width的差异有统计学意义。中位数和四分位数的描述这里无法得出,可见下一步骤的获取操作。
4、中位数和四分位数获取--基线表数据
01|选择菜单栏中的“分析” > “统计描述” > “探索”
02|将检验变量和分组变量分别拖入“因变量列表”、“因子列表”,点击“统计” > 勾选“百分位数” > 点击“继续” > 最后“确定”
03|结果输出
R语言实现
1、方差齐性检验
本文介绍两种方法的实现:
Bartlett检验适用于正态分布的样本,Levene方法与SPSS采用的方法一致,是一种非参数检验的方法,对非正态分布也有较好的效果
#1、Levene方法(与SPSS一致):对非正态分布也有较好的效果
library(car)
# iris是数据,Species是因子型变量,Sepal.Length是数值型变量
#默认以中位数进行检测
leveneTest(Sepal.Length ~ Species, data=iris)
#以均值进行检测 leveneTest(Sepal.Length ~ Species, data=iris,center = mean) #2、Bartlett检验:适用于正态分布
bartlett.test(Sepal.Length ~ Species, data=iris)
|结果输出
2、t检验
#分组
library(dplyr)
iris1=filter(iris,iris$Species =="setosa")
iris2=filter(iris,iris$Species =="versicolor")
#t检验 t.test(iris1$Sepal.Length,iris2$Sepal.Length,alternative = "two.sided",mu = 0, paired = FALSE, var.equal = FALSE) # var.equal=TRUE为方差齐返回t检验结果,var.equal=FALSE为方差不齐返回Welch t检验,此外若是配对t检验paired = TRUE
|结果输出
3、方差分析
#方差分析:方差齐
aov.manu <- aov(Sepal.Length~ Species, data=iris)
summary(aov.manu)
#Welch方法:方差不齐
oneway.test(Sepal.Length~ Species, data=iris)
|结果输出
4、多个样本均数间的多重比较
#1.LSD (标记字母法:相同字母的组间无显著性差异,不同字母的组间有显著性差异)
library(agricolae)
#p.adj="none"为LSD法,"bonferroni"为邦弗伦尼法
lsd<-LSD.test(aov.manu, "Species", p.adj="none")
lsd$groups
#2.Bonferroni(邦弗伦尼)
#2.1校正显著性水平α,标记分组字母,需先做完方差分析
bonf<-LSD.test(aov.manu, "Species", p.adj="bonferroni")
bonf$groups
#2.2校正P值,适合任意成对比较,可得出精确p值,不依赖前期方差分析结果 bonf_1<- pairwise.t.test(iris$Sepal.Length,iris$Species,p.adjust.method = "bonferroni") bonf_1
#3.SNK,标记分组字母
snk<-SNK.test(aov.manu, "Species")
snk$groups
#4.Tukey HSD(图基)
library(multcomp)
tukey <- glht(aov.manu, linfct = mcp(Species = "Tukey"))
summary(tukey)
#或者
TukeyHSD(aov.manu)
#5.Dunnett
#5.1multcomp包,默认因子顺序第一个水平为参照组
library(multcomp)
Dunnett<- glht(aov.manu, linfct = mcp(Species = "Dunnett"),alternative ="two.sided")
summary(Dunnett)
#5.2DescTools包
library(DescTools)
Dunnett_1 <- DunnettTest(
x = iris$Sepal.Length, # 数值变量
g = iris$Species, # 分组变量
control = "setosa" # 指定对照组名称
)
Dunnett_1
#6.Scheffé(雪费)
library(DescTools)
ScheffeTest(aov.manu)
#7.Games-Howell(盖姆斯-豪厄尔):方差不齐且样本量不等时
library(rstatix)
gh_result <- iris %>%
games_howell_test(Sepal.Length ~ Species)
gh_result
|结果输出
5、非参数检验
#Wilcoxon秩和检验(Mann-Whitney U检验)(比较两组独立样本的中位数)
#数据准备,选择组别不等于"setosa"的另外两组
library(dplyr)
iris3=filter(iris,iris$Species!="setosa")
#Mann-Whitney U检验
wilcox.test(Petal.Width ~ Species, data=iris3)
#Kruskal-Wallis检验(比较三个或更多独立样本的中位数)
kruskal.test(Petal.Width ~ Species, data=iris)
|结果输出
6、基线表制作
library(compareGroups)
result<-descrTable(Species ~.,data = iris, method = c(Sepal.Length=1,Sepal.Width=1,Petal.Length=1,Petal.Width = 2), # 指定Petal.Width使用非参数检验 show.p.overall = T) result
|结果输出
R语言可以很简便地根据不同的数据类型直接绘制出基线表。
总结
选择合适的差异性分析方法至关重要,需要根据研究设计(组数、独立/配对)、数据分布特征(正态性、方差齐性)以及样本量等因素综合判断,以确保结论的可靠性。