r语言 list添加_R语言执行单因素协方差分析

2023-05-16

945a9af8614d8c3badc25b6046442c0c.gif 单因素协方差分析(ANCOVA)在R中实现 36f43ea64f42ba67989ce1972f6b92df.gif

前文简介了单因素方差分析(单因素ANOVA)在R语言中的实现方法,本篇继续简介单因素协方差分析(ANCOVA)。当方差分析中存在协变量时,即可称为协方差分析。其中单因素协方差分析是最常见的,在单因素方差分析中引入了协变量。

何谓协变量,举例来说。对怀孕母鼠喂食某种药物,并观察药物处理组和对照组相比,新生小鼠体重是否具有区别。由于各母鼠的怀孕时间有所差别,而这个怀孕时间可能会对小鼠体重产生影响而不可忽略,就可视作协变量处理。再举一例,重测序分析中统计基因的突变频率,由于各基因长度是不一样的,即使碱基是随机突变的,更长的基因也可能会出现更多的突变碱基数量。此时基因的长度就是一个协变量,必须考虑在内。好了,下面接正文。

本文使用的作图数据的网盘链接(提取码z4w4):

https://pan.baidu.com/s/1J-9GsmoHuQ_CEpxeWyEQsA

数据预处理

示例数据说明

我们首先将示例数据读到R中,并从中挑选部分数据作为演示。

#读入文件
soil group  soil  
#以 shannon 指数为例,同时将分组列转换为因子变量
shannon shannon$treat str(shannon)
head(shannon)

16b0b360ef4a13600333523c903d0527.png

假设存在这么一个研究:

我们使用来源于同一环境中的土壤进行盆栽试验(土壤类型一致),并种植了同种植株(植物类型一致)。我们将盆栽(1植株/1盆栽)分为了3组,分别在土中添加了三种化学物质(a、b、c);然后等待植物到达花期后,收集每个植株的根际土,并通过16S测序,获得了植物根际细菌群落的Alpha多样性指数,意在探究不同类型的化学物质是如何影响植物根际细菌群落的。

由于各盆栽中植株到达开花期时间并非一致,无法保证所有植株均在同一天取样观察。尽管期间并未相隔很长时间(天),理论上单因素ANOVA就可以满足需求,但我们仍然想要将各盆栽中植株到达花期的时间作为协变量去考虑(如果觉得植物生长时间相隔几天的差异可能会导致其根际菌群产生较大的变异时,尽管实际上可能有些不妥,但作为示例,请忽略这点),尝试使用单因素协方差分析(ANCOVA)。

对应于上述挑选出的测试数据“shannon”:sample,试验样本名称,每一个样本即对应一个盆栽,各盆栽中土壤类型、植物类型完全相同,而且均是1植株/1盆栽;treat,在土壤中添加的三种化学物质(a、b、c),这列作为分组列,需要转换为因子变量类型,各组处理间相互独立;shannon,Alpha多样性指数中的Shannon指数,数值变量;days,各盆栽中植株的开花时间(即生长天数),这里为数值变量。

这里,植物根际菌群的Shannon指数为因变量,植物生长天数(days)为协变量,考虑使用ANCOVA,探究不同类型的化学物质处理下的植物根际细菌群落的Shannon指数是否存在显著不同。

评估检验的假设条件

ANCOVA要求数据服从正态分布,以及各组方差相等,同时还假定回归斜率相同。

正态性检验

同单因素ANOVA的方法,可使用Q-Q图来检验正态性假设。
#QQ-plot 检查数据是否符合正态分布
library(car)
qqPlot(lm(shannon~treat, data = shannon), simulate = TRUE, main = 'QQ Plot', labels = FALSE)
由图可知,我们的数据符合正态分布模型(尽管似乎有个离群点,这时候可以考虑删除这个样本后再继续,本示例演示不再将它删除,直接进入下一步分析)。

bad6516a4a2d6330bdbe786a44fd7b00.png

方差齐性检验 同单因素ANOVA的方法,可使用Bartlett检验进行方差齐性检验。
#使用 Bartlett 检验进行方差齐性检验(p 值大于 0.05 说明方差齐整)
bartlett.test(shannon~treat, data = shannon)
结果显示,我们的数据各组方差相等。 de8d632bcdf199623b9aa4b4c3c2e1c8.png

回归斜率的同质性检验

这里ANCOVA包含植物生长时间×化学物质类型的交互项,需对回归斜率的同质性进行检验,若交互效应显著,则意味着植物生长时间和植物根际菌群的Shannon指数的关系依赖于所添加的化学物质类型。
#检验回归斜率的同质性,交互效应不显著则支持斜率相等的假设(即 p 值大于 0.05 说明回归斜率相等)
summary(aov(shannon~days*treat, data = shannon))
根据aov()公式可知,这实际上是一个双因素方差分析(关于双因素ANOVA,下篇再简介),根据双因素方差分析中的交互项结果来判断回归斜率的同质性。 结果显示交互作用不显著,支持了斜率相等的假设。 如果假设不成立,可以尝试变换协变量或因变量,或使用能对每个斜率独立解释的模型,或使用无需回归斜率相等的非参数ANCOVA方法(如sm包sm.ancova())。 bf18014d05cebd85914d2d48b3f4141c.png

单因素协方差分析(ANCOVA)

单因素ANCOVA

上述检验均已通过,接下来进行单因素ANCOVA。

如果不满足上述前提假设,一是可以考虑转化数据(当然,我们需要确保转换后的数据能够被合理解释,否则将无意义),二是可以考虑使用非参数的检验方法。上述提及了一个对应单因素协方差分析的非参数替代方法,sm包sm.ancova()。

对于带协变量的项,以单因素协方差为例,aov()函数书写为aov(y~x+A)的样式,其中x为协变量,A为因子变量,注意需要将协变量写在因子前面,如上所示,协变量植物生长时间(days)在前,因子化学物质类型(treat)在后,顺序不可颠倒。

#满足假设,单因素协方差分析,详情使用?aov查看帮助
fit summary(fit)

ANCOVA结果表明:(1)植物生长时间相隔几天的差异并未导致其根际菌群产生较大的变异(p值不显著);(2)控制植物生长时间,不同类型的化学物质处理下的植物根际细菌群落的Shannon指数存在显著不同(p值显著)。

3b9d07a14375b75ee1a03ce9530cb0f1.png

对于各组均值的获得方式。

#查看各组均值及标准差
aggregate(shannon$shannon, by = list(shannon$treat), FUN = mean)
aggregate(shannon$shannon, by = list(shannon$treat), FUN = sd)
#由于使用了协变量,若想获取去除协变量效应后的组均值(调整的组均值)
library(effects)
effect('treat', fit)
ed166321c6df9a9f7a83d89c8138fa82.png

因变量、协变量和因子之间的关系

我们可以使用HH包ancova()函数,绘制因变量、协变量和因子之间的关系图查看。 ancova()函数既可根据输入的公式执行对应的方差分析,并在屏幕输出方差分析结果; 同时又可生成一张关系图,由两部分组成,左侧面板取决于因子的水平groups,右侧面板是所有groups的叠加。
#HH 包 ancova() 可绘制因变量、协变量和因子之间的关系图
#详情使用 ?ancova 查看帮助
library(HH)
ancova(shannon~days+treat, data = shannon)
ancova(shannon~days*treat, data = shannon)

如上示例,通过“ancova(shannon~days+treat, data = shannon)”,我们又执行了一次ANCOVA,结果屏幕输出,和上文结果一致。同时通过关系图可知,3条回归线相互平行,只是截距项不同,b组截距项最大,c组截距项最小;回归线拟合效果并不理想,也对应了我们先前的结论,在“数天”这么一个短期时间内,植物根际菌群的Shannon指数没有发生剧烈的改变。

c5652d02c1c421ab2ebecd482d8e6fdf.png

473ec61aaba47f6be4488fcfe4002c74.png

我们还通过“ancova(shannon~days*treat, data = shannon)”,执行了一次双因素ANOVA。不过在这里我们并不是想做个双因素ANOVA分析,而是在更改了函数公式后,意在可视化允许斜率和截距项依据组别而发生改变,从而体现那些违背回归斜率同质性的实例。(上文已知,回归斜率的同质性检验是通过双因素ANOVA中的交互作用判断的,本示例中的回归斜率的同质性检验已通过,大家可以尝试自行寻找一例回归斜率不相等的数据,然后使用ancova()作图查看其与回归斜率相等的数据的差异)

50698eabd36e7aeec893bb4f9db998c0.png

69e8b22137a6c1c0937a2fe868f4a740.png

85a562fc55dd1e649a2968a0fd5057e2.png

友情链接

R语言执行单因素方差分析及多重比较

R语言执行两组间差异分析Wilcox秩和检验

R语言执行两组间差异分析T检验

叶绿体基因注释工具PGA

叶绿体/线粒体在线注释网站GeSeq

线粒体在线注释网站MITOS

R语言绘制蝴蝶(柱状)图

R语言绘制双向柱状图

R语言绘制分组柱状图

R语言绘制堆叠柱状图

R语言绘制饼图(扇形图)

R语言绘制花瓣图

9ed736717ecc64d323418a8dc945d824.gif

457582a2a3e736fa63f294d9c4d4e1cb.png

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

r语言 list添加_R语言执行单因素协方差分析 的相关文章

  • Android 数组列表如何使用

    所以我有一个标记列表 我需要弄清楚如何处理它们 我已经搜索了几个小时 但没有明确说明如何使用这些信息或如何从列表中获取信息 请解释或分解我的代码并告诉我它到底是如何工作的 这样我就可以在地图上设置标记 这就是我将标记添加到列表中的方法 现在
  • 列表清除是否删除先前包含的对象

    想象我有 List
  • 移动列表中特定元素的简单函数

    我是 Haskell 的新手 我正在尝试弄清楚如何创建一个函数 shift Eq a gt a gt a gt Int gt a shift x h t z 输入 一个通用列表和一个相同类型的元素 x 前提条件 元素x存在于列表中 Outp
  • List.Except 不起作用

    我尝试减去 2 个列表 如下代码所示 assignUsers已获得 3 条记录assignedUsers有 2 行 后Except方法我仍然得到 3 行 尽管我应该得到 1 条记录 因为 2 行assignedUsers类似于assignU
  • 如何在 Flutter 中创建网络图像列表

    我使用 Carousel Pro 包在屏幕上实现轮播 在这个 Carousel 类中它需要一个图像列表 Carousel 类的语法是 Carousel images NetworkImage https cdn images 1 mediu
  • 如何在 Haskell 中获得列表的中间位置?

    我刚刚开始使用 Haskel 学习函数式编程 我正在慢慢度过Erik Meijer 在 Channel 9 的讲座 http channel9 msdn com shows Going Deep Lecture Series Erik Me
  • 如何访问对列表中对的每个元素?

    我有一个名为 对 的列表 pairs a 1 b 2 c 3 我可以通过以下方式访问元素 for x in pairs print x 其输出如下 a 1 b 2 c 3 但我想访问每对中的每个元素 就像在 c 中一样 如果我们使用pair
  • python 和回文

    我最近写了一个循环的方法 usr share dict words并使用我的返回回文列表ispalindrome x 方法 这是一些代码 有什么问题吗 它只会停止 10 分钟 然后返回文件中所有单词的列表 def reverse a ret
  • 在 Django 中为多个查询编写视图的最佳方法?

    这是一个简单的问题 我已经组织了我的模型 以便提供给页面的大多数对象都属于一种类型 项目 该模型包含各种属性 可以帮助我以不同的方式提供服务 我有文章和视频 它们由模型上的 类型 字段确定 类型 文章 等 我有一个列表视图 它显示项目模型中
  • 如何从字典列表中查找键的值?

    如何从字典列表中获取给定键的值 mylist powerpoint color blue client name Sport Parents Regrouped sort order ascending chart layout 1 cha
  • 如何在python中合并具有相同键的嵌套字典

    我有一个这样的数据结构 SNAPSHOT SnapshotVersion 304 SNAPSHOT SnapshotCreationDate 2015 06 21 17 33 41 CafeData CafeVersion 2807 Caf
  • 有没有办法查看 OSGi 应用程序中注册的服务?

    我有一个运行 Equinox 的 OSGi 应用程序 我想查看该应用程序提供的服务 我怎样才能做到这一点 从 gogo shell 类型 inspect cap service 这将显示所有捆绑包注册的所有服务 如果您想显示特定捆绑包的服务
  • Python - 如何将列表保存为图像?

    我生成一个常规列表 是否可以将此列表保存为 JPEG 图像或 PNG 或其他格式 以便我可以打开图像并查看它 我目前正在尝试使用 python 成像库 PIL 来解决这个问题 这是可能的解决方案之一 使用以下方法创建一个空图像对象 Imag
  • 在Python中创建N*N*N列表时出现问题

    我正在尝试创建一个 3 维 NNPython 中的 N 列表 如下所示 n 3 l 0 n n n 不幸的是 这似乎没有正确地 克隆 列表 正如我所想的那样 gt gt gt l 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
  • 列表到优先队列

    我有一个 C 大学编程项目 分为两个部分 在开始第二部分时应该使用priority queues hash tables and BST s 我 至少 在优先级队列方面遇到了麻烦 因为它迫使我自己重做第一部分中已经实现的许多代码 该项目是关
  • 如何在 LINQ 中执行 String.Replace?

    这是我正在尝试做的事情 但没有成功 我想打电话from x in list1 and join y in list2 where regex Match x Value Success 完成这些步骤后我需要打电话String Replace
  • 以特定方式填充列表

    我需要填充一个包含 5 个位置的列表 new list 我收到 2 个列表 并且有一个默认值来填充新列表 现在开始解决问题 好的方式是 我从列表中接收 2 个值 从列表中接收 2 个值并添加默认值 A1 A2 DEFAULT B1 B2 但
  • Python:两个列表之间的成对比较:列表 a >= 列表 b?

    如果我想检查列表中的所有元素 a 1 2 3 6 大于或等于另一个列表中对应的元素 b 0 2 3 5 如果 a i gt b i 对于所有i的 则返回 true 否则返回 false 这有逻辑功能吗 比如a gt b 谢谢 你可以这样做
  • Python-使用元组作为列表索引[重复]

    这个问题在这里已经有答案了 我有一个元组列表 tuples list 1 0 2 3 3 2 2 0 我想访问二维数组的元素a例如 使用其中一些元组 for i in range 3 print a tuples list i 应该输出的值
  • 在python中组合2个列表

    我有 2 个列表 每个列表大小相同 并且有兴趣将这两个列表组合起来并将其写入文件中 alist 1 2 3 5 blist 2 3 4 5 结果列表应该是这样的 1 2 2 3 3 4 5 5 之后我希望将其写入文件 我怎样才能做到这一点

随机推荐