如何制作带有字母的方差分析表以表示 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语言Eta squared计算实战:Eta squared表示可以用模型中给定的变量解释的方差的比例拟合方差分析模型(two-way ANOVA)计算Eta Squared