R语言——单因素方差分析笔记

2024-02-01 01:40

本文主要是介绍R语言——单因素方差分析笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这学期有一门选修应用统计软件。课上理论讲得不清不楚,编程根本练不着,老师布置的作业就是将他发的代码运行一下写个报告,简直就是机械化的浪费时间的操作。为了不白学这门课,在此稍加整理课上的笔记,供自己以后回顾复习。

一、aov函数

(一)样本服从正态分布

1.代码示例

n1=150;  ##n1=50
n2=150;  ##n2=50
n3=150;  ##n3=50
u1=0.5;
u2=0;
u3=0;
csd=1;
x1=rnorm(n1,u1,csd);
x2=rnorm(n2,u2,csd);
x3=rnorm(n3,u3,csd);
mouse<-data.frame(
X=c(x1,x2,x3),
A=factor(c(rep(1,n1),rep(2,n2), rep(3,n3))))
mouse.aov<-aov(X~A,data=mouse)
source("anova.tab.R"); anova.tab(mouse.aov)

2.部分代码解释

(1)aov()函数提供方差分析表计算,使用方法:aov(formula,data=NULL,projections=FALSE,qr=TRUE,contrasts=NULL,...),结合在线帮助理解。

(2)factor:转换为因子类型,因子在整个计算过程中不作为数值,而是一个”符号”。

3.结果分析

 

 图①是样本量取50的运行结果,P值较大,接受原假设,即三类样本无显著差异;图②是样本量取150的运行结果,P值较小,拒绝原假设,即三类样本存在显著差异。可见样本量越大,检验结果越准确。

(二)样本误差服从T分布(T分布尾部比正态分布重)

1.代码示例
n1=150;
n2=150;
n3=150;
u1=0.5;
u2=0;
u3=0;
df=3  ##自由度为3
x1=u1+rt(n1,df);  ##误差生成t分布随机数
x2=u2+rt(n2,df);
x3=u3+rt(n3,df);
mouse<-data.frame(
X=c(x1,x2,x3),
A=factor(c(rep(1,n1),rep(2,n2), rep(3,n3))))
mouse.aov<-aov(X~A, data=mouse)
source("anova.tab.R"); anova.tab(mouse.aov)

2.结果分析

 在样本量较大的情况下,所得P值较小,可拒绝原假设。故当样本量较大,误差的分布对于检验的影响较小,而样本均值的差异对于检验影响较大。

二、KW检验

KW检验的优点:对于误差分布无限制,对误差分布无正态性假设。

(一)样本服从正态分布

1.代码示例

n1=50;
n2=50;
n3=50;
u1=0.5;
u2=0;
u3=0;
csd=1;
x1=rnorm(n1,u1,csd);
x2=rnorm(n2,u2,csd);
x3=rnorm(n3,u3,csd);
food<-data.frame(
x=c(x1,x2,x3),
g=factor(rep(1:3, c(n1,n2,n3))))
kruskal.test(x~g, data=food)

2.结果分析

样本量为50时,就能得到在显著性水平取0.05时拒绝原假设的结果。可见KW检验可能比aov函数具有更好的检验效果。

(二)样本误差服从T分布

1.代码示例

n1=200;
n2=200;
n3=200;
u1=0.5;
u2=0;
u3=0;
df=3
x1=u1+rt(n1,df);
x2=u2+rt(n2,df);
x3=u3+rt(n3,df);
food<-data.frame(
x=c(x1,x2,x3),
g=factor(rep(1:3, c(n1,n2,n3))))
kruskal.test(x~g, data=food)

2.代码解释

kruskal.test(formula,data,subset,na.action,...)是K-W秩和检验的函数

3.结果分析

 

P值很小,故拒绝原假设,即三组样本均值存在显著差异。

三、pairwise检验

(一)样本服从正态分布

1.代码示例

n1=100;
n2=100;
n3=100;
u1=0.5;
u2=0;
u3=0;
csd=1;
x1=rnorm(n1,u1,csd);
x2=rnorm(n2,u2,csd);
x3=rnorm(n3,u3,csd);
X=c(x1,x2,x3)
A=factor(c(rep(1,n1),rep(2,n2), rep(3,n3)))
mu<-c(mean(X[A==1]), mean(X[A==2]), mean(X[A==3])); mu
pairwise.t.test(X, A, p.adjust.method = "none")
pairwise.t.test(X, A, p.adjust.method = "holm")
pairwise.t.test(X, A, p.adjust.method = "bonferroni")

2.代码解释

pairwise.t.test()函数用于均值的多重比较,其使用方法如下:pairwise.t.test(x,g,p.adjust.method=p.adjust.methods,pool.sd=TRUE,...)

其中x是响应向量,g是因子向量,p.adjust.method是P值的调整方法。其中,调整方法由p.adjust()给出,详见p.adjust()函数的在线帮助。若p.adjust.method = "none",表示不做任何调整;缺省值按“holm”作调整。

3.结果分析

首先由均值的估计可见,μ1与μ2、μ3存在较大差异。利用三种pairwise的检验方法,均得到μ1与μ2、μ3的检验P值低于显著性水平0.05,故μ1与μ2、μ3存在显著差异;而μ2与μ3之间检验P值较大,故接受原假设,即μ2与μ3之间无显著差异。

(二)样本误差服从自由度为3的T分布

1.代码示例

n1=200;
n2=200;
n3=200;
u1=0.5;
u2=0;
u3=0;
df=3
x1=u1+rt(n1,df);
x2=u2+rt(n2,df);
x3=u3+rt(n3,df);
X=c(x1,x2,x3)
A=factor(c(rep(1,n1),rep(2,n2), rep(3,n3)))
mu<-c(mean(X[A==1]), mean(X[A==2]), mean(X[A==3])); mu
pairwise.t.test(X, A, p.adjust.method = "none")
pairwise.t.test(X, A, p.adjust.method = "holm")
pairwise.t.test(X, A, p.adjust.method = "bonferroni")

2.结果分析

 分析结果同上。

PS:有时运行结果会出现错误,得到不准确的检验结果。多运行几次,能够避免取错误的检验结果。

四、Bartlett检验

1.代码示例

n1=50;
n2=50;
n3=50;
n4=50;
lamp<-data.frame(
X=c(rnorm(n1,0,1),rnorm(n2,0,2),rnorm(n3,0,2),rnorm(n4,0,2)),
A=factor(c(rep(1,n1),rep(2,n2), rep(3,n3), rep(4,n4))))
bartlett.test(X~A, data=lamp)
bartlett.test(lamp$X, lamp$A)  ##bartlett.test函数的另一种使用方法 

2.代码解释

bartlett.test()函数用于方差齐性检验,其使用格式为bartlett.test(x,g,..),其中x是由数据构成的向量或列表,g是由因子构成的向量,x是列表时,此项无效;或使用另一种格式bartlett.test(formula,data,subset,na.action,...),可借助在线帮助理解各参数含义。

3.结果分析

 所得P值很小,故拒绝原假设,即样本间的方差存在显著差异。符合样本的设定。

五、friedman检验

friedman检验用于多个样本的比较,如果它们的总体不能满足正态性和方差齐性的要求。firedman检验原假设为:各方法处理效果无显著差异。

1.代码示例

##各变量之间有相关性##
n=1000
p=3;
alpha=0.5;
sig=1;
##均值
mu=c(0.5,rep(0,p-1));
##协方差矩阵
Sm=sig*toeplitz(c(1,rep(alpha, p-1)));
Sm
#Sm=sig*toeplitz(alpha^(c(0:(p-1))));
#Sm
ev<-eigen(Sm); 
lam=ev$values;
vec=ev$vectors;
Sr=vec%*%sqrt(diag(lam))%*%t(vec)
#Sm-Sr%*%Sr;
x=t(t(matrix(rnorm(n*p),ncol=p)%*%Sr)+mu);
apply(x,2,mean)
var(x)
friedman.test(x)

2.代码解释

friedman检验的函数为friedman.test(y,groups,blocks,...),或者friedman.test(formula,data,subset,na.action,...)

 3.结果分析

 由均值的估计得出,μ1与μ2、μ3存在较大差异。协方差阵显示出不同样本之间存在较大的相关性。Friedman检验的P值非常小,故拒绝原假设,即样本之间存在显著差异。

这篇关于R语言——单因素方差分析笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/665701

相关文章

C语言中的数据类型强制转换

《C语言中的数据类型强制转换》:本文主要介绍C语言中的数据类型强制转换方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C语言数据类型强制转换自动转换强制转换类型总结C语言数据类型强制转换强制类型转换:是通过类型转换运算来实现的,主要的数据类型转换分为自动转换

利用Go语言开发文件操作工具轻松处理所有文件

《利用Go语言开发文件操作工具轻松处理所有文件》在后端开发中,文件操作是一个非常常见但又容易出错的场景,本文小编要向大家介绍一个强大的Go语言文件操作工具库,它能帮你轻松处理各种文件操作场景... 目录为什么需要这个工具?核心功能详解1. 文件/目录存javascript在性检查2. 批量创建目录3. 文件

C语言实现两个变量值交换的三种方式

《C语言实现两个变量值交换的三种方式》两个变量值的交换是编程中最常见的问题之一,以下将介绍三种变量的交换方式,其中第一种方式是最常用也是最实用的,后两种方式一般只在特殊限制下使用,需要的朋友可以参考下... 目录1.使用临时变量(推荐)2.相加和相减的方式(值较大时可能丢失数据)3.按位异或运算1.使用临时

使用C语言实现交换整数的奇数位和偶数位

《使用C语言实现交换整数的奇数位和偶数位》在C语言中,要交换一个整数的二进制位中的奇数位和偶数位,重点需要理解位操作,当我们谈论二进制位的奇数位和偶数位时,我们是指从右到左数的位置,本文给大家介绍了使... 目录一、问题描述二、解决思路三、函数实现四、宏实现五、总结一、问题描述使用C语言代码实现:将一个整

C语言字符函数和字符串函数示例详解

《C语言字符函数和字符串函数示例详解》本文详细介绍了C语言中字符分类函数、字符转换函数及字符串操作函数的使用方法,并通过示例代码展示了如何实现这些功能,通过这些内容,读者可以深入理解并掌握C语言中的字... 目录一、字符分类函数二、字符转换函数三、strlen的使用和模拟实现3.1strlen函数3.2st

Go语言中最便捷的http请求包resty的使用详解

《Go语言中最便捷的http请求包resty的使用详解》go语言虽然自身就有net/http包,但是说实话用起来没那么好用,resty包是go语言中一个非常受欢迎的http请求处理包,下面我们一起来学... 目录安装一、一个简单的get二、带查询参数三、设置请求头、body四、设置表单数据五、处理响应六、超

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

基于Python实现多语言朗读与单词选择测验

《基于Python实现多语言朗读与单词选择测验》在数字化教育日益普及的今天,开发一款能够支持多语言朗读和单词选择测验的程序,对于语言学习者来说无疑是一个巨大的福音,下面我们就来用Python实现一个这... 目录一、项目概述二、环境准备三、实现朗读功能四、实现单词选择测验五、创建图形用户界面六、运行程序七、

使用Go语言开发一个命令行文件管理工具

《使用Go语言开发一个命令行文件管理工具》这篇文章主要为大家详细介绍了如何使用Go语言开发一款命令行文件管理工具,支持批量重命名,删除,创建,移动文件,需要的小伙伴可以了解下... 目录一、工具功能一览二、核心代码解析1. 主程序结构2. 批量重命名3. 批量删除4. 创建文件/目录5. 批量移动三、如何安

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本