- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想将 Tukey.HSD 事后测试的结果添加到 ggplot2
箱线图中。 This SO answer包含我想要的手动示例(即,绘图上的字母是手动添加的;共享字母的组是无法区分的,p>无论如何)。
是否有一个自动功能可以根据 AOV 和 Tukey HSD 事后分析将这些字母添加到箱线图中?
我认为编写这样的函数不会太难。它看起来像这样:
set.seed(0)
lev <- gl(3, 10)
y <- c(rnorm(10), rnorm(10) + 0.1, rnorm(10) + 3)
d <- data.frame(lev=lev, y=y)
p_base <- ggplot(d, aes(x=lev, y=y)) + geom_boxplot()
a <- aov(y~lev, data=d)
tHSD <- TukeyHSD(a)
# Function to generate a data frame of factor levels and corresponding labels
generate_label_df <- function(HSD, factor_levels) {
comparisons <- rownames(HSD$l)
p.vals <- HSD$l[ , "p adj"]
## Somehow create a vector of letters
labels <- # A vector of letters, one for each factor level, generated using `comparisons` and `p.vals`
letter_df <- data.frame(lev=factor_levels, labels=labels)
letter_df
}
# Add the labels to the plot
p_base +
geom_text(data=generate_label_df(tHSD), aes(x=l, y=0, label=labels))
我意识到 TukeyHSD
对象有一个 plot
方法,并且还有另一个包(我现在似乎找不到)可以完成我的任务在基本图形中进行描述,但我真的更喜欢在 ggplot2 中执行此操作。
最佳答案
您可以使用“multcompView”包中的“multcompLetters”在 Tukey HSD 测试后生成同源组的字母。从这里开始,需要提取与 Tukey HSD 中测试的每个因素相对应的组标签,以及箱线图中显示的上分位数,以便将标签放置在该水平之上。
library(plyr)
library(ggplot2)
library(multcompView)
set.seed(0)
lev <- gl(3, 10)
y <- c(rnorm(10), rnorm(10) + 0.1, rnorm(10) + 3)
d <- data.frame(lev=lev, y=y)
a <- aov(y~lev, data=d)
tHSD <- TukeyHSD(a, ordered = FALSE, conf.level = 0.95)
generate_label_df <- function(HSD, flev){
# Extract labels and factor levels from Tukey post-hoc
Tukey.levels <- HSD[[flev]][,4]
Tukey.labels <- multcompLetters(Tukey.levels)['Letters']
plot.labels <- names(Tukey.labels[['Letters']])
# Get highest quantile for Tukey's 5 number summary and add a bit of space to buffer between
# upper quantile and label placement
boxplot.df <- ddply(d, flev, function (x) max(fivenum(x$y)) + 0.2)
# Create a data frame out of the factor levels and Tukey's homogenous group letters
plot.levels <- data.frame(plot.labels, labels = Tukey.labels[['Letters']],
stringsAsFactors = FALSE)
# Merge it with the labels
labels.df <- merge(plot.levels, boxplot.df, by.x = 'plot.labels', by.y = flev, sort = FALSE)
return(labels.df)
}
生成ggplot
p_base <- ggplot(d, aes(x=lev, y=y)) + geom_boxplot() +
geom_text(data = generate_label_df(tHSD, 'lev'), aes(x = plot.labels, y = V1, label = labels))
关于r - 是否有将 AOV 事后测试结果添加到 ggplot2 boxplot 的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18771516/
我想知道 aov() 中的残差是如何计算的。我已经看了几个小时,但无法弄清楚。 我使用方差分析进行重复测量。 Data <- data.frame(subject = factor(rep(1:10,
我做了一个 aov模型,我只想提取每个系数的标准误差。 model <- aov(Molecule ~ Comorbidity + Age + BMI + Sex, data = mydata) 我
我开始使用 Maya 和 Python,这是我遇到的第一个问题: 我无法访问我的着色组 (Arnold) 新创建的 aiCustomAOV。打印给出的着色组 AOV 数量为零(请参见代码的最后一行)。
我在 R/aov()(R = random, X = dependent, W? = within, B? = between): # Pure within: X ~ Error(R/W1*
我已经引用了很多在线文献,但它增加了我的困惑。大部分讨论都过于技术性,涉及术语不平衡设计和 I、II 或 III 因子方差分析以及所有内容。 我只知道aov()用途 lm()在内部,对于带有因子的数据
我正在尝试编写一个函数来自动进行方差分析,其中一部分涉及进行一些进一步的计算。我一直在使用的方法不是很健壮,如果变量名称更改,则它停止工作。 对于这个虚拟数据 > dput(assayvar,"")
据我所知,当应用于具有一个解释变量的数据时,t 检验应该提供与方差分析相同的结果(相同的 p 值)。为了测试这一点,我运行了以下命令来比较结果: df F) x 1 0.3068
我希望提取 R 中方差分析生成的 p 值。 这是我正在运行的内容: test F) asq[, 187] 1 3.02 3.01951 12.333 0.0004599 *** R
我有一个混合模型,数据如下所示: > head(pce.ddply) subject Condition errorType errors 1 j202 G
我有一个混合模型,数据如下所示: > head(pce.ddply) subject Condition errorType errors 1 j202 G
请问$coefficients的区别和 $effects在 aov输出。 这里f1因素与相互作用 f1 * f2意义重大。我想解释该因素对响应的影响,我认为 $effects是我需要的。 让我们考虑以
如何使用预先安装的数据隔离摘要(aov())中的重要性列warpbreaks举个例子... > a a Df Sum Sq Mean Sq F value Pr(>F)
这个问题是关于语法和语义的,因此请在交叉验证上找到一个(尚未回答的)重复:https://stats.stackexchange.com/questions/113324/repeated-measu
我想将 Tukey.HSD 事后测试的结果添加到 ggplot2 箱线图中。 This SO answer包含我想要的手动示例(即,绘图上的字母是手动添加的;共享字母的组是无法区分的,p>无论如何)。
相关赏金:250 reputation points. 我有一个关于 summary.lm() 输出的问题。 首先,这是我的数据集的可重现代码: Cond_Per_Row_statsF) Residu
首先为了查看 rpy2 是否正常工作,我运行了一个简单的模型 (stats.lm): import pandas as pd from rpy2 import robjects as ro from
aov(depvar~timevar+Error(id))有什么区别和 aov(depvar~timevar+Error(id/timevar))配方规范?这两种变体产生的结果略有不同。 曾经在这里问
我是一名优秀的程序员,十分优秀!