Two-Way ANOVA

前言

  • Two-Way ANOVA由于有两个自变量,在考虑两个变量单独对应变量影响的同时,还需要考虑交互作用
  • 当ANOVA结果显示交互作用差异显著时,需要做每个变量在另一个变量各个水平下的显著性分析,而不能做变量的主效应分析(即使ANOVA结果显示单个变量存在显著性差异)
  • 当交互作用差异不显著,而变量的差异显著时,才可以对相应的变量做主效应分析

R代码

######################################
##       Two-Way Anova             ##
####################################

library(psych)
library(car)
library(emmeans)

#Environment Clean
rm(list = ls())

#Import data
Input <- ("
Diet    Country  Weight_change
  A       USA      0.120
 A       USA      0.125
 A       USA      0.112
 A       UK       0.052
 A       UK       0.055
 A       UK       0.044
 A       NZ       0.080
 A       NZ       0.090
A       NZ       0.075
 B       USA      0.096
 B       USA      0.100
 B       USA      0.089
 B       UK       0.025
 B       UK       0.029
 B       UK       0.019
 B       NZ       0.055
 B       NZ       0.065
 B       NZ       0.050
 C       USA      0.149
 C       USA      0.150
 C       USA      0.142
 C       UK       0.077
C       UK       0.080
 C       UK       0.066
 C       NZ       0.055
 C       NZ       0.065
 C       NZ       0.050
 C       NZ       0.054

")

Data <- read.table(textConnection(Input),header=TRUE)

#Remove unnecessary objects
rm(Input)

#Check the data frame
headTail(Data)   #from psych package
str(Data)
summary(Data)

tapply(Data[[3]],Data$Country ,mean) #看均值

#############################################
#运行结果
> headTail(Data)  #from psych package
    Diet Country Weight_change
1      A     USA          0.12
2      A     USA          0.12
3      A     USA          0.11
4      A      UK          0.05
... <NA>    <NA>           ...
25     C      NZ          0.06
26     C      NZ          0.06
27     C      NZ          0.05
28     C      NZ          0.05
> str(Data)
'data.frame':   28 obs. of  3 variables:
 $ Diet         : chr  "A" "A" "A" "A" ...
 $ Country      : chr  "USA" "USA" "USA" "UK" ...
 $ Weight_change: num  0.12 0.125 0.112 0.052 0.055 0.044 0.08 0.09 0.075 0.096 ...
> summary(Data)
     Diet             Country          Weight_change    
 Length:28          Length:28          Min.   :0.01900  
 Class :character   Class :character   1st Qu.:0.05350  
 Mode  :character   Mode  :character   Median :0.07050  
                                       Mean   :0.07746  
                                       3rd Qu.:0.09700  
                                       Max.   :0.15000  
> tapply(Data[[3]],Data$Country ,mean)
        NZ         UK        USA 
0.06390000 0.04966667 0.12033333 
#################################################

#判断是否存在交互,运行结果见图1
interaction.plot(x.factor = Data$Country,
                 trace.factor = Data$Diet,
                 response = Data$Weight_change,
                 fun = mean,
                 type="b",
                 col=c("black","red","green"),  # Colors for levels of trace var.
                 pch=c(19, 17, 15),             # Symbols for levels of trace var.
                 fixed=TRUE,                    # Order by factor order in data
                 leg.bty = "o")

#Specify the linear model and conduct an analysis of variance 
model <- lm(Weight_change ~ Country + Diet + Country:Diet,
            data = Data)

Anova(model, type = "II") #from car package

#################################################
#运行结果
Anova Table (Type II tests)

Response: Weight_change
                Sum Sq Df F value    Pr(>F)    
Country      0.0256761  2 318.715 2.426e-15 ***
Diet         0.0051534  2  63.969 3.634e-09 ***
Country:Diet 0.0040162  4  24.926 2.477e-07 ***
Residuals    0.0007653 19                      
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
##############################################

#Post-hoc testing with emmeans

#Main effects
#此例中交互的p值小于0.05,不应该做main effects,此处只是展示代码
em.resul1<-emmeans(model,
           ~ Diet, contr="tukey"); em.resul1

plot(em.resul1, comparisons = TRUE)


em.resul2<-emmeans(model,
                   ~ Country, contr="tukey"); em.resul2

plot(em.resul2, comparisons = TRUE)

#############################################
#运行结果,可视化结果见图2
> #Post-hoc testing with emmeans
> #Main effects
> em.resul1<-emmeans(model,
+            ~ Diet, contr="tukey"); em.resul1
NOTE: Results may be misleading due to involvement in interactions
$emmeans
 Diet emmean      SE df lower.CL upper.CL
 A    0.0837 0.00212 19   0.0792   0.0881
 B    0.0587 0.00212 19   0.0542   0.0631
 C    0.0924 0.00203 19   0.0882   0.0967

Results are averaged over the levels of: Country 
Confidence level used: 0.95 

$contrasts
 contrast estimate      SE df t.ratio p.value
 A - B     0.02500 0.00299 19   8.356 <.0001 
 A - C    -0.00878 0.00293 19  -2.997 0.0194 
 B - C    -0.03378 0.00293 19 -11.533 <.0001 

Results are averaged over the levels of: Country 
P value adjustment: tukey method for comparing a family of 3 estimates 
############################################

#interaction
em.resul3<-emmeans(model,
                   ~ Country|Diet, contr="tukey"); em.resul3

plot(em.resul3, comparisons = TRUE)


em.resul4<-emmeans(model,
                   ~ Diet|Country, contr="tukey"); em.resul4

plot(em.resul4, comparisons = TRUE)

##########################################
#运行结果,可视化结果见图3
> plot(em.resul2, comparisons = TRUE)
> #interaction
> em.resul3<-emmeans(model,
+                    ~ Country|Diet, contr="tukey"); em.resul3
$emmeans
Diet = A:
 Country emmean      SE df lower.CL upper.CL
 NZ      0.0817 0.00366 19   0.0740   0.0893
 UK      0.0503 0.00366 19   0.0427   0.0580
 USA     0.1190 0.00366 19   0.1113   0.1267

Diet = B:
 Country emmean      SE df lower.CL upper.CL
 NZ      0.0567 0.00366 19   0.0490   0.0643
 UK      0.0243 0.00366 19   0.0167   0.0320
 USA     0.0950 0.00366 19   0.0873   0.1027

Diet = C:
 Country emmean      SE df lower.CL upper.CL
 NZ      0.0560 0.00317 19   0.0494   0.0626
 UK      0.0743 0.00366 19   0.0667   0.0820
 USA     0.1470 0.00366 19   0.1393   0.1547

Confidence level used: 0.95 

$contrasts
Diet = A:
 contrast estimate      SE df t.ratio p.value
 NZ - UK    0.0313 0.00518 19   6.046 <.0001 
 NZ - USA  -0.0373 0.00518 19  -7.204 <.0001 
 UK - USA  -0.0687 0.00518 19 -13.251 <.0001 

Diet = B:
 contrast estimate      SE df t.ratio p.value
 NZ - UK    0.0323 0.00518 19   6.239 <.0001 
 NZ - USA  -0.0383 0.00518 19  -7.397 <.0001 
 UK - USA  -0.0707 0.00518 19 -13.637 <.0001 

Diet = C:
 contrast estimate      SE df t.ratio p.value
 NZ - UK   -0.0183 0.00485 19  -3.782 0.0034 
 NZ - USA  -0.0910 0.00485 19 -18.773 <.0001 
 UK - USA  -0.0727 0.00518 19 -14.023 <.0001 

P value adjustment: tukey method for comparing a family of 3 estimates 
##########################################################

#p值可视化,结果见图4
em.resul5<-emmeans(model,
                   ~ Diet:Country); em.resul5

pwpp(em.resul5,type = "response",by='Country')

图1:曲线有交叉说明存在交互,无交叉说明不存在交互。此例中,Country和Diet之间有交互。
图2:横坐标为均值,纵坐标为分组,蓝色条块代表各组的置信区间,红色箭头用于判断组间的显著性差异,当不同组的箭头重叠时,则不存在显著性差异。
图3
图4:横坐标为p值,纵坐标为分组。例如,country为NZ时,dietA和B、C间均存在显著性差异,且p值<0.001,而B和C无显著性差异,且p值接近1

详细版本

Two-Way ANOVA

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,264评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,549评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,389评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,616评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,461评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,351评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,776评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,414评论 0 255
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,722评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,760评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,537评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,381评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,787评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,030评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,304评论 1 252
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,734评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,943评论 2 336

推荐阅读更多精彩内容

  • 对于做统计而言,软件和代码永远只是工具,想要真正吃透一个分析方法,还是得从最原本的知识开始梳理。 双因素方差分析的...
    陈荣昌阅读 2,316评论 0 3
  • 方差分析的基本思想及应用条件 方差分析的基本思想 在进行科学研究时,有时要按实验设计将所研究的对象分为多个处理组进...
    backup备份阅读 7,424评论 0 10
  • 统计学词汇中英文对照完整版 A Absolute deviation, 绝对离差 Absolute number,...
    生信F3阅读 4,650评论 0 4
  • 方差分析(Analysis of Variance,简称ANOVA),又称“变异数分析”,是R.A.Fisher发...
    刘相培在努力学习中阅读 21,825评论 0 3
  • 推荐指数: 6.0 书籍主旨关键词:特权、焦点、注意力、语言联想、情景联想 观点: 1.统计学现在叫数据分析,社会...
    Jenaral阅读 5,686评论 0 5