《R语言学习系列27-方差分析(共21页).docx》由会员分享,可在线阅读,更多相关《R语言学习系列27-方差分析(共21页).docx(21页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上22. 方差分析一、方差分析原理1. 方差分析概述方差分析可用来研究多个分组的均值有无差异,其中分组是按影响因素的不同水平值组合进行划分的。方差分析是对总变异进行分析。看总变异是由哪些部分组成的,这些部分间的关系如何。方差分析,是用来检验两个或两个以上均值间差别显著性(影响观察结果的因素:原因变量(列变量)的个数大于2,或分组变量(行变量)的个数大于1)。一元时常用F检验(也称一元方差分析),多元时用多元方差分析(最常用Wilks检验)。方差分析可用于:(1)完全随机设计(单因素)、随机区组设计(双因素)、析因设计、拉丁方设计和正交设计等资料;(2)可对两因素间交互作
2、用差异进行显著性检验;(3)进行方差齐性检验。要比较几组均值时,理论上抽得的几个样本,都假定来自正态总体,且有一个相同的方差,仅仅均值可以不相同。还需假定每一个观察值都由若干部分累加而成,也即总的效果可分成若干部分,而每一部分都有一个特定的含义,称之谓效应的可加性。所谓的方差是离均差平方和除以自由度,在方差分析中常简称为均方(Mean Square)。2. 基本思想基本思想是,将所有测量值上的总变异按照其变异的来源分解为多个部份,然后进行比较,评价由某种因素所引起的变异是否具有统计学意义。根据效应的可加性,将总的离均差平方和分解成若干部分,每一部分都与某一种效应相对应,总自由度也被分成相应的各
3、个部分,各部分的离均差平方除以各自的自由度得出各部分的均方,然后列出方差分析表算出F检验值,作出统计推断。方差分析的关键是总离均差平方和的分解,分解越细致,各部分的含义就越明确,对各种效应的作用就越了解,统计推断就越准确。 效应项与试验设计或统计分析的目的有关,一般有:主效应(包括各种因素),交互影响项(因素间的多级交互影响),协变量(来自回归的变异项),等等。当分析和确定了各个效应项S后,根据原始观察资料可计算出各个离均差平方和SS,再根据相应的自由度df,由公式MS=SS/df,求出均方MS,最后由相应的均方,求出各个变异项的F值,F值实际上是两个均方之比值,通常情况下,分母的均方是误差项
4、的均方。根据F值的分子、分母均方的自由度f1和f2,在确定显著性水平为情况下,由F(f1, f2)临界值表查得单侧F界限值。当F,不拒绝原假设H0,说明不拒绝这个效应项的效应为0的原假设,也即这个效应项是可能对总变异没有实质影响的;若FF则P值,拒绝原假设H0,也即这个效应项是很可能对总变异有实质影响的。3.方差分析的实验设计为了确定方差分析表中各个有关效应项,需要在试验设计阶段就作出安排,再根据设计要求进行试验,得出原始观察值,按原来设计方案算出方差分析表中的各项。在试验设计阶段通常需要考虑如下4个方面:(1)研究的因变量即试验所要观察的主要指标,一次试验时可以有多个观察指标,方差分析时也可
5、以同时对多个因变量进行分析;(2)因素和水平试验的因素(factor)可以是品种、人员、方法、时间、地区等等,因素所处的状态叫水平(level)。在每一个因素下面可以分成若干水平。(3)因素间的交互影响多因素的试验设计,有时需要分析因素间的交互影响(interaction),2个因素间的交互影响称为一级交互影响(AB);3个因素间的交互影响称为二级交互影响(ABC)。当交互影响项呈现统计不显著时,表明各个因素独立,当呈现统计显著时,就需要列出这个交互影响项的效应,以助于作出正确的统计推断。举例解释上述概念:要考察焦虑症的治疗疗效,一个因素是治疗方案,有2种治疗方案,即该因素有2个水平;(治疗方
6、案称为组间因子,因为每个患者只能被分配到一个组别中,没有患者同时接受两种治疗);再考虑一个因素治疗时间,也有两个水平:治疗5周和治疗6个月,同一患者在5周和6个月不止一次地被测量(两次),称为重复测量(治疗时间称为组内因子,因为每个患者在所有水平下都进行了测量)。建立方差分析模型时,既要考虑两个因素治疗方案和治疗时间(主效应),又要考虑治疗方案和时间的交互影响(交互效应),此时即两因素混合模型方差分析。当某个因素的各个水平下的因变量的均值呈现统计显著性差异时,必要时可作两两水平间的比较,称为均值间的两两比较。 二、R语言实现方差分析对数据的要求:满足正态性(来自同一正态总体)和方差齐性(各组方
7、差相等),在这两个条件下,若各组有差异,则只可能是来自影响因素的不同水平。用aov()函数进行方差分析,基本格式为:aov(formula, data=NULL, projections=FALSE, qr=TRUE,contrasts=NULL, .)其中,formula为方差分析公式;data为数据框;projection设置是否返回预测结果;qr设置是否返回QR分解结果;contrasts为公式中一些因子的列表。formula公式的表示:(y为因变量,ABC为分组因子)符号用法分隔符号,左边为响应变量,右边为解释变量eg:yA+B+C+分隔解释变量:表示变量的交互项eg:yA+B+A:B
8、*表示所有可能交互项eg:yA*B*C可展开为:yA+B+C+A:B+A:C+B:C+A:B:C表示交互项达到次数eg:y(A+B+C)2展开为:yA+B+C+A:B+A:C+B:C.表示包含除因变量外的所有变量eg:若一个数据框包括变量y,A、B和C,代码y.可展开为yA+B+C常见研究设计的表达式:(小写字母表示定量变量,大写字母表示组别因子,Subject是对被试者独有的标识变量)设计表达式单因素ANOVAyA含单个协变量的单因素ANCOVAyx+A双因素ANOVAyA*B含两个协变量的双因素ANCOVAyx1+x2+A*B随机化区组yB+A, B为区组因子单因素组内ANOVAyA+Er
9、ror(Subject/A)含单个组内因子(W)和单个组间因子(B)的重复测量ANOVAyB*W+Error(Subject/W)注意:非均衡设计时或存在协变量时,效应项的顺序对结果影响较大,越基础的效应越需要放在表达式前面,首先是协变量、然后是主效应、接着是双因素的交互项,再接着是三因素的交互项。若研究不是正交的,一定要谨慎设置效应的顺序。有三种类型的方法可以分解yA+B+A:B右边各效应对y所解释的方差:类型I(序贯型)效应根据表达式中先出现的效应做调整。A不做调整,B根据A调整,A:B交互项根据A和B调整。类型II(分层型)效应根据同水平或低水平的效应做调整。A根据B调整,B依据A调整,
10、A:B交互项同时根据A和B调整。类型III(边界型)每个效应根据模型其他各效应做相应调整。A根据B和A:B做调整,A:B交互项根据A和B调整。R默认调用类型I方法,其他软件(比如SAS和SPSS)默认调用类型III方法。car包中的Anova()函数(不要与标准anova()函数混淆)提供了使用类型II或类型III方法的选项,而aov()函数使用的是类型I方法。若想使结果与其他软件(如SAS和SPSS)提供的结果保持一致,可以使用Anova()函数。三、单因素方差分析1个因变量,1个影响因素:总差异Yij = 平均差异 + 因素差异i + 随机差异ij例1 比较4种品牌的胶合板的耐磨性,各抽取
11、5个样品,相同转速磨损相同时间测得磨损深度(mm),比较4个品牌胶合板的耐磨性有无差异?部分数据如下(ex27_ex1.Rdata):setwd(E:/办公资料/R语言/R语言学习系列/codes)load(ex27_ex1.Rdata)head(datas) wear brand1 2.30 A2 2.32 A3 2.40 A4 2.45 A5 2.58 A6 2.35 Battach(datas)table(brand) #各组的样本数brandA B C D 5 5 5 5 aggregate(wear,by=list(brand),mean) #各组均值 Group.1 x1 A 2.
12、4102 B 2.4043 C 2.0464 D 2.572aggregate(wear,by=list(brand),sd) #各组标准差 Group.1 x1 A 0.2 B 0.3 C 0.4 D 0.library(car)qqPlot(lm(wearbrand,data=datas),simulate=TRUE) #用Q-Q图检验数据的正态性leveneTest(wearas.factor(brand),data=datas) #方差齐性检验Levenes Test for Homogeneity of Variance (center = median) Df F value Pr
13、(F)group 3 0.6987 0.5664 16 fitF) brand 3 0.7398 0.24660 24.55 3.15e-06 *Residuals 16 0.1607 0.01005 -Signif. codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1 说明:方差齐性检验,原假设H0:方差齐,p值=0.56640.05, 故接受原假设,即方差齐。单因素方差分析结果,brand是因素,Residuals是残差,各列依次为自由度、平方和、均方和、F统计量,p值=3.15e-060.05, 拒绝原假设,即不同品牌的磨损(均值)有显著差别。library(g
14、plots)plotmeans(wearbrand,xlab=品牌, ylab=磨损) #图形展示带95%置信区间的各组均值通过前面的分析知道,不同品牌的磨损(均值)有显著差别,但并不知道哪个品牌与其它品牌有显著差别。TukeyHSD()函数提供了对各组均值差异的成对检验。TukeyHSD(fit) Tukey multiple comparisons of means 95% family-wise confidence levelFit: aov(formula = wear brand, data = datas)$brand diff lwr upr p adjB-A -0.006 -
15、0. 0. 0.C-A -0.364 -0. -0. 0.D-A 0.162 -0. 0. 0.C-B -0.358 -0. -0. 0.D-B 0.168 -0. 0. 0.D-C 0.526 0. 0. 0.说明:可以看出(H0:无差异),B与A的差异非常不显著,C与A、C与B、D与C的差异非常显著。multcomp包中的glht()函数提供了更为全面的多重均值比较方法。library(multcomp)attach(datas)tuk |t|) B - A = 0 -0.00600 0.06339 -0.095 0.9997 C - A = 0 -0.36400 0.06339 -5.7
16、42 0.001 *D - A = 0 0.16200 0.06339 2.556 0.0886 . C - B = 0 -0.35800 0.06339 -5.648 0.001 *D - B = 0 0.16800 0.06339 2.650 0.0743 . D - C = 0 0.52600 0.06339 8.298 0.001 *-Signif. codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1(Adjusted p values reported - single-step method)plot(cld(tuk, level = 0.05), col
17、 = lightgrey)说明:标记相同字母(标记b)的品牌ABD认为是无显著差异,在同一亚组,而品牌C(标记a)与另外三个品牌有显著差异。另外,也可以进行多重t检验,使用函数:pairwise.t.test(x, g, p.adjust.method=,.)其中,x为因变量,g为因子型的分组变量;p.adjust.method设置p值的修正方法,由于多次重复t检验会大大增加犯第一类错误的概率,为此要进行p值的修正,使用bonferroni法修正效果较好。pairwise.t.test(wear,brand,p.adjust.method=bonferroni)Pairwise compari
18、sons using t tests with pooled SD data: wear and brand A B C B 1.00000 - - C 0.00018 0.00022 - D 0.12695 0.10474 2.1e-06P value adjustment method: bonferroni 说明:原假设H0: 无差异,可见A与B无差异,C与ABD有显著差异。最后,方差分析对离群点非常敏感,检验是否有离群点:library(car)outlierTest(fit)No Studentized residuals with Bonferonni p 0.05Largest
19、|rstudent|: rstudent unadjusted p-value Bonferonni p9 2. 0. 0.46364说明:经检验无离群点。三、两因素方差分析1个因变量,2个影响因素:总差异Yijk = 平均差异 + 因素1差异i + 因素2差异i+ 因素1,2交互作用差异ij + 随机差异ijk例2 研究60只豚鼠的牙齿生长数据,按2种喂食方法:橙汁、维生素C,各喂食方法中抗坏血酸含量都有3个水平:0.5mg、1mg、2mg,分配为6组,每组各10只,牙齿长度为因变量。做两因素方差分析。attach(ToothGrowth)head(ToothGrowth) len supp
20、 dose1 4.2 VC 0.52 11.5 VC 0.53 7.3 VC 0.54 5.8 VC 0.55 6.4 VC 0.56 10.0 VC 0.5table(supp, dose) #各组样本数相同,即为均衡设计 dosesupp 0.5 1 2 OJ 10 10 10 VC 10 10 10aggregate(len, by=list(supp, dose), mean) #计算各组均值 Group.1 Group.2 x1 OJ 0.5 13.232 VC 0.5 7.983 OJ 1.0 22.704 VC 1.0 16.775 OJ 2.0 26.066 VC 2.0 26
21、.14aggregate(len, by=list(supp, dose), sd) #计算各组标准差 Group.1 Group.2 x1 OJ 0.5 4.2 VC 0.5 2.3 OJ 1.0 3.4 VC 1.0 2.5 OJ 2.0 2.6 VC 2.0 4.bartlett.test(lensupp,data=ToothGrowth) #关于因素supp的方差齐性检验Bartlett test of homogeneity of variancesdata: len by suppBartletts K-squared = 1.4217, df = 1, p-value = 0.2
22、331bartlett.test(lendose,data=ToothGrowth) #关于因素dose的方差齐性检验Bartlett test of homogeneity of variancesdata: len by doseBartletts K-squared = 0.66547, df = 2, p-value = 0.717fitF) supp 1 205.4 205.4 12.317 0. *dose 1 2224.3 2224.3 133.415 2e-16 *supp:dose 1 88.9 88.9 5.333 0. * Residuals 56 933.6 16.7
23、-Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1说明:可以看出,主效应supp和dose都非常显著(p值都远小于0.05),交互效应也显著(p值=0.02460.05)。若交互作用不显著,可以可以只做去掉交互效应的方差分析。图形化展示两因素方差分析的交互效应:par(mfrow=c(1,2)interaction.plot(dose, supp, len, type=b, col = c(red, blue), pch = c(16, 18), main=Interaction between Dose and Supp)interaction.pl
24、ot(supp, dose, len, type=b, col=c(red, blue), pch = c(16, 18), main=Interaction between Supp and Dose) 说明:有一个图的线有交叉,说明有交互作用。可以看出随着橙汁和维生素C中的抗坏血酸剂量的增加,牙齿长度变长;。对于0.5 mg和1 mg剂量,橙汁比维生素C更能促进牙齿生长;对于2 mg剂量的抗坏血酸,两种喂食方法下牙齿长度增长相同。也可以用HH包中的interaction2wt()函数(也适合三因素方差分析)来展示更全面的可视化结果:library(HH)interaction2wt(len
25、supp*dose)三、重复测量方差分析 重复测量方差分析,即受试者被测量不止一次。例3(1个组内1个组间因子的重复测量)在某浓度CO2的环境中,对寒带植物(来自魁北克)和非寒带植物的(来自密西西比)光合作用率进行比较。因变量uptake为CO2吸收量,自变量Type(组间因子)为植物类型,自变量conc(组内因子)为七种水平的CO2浓度。attach(CO2)head(CO2) #注意CO2是长格式的数据 Plant Type Treatment conc uptake1 Qn1 Quebec nonchilled 95 16.02 Qn1 Quebec nonchilled 175 30.
26、43 Qn1 Quebec nonchilled 250 34.84 Qn1 Quebec nonchilled 350 37.25 Qn1 Quebec nonchilled 500 35.36 Qn1 Quebec nonchilled 675 39.2w1b1-subset(CO2, Treatment=chilled) #先只考虑寒带植物fitF) Type 1 2667.2 2667.2 60.41 0.00148 *Residuals 4 176.6 44.1 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1Error: Plant:co
27、nc Df Sum Sq Mean Sq F value Pr(F) conc 1 888.6 888.6 215.46 0. *conc:Type 1 239.2 239.2 58.01 0. * Residuals 4 16.5 4.1 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1Error: Within Df Sum Sq Mean Sq F value Pr(F)Residuals 30 869 28.97 说明:在0.01的显著水平下,主效应“类型”(p值=0.00148)和“浓度”(p值=0.)以及交叉效应“类型*浓度”(p值=0.
28、)都非常显著。attach(w1b1)interaction.plot(conc, Type, uptake, type=b, col=c(red, blue), pch=c(16, 18), main=Interaction Plot for Plant Type and Concentration)boxplot(uptakeType*conc, data=w1b1, col=(c(gold, green), main=Chilled Quebec and Mississippi Plants, ylab = Carbon dioxide uptake rate (umol/m2 sec)
29、detach(w1b1)可以看出,魁北克省的植物比密西西比州的植物二氧化碳吸收率高,而且随着CO2浓度的升高,差异越来越明显。注1:重复测量设计时,需要有长格式数据才能拟合模型,若是宽数据,需要用reshape2包中的melt()函数转化为长数据;注2:这里是用的传统的重复测量方差分析,假设任意组内因子的协方差矩阵为球形,并且任意组内因子两水平间的方差之差都相等。实际中,该假设一般不满足,可以尝试:使用lme4包中的lmer()函数拟合线性混合模型(Bates,2005);q 使用car包中的Anova()函数调整传统检验统计量以弥补球形假设的不满足(例如Geisser-Greenhouse校
30、正);q 使用nlme包中的gls()函数拟合给定方差-协方差结构的广义最小二乘模型(UCLA,2009);q 用多元方差分析对重复测量数据进行建模(Hand,1987)。四、多元方差分析1. 因变量不只一个的方差分析,称为多元方差分析。要求数据满足:多元正态性、方差协方差矩阵同质性(即指各组的协方差矩阵相同,通常可用Boxs M检验来评估该假设)。例4 使用MASS包中的UScereal数据集,研究美国谷物中的卡路里、脂肪、糖含量是否会因为储物架位置的不同而发生变化。自变量货架位置shelf有1, 2, 3三个水平。library(MASS)attach(UScereal)y-cbind(c
31、alories, fat, sugars)head(y) calories fat sugars1, 212.1212 3. 18.181822, 212.1212 3. 15.151513, 100.0000 0. 0.000004, 146.6667 2. 13.333335, 110.0000 0. 14.000006, 173.3333 2. 10.66667aggregate(y, by=list(shelf), mean) Group.1 calories fat sugars1 1 119.4774 0. 6.2 2 129.8162 1. 12.3 3 180.1466 1.
32、10.cov(y) #求协方差矩阵,主对角线为方差 calories fat sugarscalories 3895.24210 60. 180.fat 60.67438 2. 3.sugars 180.38032 3. 34.library(mvnormtest)mshapiro.test(t(y) #多元正态性检验,注意要对y转置Shapiro-Wilk normality testdata: ZW = 0.6116, p-value = 7.726e-12fitF) shelf 1 0.19594 4.955 3 61 0.00383 *Residuals 63 -Signif.code
33、s: 0 * 0.001 * 0.01 * 0.05 . 0.1 1summary.aov(fit) #输出每个单变量的方差分析结果 Response calories : Df Sum Sq Mean Sq F value Pr(F) shelf 1 45313 45313 13.995 0. *Residuals 63 3238 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1 Response fat : Df Sum Sq Mean Sq F value Pr(F) shelf 1 18.421 18.4214 7.476 0. *Resid
34、uals 63 155.236 2.4641 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1 Response sugars : Df Sum Sq Mean Sq F value Pr(F) shelf 1 183.34 183.34 5.787 0.01909 *Residuals 63 1995.87 31.68 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1说明:多元方差分析的p值=0.003830.005, 故有显著差异;每个单变量的方差分析结果也都是有显著差异的。为了保证方差分析结果的准确性
35、,还可以用mvoutlier包中的aq.plot()函数,进行多元离群点检验(结果略):library(mvoutlier)outliers-aq.plot(y)outliers2. 稳健的多元方差分析若数据不满足多元正态性或方差-协方差矩阵均质性,或担心多元离群点,可以考虑用稳健或非参数版的MANOVA.稳健单因素MANOVA可用rrcov包中的Wilks.test()函数实现。Wilks.test(y, shelf, method=mcd) #注意计算速度相当慢Robust One-way MANOVA (Bartlett Chi2)data: xWilks Lambda = 0.5107
36、3, Chi2-Value = 23.7110, DF = 4.9242, p-value = 0.sample estimates: calories fat sugars1 119.8210 0. 5.2 128.0407 1. 12.3 160.8604 1. 10.五、用回归来做ANOVAANOVA和回归都是广义线性模型的特例,所以,可以用lm()函数实现。setwd(E:/办公资料/R语言/R语言学习系列/codes) load(ex27_ex1.Rdata)fit.aovF) brand 3 0.7398 0.24660 24.55 3.15e-06 *Residuals 16 0
37、.1607 0.01005 -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1fit.lm|t|) (Intercept) 2.41000 0.04482 53.768 2e-16 *brandB -0.00600 0.06339 -0.095 0.9258 brandC -0.36400 0.06339 -5.742 3.03e-05 *brandD 0.16200 0.06339 2.556 0.0212 * -Signif.codes: 0 * 0.001 * 0.01 * 0.05 . 0.1 1Residual standard error:
38、 0.1002 on 16 degrees of freedomMultiple R-squared: 0.8215,Adjusted R-squared: 0.7881 F-statistic: 24.55 on 3 and 16 DF, p-value: 3.152e-06说明:可以看到p值是一样的。线性模型要求预测变量是数值型,当lm()函数遇到因子型自变量时,会用一系列与因子水平相对应的数值型对照变量来代替因子。若因子有k个水平,将会创建k-1个对照变量。R语言中,对照变量的创建方法:contr.helmert第二个水平对照第一个水平,第三个水平对照前两个的均值,第四个水平对照前三个的均值,以此类推;contr.poly基于正交多项式的对照,用于趋势分析(线性、二次、三次等)和等距水平的有序因子;contr.sum对照变量之和限制为0,也称为偏差找对,对各水平的均值与所有水平的均值进行比较;contr.treatment各水平对照基线水平(默认第一个水平),也称作虚拟编码(虚拟变量、哑变量);contr.SAS类似于contr.treatment,只是基线水平变成了最后一个水平,生成的系数类似于大部分SAS过程中使用的对照变量。注1:默认将对照处理