R语言统计分析——方差分析之ANOVA模型拟合

ops/2024/11/9 16:43:23/

参考资料:R语言实战【第2版】

1、aov()函数

        aov()函数的语法为aov(formula,data=dataframe),下表中列举了表达式中可以使用的特殊符号。其中,y是因变量,字母A、B、C代表因子。如下:

符号用法
~分隔符,左边为响应变量,右边为解释变量。例如,用A、B和C预测y,表达式为y~A+B+C
:表示变量的交互项。例如,用A、B和A与B的交互项来预测y,表达式为y~A+B+A:B
*表示所有可能的交互项。表达式y~A*B*C等同于y~A+B+C+A:B+A:C+B:C+A:B:C
^表示交互项达到某个次数。表达式y~(A+B+C)^2等同于y~A+B+C+A:B+A:C+B:C
.表示包含除因变量晚的所有变量。例如,若一个数据框包含变量y、A、B、C,表达式y~.等同于y~A+B+C

        下表中还列举了常见的研究设计表达式,表中的小写字母表示定量变量,大写字母表示组别因子,Subject是对被试者独有的标识变量。

设计表达式
单因素ANOVAy~A
含单个协变量的单因素ANOVAy~x+A
双因素ANOVA(含交互项)y~A*B
含两个协变量的双因素ANOVAy~x1+x2+A*B
随机化区组y~B+A(其中B是区组因子)
单因素组内ANOVAy~A+Error(Subject/A)
含单个组内因子(W)和单个组间因子(B)的重复测量ANOVAy~B*W+Error(Subject/W)

2、aov()函数表达式中各项的顺序

        表达式中效应的顺序在两种情况下会造成影响:①因子不止一个,且是非平衡设计;②存在协变量。出现任意一种情况时,等式右边的变量都与其他每个变量相关。此时,我们无法清晰地划分它们对因变量的影响。例如,对于双因素方差分析,若不同处理方式中的观测数不同,那么模型y~A*B与模型y~B*A的结果不同。

        R语言模型类型Ⅰ方法计算ANOVA效应。第一个模型可以这样写:y~A+B+A:B。R语言中ANOVA表的结果将评价:

        ①A对y的影响;

        ②控制A时,B对y的影响;

        ③控制A和B的主效应时,A与B的交互效应。

        当自变量与其他自变量或协变量相关时,没有明确的方法可以评价自变量对因变量的贡献。例如,含因子A、B和因变量y的双因素不平衡因子设计,有三种效应:A的主效应、B的主效应、A和B的交互效应。假如我们正式用下面的表达式对数据进行建模:

        y~A+B+A:B

        有三种类型的方法可以分解等式右边各效应对y所解释的方差。

(1)类型Ⅰ(序贯型)

        效应根据表达式中先出现的效应做调整。如上式中:A不做调整,B根据A做调整,A:B交互项根据A和B调整。

(2)类型Ⅱ(分层型)

        效应根据同水平或低水平的效应做调整。A根据B调整,B依据A调整,A:B交互项同时根据A和B调整。

(3)类型Ⅲ(边界型)

        每个效应根据模型其他各效应做相应调整。A根据B和A:B做调整,A:B交互项根据A和B调整。

        R语言默认调用类型Ⅰ方法,而SAS和SPSS默认调用类型Ⅲ方法

        样本大小越不平衡,效应项的顺序对结果的影响越大。一般来说,越基础性的效应越需要放到表达式前面。具体来讲:首先是协变量,然后是主效应,接着是双因素的交互项,再是三因素的交互项,以此类推。对于主效应,越基础性的变量越应放在表达式前面,比如性别因子要放在处理方式的前面。有一个基本的准则:若研究设计不是正交(也就是说,因子和/或协变量相关),一定要谨慎设置效应的顺序

        注意:car包中的Anova()函数(不要与标准anova()函数混淆)提供了使用类型Ⅱ或类型Ⅲ方法的选项,而aov()函数使用的是类型Ⅰ方法。若想使结果与其他软件(如SAS和SPSS)提供的结果一致,可以使用car包中的Anova()函数。


http://www.ppmy.cn/ops/102860.html

相关文章

合并两个顺序表

题目:将两个顺序表合并成一个新的有序表,并由函数返回结果顺序表。 思想:假设两个表递增有序,将顺序表A和B左对齐,将两个表中最左边的两个元素进行比较,将较小的那个放入表C中,然后将A和B两个表…

patch-package|npm补丁修复

可以用来修复依赖代码缺陷,或者按照自己需求做一点小东西 做小改动可以,大改动最好还是 fork 仓库发包 1.开发环境安装 npm i patch-package --save-dev2.手动去node_module 中修改(我要修改fastify的代码) 3.修改完成后&…

自动化数据汇总:使用Python从多个数据源汇总数据

目录 引言 一、理论基础 1.1 数据源介绍 1.2 数据处理流程 1.3 常用库介绍 二、实践操作 2.1 数据读取 2.1.1 从CSV文件读取数据 2.1.2 从Excel文件读取数据 2.1.3 从数据库读取数据 2.2 数据处理 2.2.1 数据合并 2.3 数据汇总 2.4 数据存储 2.4.1 存储到CSV文件…

15. Set接口有哪些常见实现类?它们之间的区别是什么?

Set接口是Java集合框架中的一部分,用于存储不重复的元素。Set接口有多个常见的实现类,它们在内部结构、性能和特性上有所不同。以下是一些常见的Set实现类及其之间的区别: 1. HashSet 内部实现: HashSet是基于HashMap实现的,底层使…

js发送邮件:如何在Node.js实现邮件发送?

js发送邮件如何与服务器配置?如何用nodejs发送邮件? 无论是用于用户注册确认、密码重置还是简单的通知,js发送邮件都是不可或缺的一环。AokSend将详细介绍如何在Node.js环境中实现这一功能,确保你能够轻松掌握js发送邮件的技巧。…

SSRF以及CSRF

ssrf 服务端请求伪造:由于服务端提供了从其他服务器应用获取数据的功能,但又没有对目标地址做严格过滤与限制,导致攻击者可以传入任意的地址来让后端服务器对其发起请求,并返回对该目标地址请求的数据 数据流:攻击者…

零基础学习Python(七)

1. 字符串常用方法 lower()、upper():转换为小写字符串、大写字符串 split(str):按照指定字符串str进行分割,结果为列表: email "123qq.com" print(email.split("")) [123, qq.com] count(str)&#xf…