R:How 为 Two-Way 方差分析创建交互图

R:How to Create an Interaction Plot for Two-Way ANOVA

尝试创建 fixed-effects(模型 1)Two-Way 方差分析 data.I 的交互图并从 excel 导入我的数据时遇到编码问题进入 RStudio。数据如下。

Sex Genotype    Activity
Female  I   2.838
Female  I   4.216
Female  I   2.889
Female  I   4.198
Female  II  3.55
Female  II  4.556
Female  II  3.087
Female  II  1.943
Female  III 3.62
Female  III 3.079
Female  III 3.586
Female  III 1.943
Male    I   1.884
Male    I   2.283
Male    I   2.939
Male    I   1.486
Male    II  2.396
Male    II  2.956
Male    II  3.105
Male    II  2.649
Male    III 2.801
Male    III 3.421
Male    III 2.275
Male    III 2.11

然后我将其保存为 Excel 工作簿。然后我在 RStudio 中转到文件>导入数据集>Excel>选择我的数据集文件>选择第一行作为名称并打开数据查看器。 我检查了我的数据,它们都在三列的三个 headers 下。 然后做我的方差分析:

Model_1 <- aov(Activity ~ Sex*Genotype, data=data7)
> summary(Model_1)
         Df Sum Sq Mean Sq F value Pr(>F)  
Sex           1  3.527   3.527   6.563 0.0196 *
Genotype      2  0.178   0.089   0.165 0.8488  
Sex:Genotype  2  1.166   0.583   1.085 0.3591  
Residuals    18  9.673   0.537   

接下来我试着做了一个交互图:

interaction.plot(Genotype,Sex,Activity, fun = mean, type= c("b"), xlab= 
"Genotype" ,ylab = "Enzyme Activity (enzyme unit (U)=1µmol min-
1)",main="Interaction Plot" ) 

但是,当我这样做时,我得到了这个错误:

 Error in tapply(response, list(x.factor, trace.factor), fun) : object 'Genotype' not found 

如何使基因型和性别成为 object?在方差分析 table 中显示时,它们不应该已经是 object 了吗?

此外,我想为每个单元格制作一个 table 的平均值、SD 和 n,但是当我尝试使用对 one-way 方差分析有效的方法这样做时,它没有为 Two-way 工作。这样的table是怎么做出来的?

我已经尝试过在线示例,但其中 none 帮助我创建了交互图,而且我还没有看到任何关于如何创建交互图的好示例(即使在本网站上)为 Two-way 方差分析制作一个 table 的均值、SD 和 n,这对我的情况有效。 有什么软件包可以帮助我吗?

如果有人可以帮助解释我做错了什么以及如何制作table,我将不胜感激。

两种方法。 使用基函数

#nj is your dataframe which I loaded using
nj <-read.table("nj_data.txt", header = T)
#Base R - using built-in functions
# the Dot indicates variable(column) to work on
# if you have more than one variable use their names
#good practice to use na.rm = T, to make sure you exclude
# NA - missing values, other wise mean and sd will report NA
aggregate(. ~ Sex+Genotype, data = nj,
          FUN = function(x) c(Mean = mean(x, na.rm = T),
                              n = length(x),
                              sd = sd(x, na.rm = T)))

#using dplyr - I suggest this as syntax is nicer
library(dplyr)
nj %>% group_by(Sex, Genotype) %>%
summarise_all(funs(mean(., na.rm = T),sd(., na.rm = T),n()))
#here the "." in mean and sd means using the data given 
#equivalent to x in base R above

阅读 Tidyverse(一组使数据分析更容易的新库) 在 https://www.tidyverse.org/

还有 ggplot - 这是一个很好的使用 ggplot 的交互图入门 https://sebastiansauer.github.io/vis_interaction_effects/

这是基本解决方案,可能很笨拙但很有效:

data7$group=paste(data7$Sex,data7$Genotype,sep="_")

tapply(data7$Activity,data7$group,sd)