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

相关文章

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

透彻!驯服大型语言模型(LLMs)的五种方法,及具体方法选择思路

引言 随着时间的发展,大型语言模型不再停留在演示阶段而是逐步面向生产系统的应用,随着人们期望的不断增加,目标也发生了巨大的变化。在短短的几个月的时间里,人们对大模型的认识已经从对其zero-shot能力感到惊讶,转变为考虑改进模型质量、提高模型可用性。 「大语言模型(LLMs)其实就是利用高容量的模型架构(例如Transformer)对海量的、多种多样的数据分布进行建模得到,它包含了大量的先验

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

系统架构师考试学习笔记第三篇——架构设计高级知识(20)通信系统架构设计理论与实践

本章知识考点:         第20课时主要学习通信系统架构设计的理论和工作中的实践。根据新版考试大纲,本课时知识点会涉及案例分析题(25分),而在历年考试中,案例题对该部分内容的考查并不多,虽在综合知识选择题目中经常考查,但分值也不高。本课时内容侧重于对知识点的记忆和理解,按照以往的出题规律,通信系统架构设计基础知识点多来源于教材内的基础网络设备、网络架构和教材外最新时事热点技术。本课时知识

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

数学建模笔记—— 非线性规划

数学建模笔记—— 非线性规划 非线性规划1. 模型原理1.1 非线性规划的标准型1.2 非线性规划求解的Matlab函数 2. 典型例题3. matlab代码求解3.1 例1 一个简单示例3.2 例2 选址问题1. 第一问 线性规划2. 第二问 非线性规划 非线性规划 非线性规划是一种求解目标函数或约束条件中有一个或几个非线性函数的最优化问题的方法。运筹学的一个重要分支。2

MiniGPT-3D, 首个高效的3D点云大语言模型,仅需一张RTX3090显卡,训练一天时间,已开源

项目主页:https://tangyuan96.github.io/minigpt_3d_project_page/ 代码:https://github.com/TangYuan96/MiniGPT-3D 论文:https://arxiv.org/pdf/2405.01413 MiniGPT-3D在多个任务上取得了SoTA,被ACM MM2024接收,只拥有47.8M的可训练参数,在一张RTX

【C++学习笔记 20】C++中的智能指针

智能指针的功能 在上一篇笔记提到了在栈和堆上创建变量的区别,使用new关键字创建变量时,需要搭配delete关键字销毁变量。而智能指针的作用就是调用new分配内存时,不必自己去调用delete,甚至不用调用new。 智能指针实际上就是对原始指针的包装。 unique_ptr 最简单的智能指针,是一种作用域指针,意思是当指针超出该作用域时,会自动调用delete。它名为unique的原因是这个

如何确定 Go 语言中 HTTP 连接池的最佳参数?

确定 Go 语言中 HTTP 连接池的最佳参数可以通过以下几种方式: 一、分析应用场景和需求 并发请求量: 确定应用程序在特定时间段内可能同时发起的 HTTP 请求数量。如果并发请求量很高,需要设置较大的连接池参数以满足需求。例如,对于一个高并发的 Web 服务,可能同时有数百个请求在处理,此时需要较大的连接池大小。可以通过压力测试工具模拟高并发场景,观察系统在不同并发请求下的性能表现,从而