【问题标题】:T-test by multiple factors多因素 T 检验
【发布时间】:2020-04-09 18:18:19
【问题描述】:

我有一个数据框,其中有一个变量和多个因子列。看起来是这样的

Species<-list("a","b")
Species<-rep(Species,times=6)
Class<-list("X","X","Y","Y","Z","Z")
Class<-rep(Class,times=2)
Sample<-list("1","1","1","1","1","1","2","2","2","2","2","2")
Treatment<-list("A","A","A","A","A","A","B","B","B","B","B","B")
values<-c(15,16,17,18,19,20,5,6,7,8,9,10)

prova<-as.data.frame(cbind(Species, Class,Treatment,Sample,values))

我想执行一系列 t 检验,以比较每个类别在两种处理中观察到的每个物种的值。所以我对两种治疗方法之间的差异感兴趣,但如果我应用代码 t.test(values~Treatment, data = prova, method="t.test") 它计算差异而不考虑其他因素,这不是我在找什么。此外,我只对在两种处理中比较“X”类中的物种“a”感兴趣。

在原始数据集中,每个处理都有三个重复。

你能帮帮我吗?感谢您的任何建议

【问题讨论】:

    标签: r dataframe factors t-test


    【解决方案1】:

    您需要列表中的列位于向量中:

    prova<-data.frame(
    Species=as.character(Species), 
    Class = as.character(Class),
    Treatment = as.character(Treatment),
    Sample = as.character(Treatment),
    values = values)
    

    或者,如果可能,将 Species、Class 等作为字符向量开始。现在您可以使用 by ,它会根据 Class 拆分您的 data.frame 并像您尝试做的那样执行 t.test:

    results = by(prova,prova$Class,function(i)t.test(values ~ Treatment,data=i))
    names(results)
    [1] "X" "Y" "Z"
    

    要查看“X”的结果,请执行

    results[["X"]]
    

    如果你只想看物种“a”,你可以这样做:

    prova = subset(prova,Species=="a")
    

    然后重新运行上面的代码。在这里我必须注意你的示例数据集将不起作用,因为它有 n=1。

    【讨论】:

    • 代码有效,但没有解决问题,因为这样 t 检验只在类的处理之间运行。但是,我想在每个班级中检查用“A”或“B”处理的“a”的区别。
    • 您可以对数据框进行子集化吗?或者你这样做有问题吗?
    • 等等,“a”只有 6 个观察值。如果您按班级分开,则每次治疗只有 1 个观察值。你不能做 t.test。
    • 数据框是我真正拥有的一个例子。在原始数据集中,我确实有 3 个观察结果。我可以对数据集进行子集化,但我想知道是否有简单的编码选择
    猜你喜欢
    • 1970-01-01
    • 2015-04-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-28
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 2021-12-28
    相关资源
    最近更新 更多