【发布时间】:2020-09-14 22:11:03
【问题描述】:
考虑这个数据框dat1:
dat1 <- data.frame(Region = rep(c("r1","r2"), each = 100),
State = rep(c("NY","MA","FL","GA"), each = 10),
Loc = rep(c("a","b","c","d","e","f","g","h"),each = 5),
ID = rep(c(1:10), each=2),
var1 = rnorm(200),
var2 = rnorm(200),
var3 = rnorm(200),
var4 = rnorm(200),
var5 = rnorm(200))
我有类似于上面创建的dat1 的数据框。 Region、State 和 Loc 是每个观测值 ID 的分组变量,每个观测值 var1:var5 进行 5 次测量。对于每个分组变量,我对每个 var 进行单变量方差分析。当发现显着差异时,我使用 TukeyHSD() 函数和 multcompView 包中的 multcompLetters() 函数在组上生成 CLD。由于我想为每个分组变量执行此操作,因此我正在尝试编写一个函数来防止自己重复和打错字。下面显示了我在哪里:
library(tidyverse)
library(multcomp)
library(multcompView)
Tuk <- function(dat,groupvar,var){
TUK <- TukeyHSD(aov(lm(get(var) ~ get(groupvar), data=dat)))
names(TUK)[[1]] <- paste0(groupvar)
lets<-multcompLetters(extract_p(TUK$groupvar))
lets
}
#assuming all 5 vars were significant in the anovas, I would then run this for each grouping variable as follows:
vars <- paste0(names(dat1[,5:9]))
#by Region
lapply(vars, FUN=Tuk, dat=dat1, groupvar="Region")
#by State
lapply(vars, FUN=Tuk, dat=dat1, groupvar="State")
#by Loc
lapply(vars, FUN=Tuk, dat=dat1, groupvar="Loc")
代码在函数之外工作。该函数将创建模型,但我不知道如何格式化它,以便它识别 groupvar 是什么 multcompLetters(extract_p()) 部分?我该如何解决这个问题,以及如何让它输出一个整洁的表格,显示每个组和我一次给它的每个变量的字母。例如,使用所有 5 个变量的 State 看起来像这样
NY MA FL GA
var1 a ab c a
var2 a ab b c
var3 a c ab bc
var4 ab c ab ab
var5 a b c b
另外,是否有一种合理的方法可以使此函数生成显示 CLD 字母的组的箱线图(针对每个变量)?
【问题讨论】:
-
要使函数正常工作,请将
TUK$groupvar替换为TUK[[groupvar]]。 -
您的问题是否相关?目标是生成箱线图并标记 p.values 的差异吗?
-
@Chuck P 是的,我希望该函数最终生成箱线图并标记 p.values 的差异。 @stefan 对
groupvar问题的解决方案有效,我仍然希望在使用它来生成绘图方面获得帮助 -
嗯,让我向您展示一个现有的包装,在我们投入时间推出您自己的包装之前,它可以满足您的需求。我对
multcompLetters不是很熟悉,但对单向 AOV 的绘图和图表非常熟悉。
标签: r function functional-programming tidyeval tukey