单因素方差分析(One-Way ANOVA)——SAS软件实现

发布于 2021年12月28日 星期二 14:37:00 浏览:7682
原创不易,转载请注明来源,感谢!
附件下载:
单因素方差分析.zip 请勿重复点击,如无响应请耐心等待或稍后再试。

在前面文章中我们介绍了单因素方差分析(One-Way ANOVA)的假设检验理论,本篇文章将实例演示在SAS软件中实现单因素方差分析的操作步骤。

关键词:SAS; 单因素方差分析; F检验; Welch检验; 韦尔奇检验; 事后检验; 两两比较

一、案例介绍

某医生用A、B、C三种方案治疗血红蛋白低下的贫血患者,治疗两个月后,记录每名受试者血红蛋白的上升克数。问3种治疗方案对患者贫血的疗效是否有差别?部分数据见图1。本文案例可从“附件下载”处下载。其中,ID 表示受试者的序号,group表示A、B、C三种治疗方案,Hb表示受试者血红蛋白的上升克数。

图1

二、问题分析

本案例的分析目的是比较3种治疗方案对患者贫血的疗效是否有差别,即判断3种治疗方案患者的血红蛋白上升克数是否存在差异。针对这种情况可以使用单因素方差分析。但需要满足6个条件:

条件1:观察变量为连续变量。本研究中的血红蛋白上升克数为连续变量,该条件满足。

条件3:观测值可分为多组(≥3)。本研究中分为A、B、C三组,该条件满足。

条件4:观察变量不存在显著的异常值,该条件需要通过软件分析后判断。

条件5:各组观测值为正态(或近似正态)分布,该条件需要通过软件分析后判断。

条件6:多组观测值的整体方差相等,该条件需要通过软件分析后判断。

三、软件操作及结果解读

(一) 适用条件4、5、6判断

1. 条件4判断(异常值判断)

(1) SAS实现

首先导入数据,代码如下:

proc import datafile="G: \test\单因素方差分析.csv" dbms=csv out=data1;
run;

使用如下的proc univariate过程步,可以获得Hb变量每一组的描述性统计量(均值、标准差、最大最小值等)、绘制箱线图等结果。

proc univariate data=data1 plot;
	var Hb;
	by group;
run;
(2) 结果解读

图2和图3分别展示了A组受试者Hb变量的百分位数、直方分布图和箱线图,最大值和最小值分别是3.7和0.5 g,首先从专业角度可判断是在正常值范围内;其次,观察箱线图,我们也可以发现并无异常点出现,因此A组受试者Hb变量无异常。

图2
图3

图4和图5分别展示了B组受试者Hb变量的百分位数、直方分布图和箱线图,最大值和最小值分别是2.7和0.1 g,首先从专业角度可判断是在正常值范围内;其次,观察箱线图,我们也可以发现并无异常点出现,因此B组受试者Hb变量无异常。

图4
图5

图6和图7分别展示了C组受试者Hb变量的百分位数、直方分布图和箱线图,最大值和最小值分别是2.1和0.2 g,首先从专业角度可判断是在正常值范围内;其次,观察箱线图,我们也可以发现并无异常点出现,因此C组受试者Hb变量无异常。

图6
图7

综上,三组受试者的Hb变量均无异常值,满足条件4。

2. 条件5判断(正态性检验)

(1) SAS实现
proc univariate data=data1 normal;
	var Hb;
	by group;
run; 

其中,normal选项表示对变量做正态性分析。

(2) 结果解读

图8、图9和图10分别列出了A、B、C三组的正态性检验结果。Shapiro-Wilk正态性检验的P值分别为0.2957、0.4864、0.4349,均>0.1,服从正态分布。因此,满足条件5。

图8
图9
图10

3. 条件6判断(方差齐性检验)

(1) SAS实现

使用如下的proc anova过程步,可以进行方差齐性检验并做方差分析。

默认情况下方差分析会对输入数据绘制箱形图,可通过plots=none选项,不输出图形。

proc anova data=data1 plots=none;
		class group;
		model Hb=group;
		means group/hovtest=Levene;
run;
(2) 结果解读

如图11所示, F=2.98,P=0.0571<0.1,提示三组数据方差不齐,不满足条件6。

图11

(二) 统计描述及推断

1. 方差分析

(1) SAS实现

本案例进行校正单因素方差分析,代码如下所示:

proc anova data=data1 plots=none;
	class group;
	model Hb=group;
means group/welch;
run;
(2) 结果解读

结果主要包括四部分,分别如图12—图15所示。

第一部分(图12)是数据的基本信息,group共3个水平,总的观测数是78。

图12

第二部分(图13)是呈现未校正方差分析的结果,第一张表格展示了模型和误差两部分的自由度、平方和、均方、最重要的F统计量的值(F=5.62)以及对应的概率P值(P=0.0053<0.05),认为3种治疗方案对患者贫血的疗效有差别。第二张表格展示了决定系数(R2)、变异系数(Coeff Var)、均方误差根(Root MSE)以及Hb的均值。最后一张表格展示了离均差平方和(SS)的值。

图13

第三部分(图14)为校正单因素方差分析(Welch’s)的结果,F=5.48,P=0.0072<0.05,认为3种治疗方案对患者贫血的疗效有差别。

图14

第四部分(图15)展示了3种治疗方案受试者血红蛋白上升克数的均值和标准差,A、B、C三组血红蛋白的上升克数分别为1.688±0.867、1.250±0.738和1.023±0.538 g。方案A的受试者血红蛋白上升克数最高,其次是方案B,最后是方案C。

图15

由于本案例满足正态性,不满足方差齐性,但并非方差严重不齐,所以采用校正单因素方差分析(Welch’s)法的结果。可见三组总的差异有统计学意义,但并未说明是哪两组之间有差异,因此,可进一步做事后检验。

2. 事后检验的方法1

(1) SAS实现

事后检验的SAS代码如下所示,使用means语句指定事后检验的方法,包括LSD、BON、Sidak、SNK、Tukey、Duncan等。本案例不满足方差齐性,应选择Games-Howell(unequal variances)法进行事后检验,但是SAS 并未提供该方法,由于Tukey-Kramer方法与Games-Howell(unequal variances)法近似,因此,我们使用Tukey-Kramer方法进行事后检验。

proc anova data=data1 plots=none;
	class group;
	model Hb=group;
	means group/welch tukey;
run;
(2) 结果解读

    事后检验的结果如图16所示,相同条覆盖的两组没有显著差异,从图中我们可以看到A组和B组没有差异,B组和C组没有差异,A组和C组有差异。此外,图中还显示了每一组Hb的均值,可以看到A组的均值为1.6885最高。因此,治疗方案A和C对患者贫血的疗效有差别,且治疗方案A的治疗效果更佳。

图16

可以发现,在该语句下的Tukey-Kramer法事后检验,虽然能看到具体是哪两组有差异,但并未显示两两比较的具体P值。下面,介绍另外一种事后检验的方法。

3. 事后检验的方法2

(1) SAS实现

proc GLM过程步也可以实现方差分析的功能,语句与proc anova大同小异,但使用范围更广。其中lsmeans语句是进行两两比较,tdiff选项是给出两两比较的t值和P值,adjust是指定两两比较的方法。同上,我们使用Tukey-Kramer法进行事后检验。

proc GLM data=data1 plots=none;
	class group;
	model Hb=group;
	means group/welch;
	lsmeans group/tdiff adjust= tukey;
run;
(2) 结果解读

如图17所示,首先输出的是方差分析的结果,结果与proc anova过程步输出的结果一致,此处不再赘述。

图17

最后,输出的是两两比较的结果。如图18所示,A、B、C三组血红蛋白的上升克数分别为1.688±0.867、1.250±0.738和1.023±0.538 g,A组最高,B组次之,C组最低。

A组和B组两两比较的P值为0.0824>0.05,差异无统计学意义;A组和C组两两比较的P值为0.0042<0.05,差异有统计学意义;B组和C组两两比较的P值为0.5019>0.05,差异无统计学意义。

因此,治疗方案A和C对患者贫血的疗效有差别,A的治疗效果更佳。

图18

四、结论

本研究采用单因素方差分析判断3种方案治疗贫血患者的血红蛋白上升克数是否存在差异。通过专业知识判断,三组数据不存在需要删除的异常值;通过Shapiro-Wilk检验,提示三组数据满足正态分布;通过Levene’s检验,提示三组数据间方差不齐,采用校正单因素方差分析(Welch’s)法分析数据。

分析结果显示,A、B、C三组血红蛋白的上升克数分别为1.688±0.867、1.250±0.738和1.023±0.538 g,方差分析结果F=5.48,P=0.0072<0.05,认为3种治疗方案对患者贫血的疗效有差别。进一步采用Tukey-Kramer法进行事后检验,结果表明,A组和B组两两比较的P值为0.0824>0.05,差异无统计学意义;A组和C组两两比较的P值为0.0042<0.05,差异有统计学意义;B组和C组两两比较的P值为0.5019>0.05,差异无统计学意义。

因此,3种治疗方案对患者贫血的疗效有差别,方案A的治疗效果优于治疗方案C。

五、分析小技巧

(一) 正态性检验

  • 严格来讲,单因素方差分析时,需要分别对每一组数据的正态性进行检验。但方差分析对数据的分布具有一定的耐受力,如果数据不是严重偏态或者只有部分组别数据不满足正态性要求,鉴于参数检验的统计学效能优于非参数检验的角度,还是可以使用单因素方差分析方法,而不使用非参数检验。关于正态性检验的注意事项详见文章(医学统计学核心概念及重要假设检验的软件实现(2/4)——正态性假设检验的SPSS实现)。

(二) 方差齐性检验

  • SAS语句的hovtest选项执行组间方差齐性检验,包括Bartlett和Levene两种方法,分别执行Bartlett齐性检验和Levene齐性检验。Bartlett检验通常用于正态或近似正态的数据,Levene检验对非正态数据更为恰当。
  • 对于不是特别严重的方差不齐,单因素方差分析提供了校正检验方法(Welch one-way ANOVA/ Welch’s F检验),是考虑了方差差异之后的更为稳健的分析结果。但当组间方差差异较大时,校正结果也不一定可信,建议使用非参数检验(Kruskal-Wallis检验)。如果数据正态性和方差齐性都不满足,最好使用非参数检验(Kruskal-Wallis检验)。关于方差齐性检验的更多内容请阅读(医学统计学核心概念及重要假设检验的软件实现(4/4)——方差齐性检验及SPSS实现)。
  • 方差分析的SAS程序可通过proc glm和proc anova过程来实现。proc anova是专门用于方差分析的程序,proc glm则是用于一般线性模型的程序。方差分析属于一般线性模型的范畴,因此,可以直接用proc glm过程。proc glm和proc anova大同小异,绝大多数语句的功能相同,但proc glm过程步范畴更广。

(三) 事后检验(两两比较)

  • 事后检验一般分为事前检验(Prior tests)和事后检验(Post hoc tests)。事前检验是指在数据收集之前便决定了要通过事后检验来考察多个组与某个特定组之间的差别,多根据专业意义设定比较的策略。如果是事前检验,不论整体分析的结果如何,均可进行比较,并且一般不需要对检验水准进行太多修正。事后检验只有在方差分析得到有统计学意义的F值后才有必要进行,是一种探索性分析。对于事先未计划的事后检验(即事后检验),各组间的差别只是一种提示,要确认这种差别最好重新设计实验。
  • 需要注意的是,SAS软件提供了多种事后检验的方法,如图19所示,这些方法并无优劣之分,结果相差也不大。means语句可以写多个事后检验的方法,SAS 会给出多种事后检验的结果。
图19
End
文章目录 沉浸式阅读