分享

R语言从入门到精通:Day11

 昵称46988079 2020-01-18
在上一次推文中,我们已经介绍了两组独立样本的t检验,今天我们来介绍用于常见实验设计的方差分析大全。

在上一次推文中,我们已经介绍了两组独立样本的t检验,那么多组(大于两组)样本的比较就要用到这次推文中介绍的方差分析(ANOVA)了。方差分析在各种实验和准实验设计的分析中都有广泛应用,接下来将要介绍用于常见研究设计分析的 R函数。

在开始阅读之前,我建议大家能回头去复习一下方差分析的基础知识,特别是一些基本术语,对接下来的学习会有很大帮助。

温馨提示

1、本节内容重点内容较多,

务必紧跟红色标记。

2、测试数据及代码

见文末客服小姐姐二维码。

1、基础方差分析

ANOVA和回归方法(下一次推文的主要内容)虽然都是独立发展而来,但是从函数形式上看,它们都是广义线性模型的特例。用学习绘图时用到的函数lm()也能分析ANOVA模型。不过,这里我们基本都使用函数aov()。两个函数的结果是等同的,但函数aov()函数展示结果的格式更容易理解。为保证完整性,最后会提供一个使用函数lm()的例子供大家参考。

函数aov()的用法和之前接触过的函数略有不同,语法为aov(formula, data=dataframe),参数formula代表了方差分析实验设计中将要研究的变量之间的关系。表1和表2分别列举了表达式中常见的符号和常见的表达式。

表1:表达式中常见符号

表2:常见表达式及对应实验设计。

重点:表达式右边的式子并不符合“交换律”,即式子右边的变量顺序很重要。变量顺序在以下两种情况下会造成影响:(1)因子不止一个,并且是非平衡设计;(2) 存在协变量。例如,对于双因素方差分析,若不同处理方式中的观测数不同, 那么模型y ~ A*B与模型y ~ B*A的结果不同。此外,以表达式y~A+B+A:B为例,R会默认这样理解它(序贯型):(1)A对y的影响;(2)控制A时,B对y的影响;(3)控制A和B的主效应时,A与B的交互效应。(对于任意表达式而言,有三种理解方式,分别是序贯型、分层型、边界型。其中R默认调用序贯型,而有些统计软件(如SPSS)默认调用边界型。也不用担心必须应用其它两种理解方式的情形,R中提供了很多函数包来应对(如包car中的函数Anova())。)

2、单因素方差分析

从最简单的情况出发,单因素方差分析中,你感兴趣的是比较分类因子定义的两个或多个组别中的因变量均值。以 multcomp包中的cholesterol数据集为例(实验设计为:50 个患者均接受降低胆固醇药物治疗(trt)五种疗法中的一种疗法。其中三种治疗条件使用药物 3 相同,分别是20mg一天一次(1time)、10mg一天两次(2times)和5mg一天四次(4times)。剩下的两种方式(drugD和drugE)代表候选药物。哪种药物疗法降低胆固醇(响应变量)最多呢?)。利用单因素方差分析对不同疗法做F检验,结果非常显著(p<0.0001)的说明五种疗法的效果不同。(利用包gplot中的函数plotmeans()绘制了组均值图形,图中也可以清楚的看到它们之间的差异。代码见文末找胖雨小姐姐。)

图1:单因素方差分析,五种疗法的均值差异

上面的分析之后,你肯定会对究竟哪种疗法与其他疗法不同感兴趣。多重比较可以解决这个问题。函数TukeyHSD()可以回答你的疑问。利用函数plot()将多重比较结果绘制为图形,图形中置信区间包含0的疗法说明差异不显著(p>0.5)。

图2:多重比较示例1

包multcomp中的函数glht()函数提供了多重均值比较更为全面的方法,下面是图形化的分析结果。代码中,函数cld()中的参数level设置了使用的显著水平(0.05,即本例中的95%的置信区间)。有相同字母的组(用箱线图表示)说明均值差异不显著。(做完上面这些工作并不意味着分析结束了,必须要检查数据是否满足统计检验的假设条件的程度,单因素方差分析中,我们假设因变量服从正态分布,各组方差相等。可以使用Q-Q图(函数qqPlot())来检验正态性假设,用函数bartlett.test()检查方差齐性。后台代码已提供示例。)

图3:多重比较示例2

3、单因素协方差分析

单因素协方差分析(ANCOVA)扩展了单因素方差分析(ANOVA),包含一个或多个定量的协变量。下面的例子来自于包multcomp中的litter数据集。怀孕小鼠被分为四个小组,每个小组接受不同剂量(0、5、50或500)的药物处理。产下幼崽的体重均值为因变量,怀孕时间为协变量。ANCOVA的F检验表明:(1)怀孕时间与幼崽出生体重相关;(2)控制怀孕时间,药物剂量与出生体重相关。控制怀孕时间,确实发现每种药物剂量下幼崽出生体重均值不同。(由于使用了协变量,你可能想要获取调整的组均值,即去除协变量效应后的组均值。可使用 effects包中的effects()函数来计算调整的均值。)

图4:单因素协方差分析示例

与单因素方差分析类似,剂量的F检验虽然表明了不同的处理方式幼崽的体重均 值不同,但无法告知我们哪种处理方式与其他方式不同。用multcomp包来对所有均值进行成对比较或者对你感兴趣的对照进行比较分析(代码中提供了未用药与用药条件之间的比较)。单因素协方差分析也需要正态性和方差齐性假设,检查方法与单因素方差分析中一样,此外,单因素协方差分析还需要假定回归斜率相同,示例如下。

图5:单因素协方差分析的斜率相同检查

图5中,可以看到交互效应不显著,支持了斜率相等的假设。若假设不成立,可以尝试变换协变量或 因变量,或使用能对每个斜率独立解释的模型,或使用不需要假设回归斜率同质性的非参数 ANCOVA方法。包sm中的函数sm.ancova()为后者提供了一个例子。还可以用包HH中的函数ancova()对单因素协方差分析的结果进行可视化。从图6中可以看出,用怀孕时间来预测出生体重的回归线相互平行,只是截距项不同。随着怀孕时间增加,幼崽出生体重也会增加。另外,还可以看到0剂量组截距项最大,5剂量组截距项最小。(不妨尝试一下将代码中ancova(weight~gesttime+dose)改为ancova(weight~gesttime*dose),图片出现了什么变化呢?)

图6:单因素协方差分析可视化

4、双因素方差分析

讨论完单因素方差分析,我们来看一下更复杂的情形:双因素方差分析和重复测量方差分析。在双因素方差分析中,受试者被分配到两因子的交叉类别组中。以基础安装中的 ToothGrowth数据集为例,随机分配60只豚鼠,分别采用两种喂食方法(橙汁或维生素C),各喂食方法中抗坏血酸含量有三种水平(0.5mg、1mg或2mg),每种处理方式组合都被分配10只豚鼠。其中,牙齿长度为因变量。分析结果可以采用函数interaction.plot()、包gplots中的函数plotmeans()或者包HH中的函数interaction2wt()来可视化,下面展示一下函数interaction2wt()的例子。(三种方法中,更推荐包HH中的函数interaction2wt(),因为它能展示任意复杂度设计(双因素方差分析、三因素方差分析等)的主效应(箱线图)和交互效应。代码中提供了三种方法的示例,大家可以自己选择偏好的方式。)

图7:函数interaction2wt()示例

5、重复测量方差分析

而所谓重复测量方差分析,即受试者被测量不止一次。示例来源于基础安装包中的CO2数据集,包含了北方和南方牧草类植物Echinochloa crus-galli的寒冷容忍度研究结果,在某浓度二氧化碳的环境中,对寒带植物与非寒带植物的光合作用率进行了比较。因变量是二氧化碳吸收量(uptake),自变量是植物类型Type和七种水平的二氧化碳浓度(conc)。另外,Type是组间因子,conc是组内因子。Type已经被存储为一个因子变量,还需要将 conc转换为因子变量。方差分析表表明在0.01的水平下,主效应类型和浓度以及交叉效应类型×浓度都非常显著,图8中通过函数boxplot()展示了交互效应。代码找文末客服小姐姐

图8:函数boxplot()的结果可视化

6、多元方差分析

前面我们讨论都是单个因变量的情形,当因变量(结果变量)不止一个时,可用多元方差分析(MANOVA)对它们同时进行分析。以MASS包中的UScereal数据集为例,研究谷物中的卡路里、脂肪和糖含量是否会因为储存架位置的不同而发生变化。卡路里、脂肪和糖含量是因变量,货架是三水平(1、2、3)的自变量。函数manova()能对组间差异进行多元检验。方差分析表中F值显著,说明三个组的营养成分测量值不同。函数summary.aov()可以对每一个变量做单因素方差分析。(单因素多元方差分析有两个前提假设,一个是多元正态性,一个是方差协方差矩阵同质性,可以用Q-Q图来检验假设条件。还可以使用包mvoutlier中的函数ap.plot()来检验多元离群点。方差分析及假设检验代码见后台。)

每种方差分析后的评估假设检验都是很重要的,前面的例子都通过了检查,可是现实中总会出现不符合假设条件的情况,那么可以考虑用稳健或非参数版本的MANOVA检验。稳健单因素MANOVA可通过包rrcov中的 函数Wilks.test()实现。包vegan中的函数adonis()则提供了非参数MANOVA的等同形式。代码中提供函数Wilks.test()的例子。

最后,我们来兑现教程最开始的“诺言”,给大家介绍一个用回归来做的方差分析。实际上,ANOVA和回归都是广义线性模型的特例,前面所有的设计都可以用函数lm()来分析。以单因素方差分析实例为例,即比较五种降低胆固醇药物疗法(trt)的影响。结果如下:

图9:函数lm()做方差分析

小结

本次教程内容比较多,包括了单因素ANOVA、单因素ANCOVA、 双因素ANOVA、重复测量ANOVA和多因素MANOVA。除了这些基本分析,还介绍了模型的假设检验,以及应用多重比较过程来进行综合检验的方法,对各种结果可视化方法也进行了探索。下一次的重点将是回归分析。还在坚持学习的各位,要加油哦~

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多