R:如何为双向方差分析创建交互图

R:如何为双向方差分析创建交互图,r,plot,summary,anova,two-way,R,Plot,Summary,Anova,Two Way,在尝试创建固定效应(模型1)双向方差分析数据的交互图时,我遇到了编码问题。我键入数据并将数据从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.6

在尝试创建固定效应(模型1)双向方差分析数据的交互图时,我遇到了编码问题。我键入数据并将数据从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>选择我的数据集文件>选择第一行作为名称并打开Data Viewer。 我检查了我的数据,所有数据都在三列的三个标题下。 然后我做了方差分析:

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   
但是,当我这样做时,我会得到以下错误:

 Error in tapply(response, list(x.factor, trace.factor), fun) : object 'Genotype' not found 
我如何使基因型和性别成为一个对象?当它们出现在方差分析表中时,它们不应该已经是对象了吗

另外,我想为每个细胞制作一个平均值、SD和n的表格,但当我尝试使用单向方差分析时,它对双向方差分析不起作用。你怎么做这样的桌子

我在网上尝试过以下例子,但并没有一个能帮助我创建交互图,我也并没有看到任何好的例子(甚至在这个网站上),说明如何为双向方差分析制作一个均值、SD和n的表格,这些都对我的情况有效。 有什么包可以帮我吗

如果有人能帮我解释我做错了什么,以及如何制作桌子,我将不胜感激

有两种方法。 使用基函数

#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
#nj是我使用
nj%组(按性别、基因型)%>%
总结所有数据(funs(平均值(,na.rm=T),sd(,na.rm=T),n())
#这里的“平均值”和sd表示使用给定的数据
#相当于上述R底的x
阅读Tidyverse(一组新的库,以简化数据分析) 在

还有ggplot——这是一本关于使用ggplot的交互图的不错的入门书

以下是基本的解决方案,也许有些笨拙,但很有效:

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

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

阅读
?交互。绘图
,特别是示例。基本上,您需要让它知道数据在哪里,正如您将在命令中看到的,您没有提到它。用(data7,{interaction.plot(基因型,性别,活动,乐趣=平均值,类型=c(“b”),xlab=“generic”,ylab=“酶活性(酶单位(U)=1µmol min-1)”,main=“interaction plot”)}试试这个
和你的表格查询
?摘要
谢谢你的帮助,我能够用(dataHW7,{相互作用图(基因型、性别、活性、乐趣=平均值,类型=c(“b”),pch=16,xlab=“基因型”,ylab=“酶活性(酶单位(U)=1µmol min-1)”,main=“相互作用图”,ylim=c(0,4)))。我在获取平均值、SD和n表时仍然遇到问题。在查看了
?摘要和本网站后,我能够通过“model.tables”(model_1,type='means')获得每个单元格的平均值`;但是,我还没有弄清楚如何获得每个单元格的SD。您对如何进行还有什么建议,或者我应该看一个例子吗?我很确定我想使用tapply函数,但我已经尝试了
tapply(Activity,Sex,SD)
tapply(Activity,Genype,SD)
,我尝试了
和(dataHW7,{tapply(Activity,Sex,sd)}
但是这给了我整行的sd。我想要按单元格而不是整列或整行。非常感谢!你解释得这么好,我已经看过了链接,它们看起来在将来会很有用。我不知道为什么
na.rm=T
如此重要。我只是想检查一下我是否理解了“.”`符号。因此,对于聚合,点代表变量/列活动,因此如果我有两列,我可能不会使用点,而是执行
活动+生存~Sex+基因型
?不客气,很高兴知道这对你有帮助。本着学习的精神,我建议你尝试键入的内容,作为提示,我将发布int到
?aggregate
中的示例,尤其是公式规范中带有
cbind
的示例。此时它将开始变得混乱,您未来的自己/他人将被抛在脑后,因此我建议适应dplyr版本,更清晰的语法有助于更好的可读性
data7$group=paste(data7$Sex,data7$Genotype,sep="_")

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