如何制作带有字母的方差分析表以表示 R->latex 的组显着差异?

Posted

技术标签:

【中文标题】如何制作带有字母的方差分析表以表示 R->latex 的组显着差异?【英文标题】:How to make an anova table with letters for groupwise significant differences in R->latex? 【发布时间】:2014-02-25 19:41:29 【问题描述】:

R 中是否有一个包可以生成这样的表: 基本上,给定一个因子和变量的数据集,生成一个格式良好的表格,其中包含成对的 t 检验和指示差异显着性的字母?

虚拟数据:

var = c(rnorm(100,mean=1,sd=2),rnorm(30,mean=-1,sd=2),rnorm(50,mean=0,sd=4))
factor = as.factor(c(rep(1,100),rep(2,30),rep(3,50))

我将如何获取这些虚拟数据并将其转换为示例表的(一列)?

【问题讨论】:

我认为没有现成的解决方案。您可能需要手动编写代码。请参阅xtable 包及其对应的图库:cran.r-project.org/web/packages/xtable/vignettes/… 是的,这就是我害怕的。把东西变成乳胶格式是很容易的部分。困难的部分是对字母进行编码以指示成对的相似性/差异。例如,如果 f1 与 f2 相似,但 f3 仅与 f2 相似,而不与 f1 相似,该怎么办?对应的字母是 A、AB 和 B。虽然手动操作很简单,但自动化却非常棘手,因为它是递归的。大多数制作这些表格的人都使用 JMP 等。 如果你为这张表手动编码乳胶输出,引入字母(假设你已经有了分组,使用例如 multcomp 包),可能会不那么简单。 【参考方案1】:

免责声明


不是一个确切的答案,但它可能是一个好的开始!!!使用tables 包。

library(Hmisc)
library(tables)
stderr <- function(x) sd(x)/sqrt(length(x))
latex(
  object = tabular((Species+1) ~ All(iris)* PlusMinus(mean, stderr, digits=1), data=iris)
 , title = "Test"
 , file=""
 , size = "small"
 , cdot = 3
 , here = TRUE
 , booktabs=TRUE
 , center="centering"
 )

输出



已编辑

您可以使用multcompView包获取信件。


代码

library(multcompView)

Sepal.Length.fm <- aov(Sepal.Length~Species, data=iris)
Sepal.Length.Letters <- data.frame("Letters"=multcompLetters(extract_p(TukeyHSD(Sepal.Length.fm)$"Species"))$"Letters")

Sepal.Width.fm <- aov(Sepal.Width~Species, data=iris)
Sepal.Width.Letters <- data.frame("Letters"=multcompLetters(extract_p(TukeyHSD(Sepal.Width.fm)$"Species"))$"Letters")

Petal.Length.fm <- aov(Petal.Length~Species, data=iris)
Petal.Length.Letters <- data.frame("Letters"=multcompLetters(extract_p(TukeyHSD(Petal.Length.fm)$"Species"))$"Letters")

Petal.Width.fm <- aov(Petal.Width~Species, data=iris)
Petal.Width.Letters <- data.frame("Letters"=multcompLetters(extract_p(TukeyHSD(Petal.Width.fm)$"Species"))$"Letters")

Letters <- cbind(Sepal.Length.Letters, Sepal.Width.Letters, Petal.Length.Letters, Petal.Width.Letters)

输出

           Letters Letters Letters Letters
versicolor       a       a       a       a
virginica        b       b       b       b
setosa           c       c       c       c

【讨论】:

谢谢!这是制作桌子的好方法。但是字母呢?实际上,您需要手动查看表格并进行算术运算以查看它们是否不同。【参考方案2】:

您可以使用aggregate 函数来做到这一点。

df = as.data.frame(cbind(var,factor))
aggregate(df$var, by=list(df$factor), t.test)

  Group.1         x
1       1  4.939821
2       2 -2.128924
3       3 -1.431482

如果您希望多个测试显示为新列,您可以创建一个新函数作为最终参数。

【讨论】:

谢谢。困难的部分是字母,如果两组在统计上不同,则字母会有所不同。一个不错的好处是干净地导出为乳胶格式。我可能花了一个小时试图弄清楚如何编写代码,而且我很确定有人已经弄清楚了。 你所说的“字母”是什么意思? 在该表示例中查看 SD 旁边的字母如何?两组不共享任何字母表示统计差异。如果某些条目在统计上无法与彼此不同的两个其他组区分开来,则它们可以包含多个字母。 您可能想在主要问题中进一步解释一下。我不知道这是你所希望的!表格的格式可能很好,但没有解释就很混乱。

以上是关于如何制作带有字母的方差分析表以表示 R->latex 的组显着差异?的主要内容,如果未能解决你的问题,请参考以下文章

R实验.6基本统计分析

R语言-方差检验

R语言使用回归方法解决方差分析问题

R语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例拟合方差分析模型(two-way ANOVA)计算Eta Squared

《R语言实战》自学笔记62-多元方差分析

玩具取名