估计均值双重差异的显着性
Estimate significance of double difference in means
这可能是一个微不足道的问题。
在我的数据中,我有两组 grp1
和 grp2
。在每个组中,我将一些观察结果分配给治疗组,将一些观察结果分配给对照组。
我的问题是 grp1
和 grp2
的治疗 dv
是否存在统计学上的显着差异。从某种意义上说,这是差异中的差异。
我想估计以下差异是否显着:
dd = 均值(dv_grp1_treat-dv_grp1_control)-均值(dv_grp2_treat-dv_grp2_control)
# create data
install.packages("librarian")
librarian::shelf(librarian,tidyverse,truncnorm)
aud_tr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.1, sd=1))) %>% mutate(group="grp1_tr")
aud_notr <- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2, sd=1))) %>% mutate(group="grp1_notr")
noaud_tr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.4, sd=1))) %>% mutate(group="grp2_tr")
noaud_notr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.1, sd=1))) %>% mutate(group="grp2_notr")
df<- bind_rows(aud_tr,aud_notr,noaud_tr,noaud_notr)
unique(df$group)
[1] "grp1_treat" "grp1_control" "grp2_treat" "grp2_control"
我知道如何 运行 t.test 了解每组之间的均值差异,但是如果我想检查各组之间的差异,我该怎么做?
t.test(df$dv[df$group=="grp1_treat"],df$dv[df$group=="grp1_control"])
t.test(df$dv[df$group=="grp2_treat"],df$dv[df$group=="grp2_control"])
听起来您需要 two-way 方差分析 (ANOVA)。首先,您应该确保将“群体成员资格”和“治疗与对照”分成两列,因为它们实际上是两个不同的变量:
df$treatment <- ifelse(grepl('treat', df$group), 'treat', 'control')
df$group <- ifelse(grepl('1', df$group), 'grp1', 'grp2')
然后您可以使用 aov
进行双向方差分析
summary(aov(dv ~ group + treatment, data = df))
#> Df Sum Sq Mean Sq F value Pr(>F)
#> group 1 1.18 1.175 1.362 0.245
#> treatment 1 26.14 26.145 30.307 1.14e-07 ***
#> Residuals 197 169.95 0.863
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这告诉你,在这个样本中,处理的效果很显着,但组成员的效果却不是
数据
显然,我们没有您的数据,因为问题中没有提供,但以下示例数据框的名称和结构与您自己的相同:
set.seed(1)
df <- data.frame(dv = c(rnorm(50, 3.2), rnorm(50, 3.8),
rnorm(50, 3.5), rnorm(50, 4.1)),
group = rep(c('grp1_control', 'grp1_treat',
'grp2_control', 'grp2_treat'), each = 50))
这可能是一个微不足道的问题。
在我的数据中,我有两组 grp1
和 grp2
。在每个组中,我将一些观察结果分配给治疗组,将一些观察结果分配给对照组。
我的问题是 grp1
和 grp2
的治疗 dv
是否存在统计学上的显着差异。从某种意义上说,这是差异中的差异。
我想估计以下差异是否显着:
dd = 均值(dv_grp1_treat-dv_grp1_control)-均值(dv_grp2_treat-dv_grp2_control)
# create data
install.packages("librarian")
librarian::shelf(librarian,tidyverse,truncnorm)
aud_tr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.1, sd=1))) %>% mutate(group="grp1_tr")
aud_notr <- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2, sd=1))) %>% mutate(group="grp1_notr")
noaud_tr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.4, sd=1))) %>% mutate(group="grp2_tr")
noaud_notr<- as.data.frame(list(avglist=rtruncnorm(625, a=0,b=4, mean=2.1, sd=1))) %>% mutate(group="grp2_notr")
df<- bind_rows(aud_tr,aud_notr,noaud_tr,noaud_notr)
unique(df$group)
[1] "grp1_treat" "grp1_control" "grp2_treat" "grp2_control"
我知道如何 运行 t.test 了解每组之间的均值差异,但是如果我想检查各组之间的差异,我该怎么做?
t.test(df$dv[df$group=="grp1_treat"],df$dv[df$group=="grp1_control"])
t.test(df$dv[df$group=="grp2_treat"],df$dv[df$group=="grp2_control"])
听起来您需要 two-way 方差分析 (ANOVA)。首先,您应该确保将“群体成员资格”和“治疗与对照”分成两列,因为它们实际上是两个不同的变量:
df$treatment <- ifelse(grepl('treat', df$group), 'treat', 'control')
df$group <- ifelse(grepl('1', df$group), 'grp1', 'grp2')
然后您可以使用 aov
summary(aov(dv ~ group + treatment, data = df))
#> Df Sum Sq Mean Sq F value Pr(>F)
#> group 1 1.18 1.175 1.362 0.245
#> treatment 1 26.14 26.145 30.307 1.14e-07 ***
#> Residuals 197 169.95 0.863
#> ---
#> Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
这告诉你,在这个样本中,处理的效果很显着,但组成员的效果却不是
数据
显然,我们没有您的数据,因为问题中没有提供,但以下示例数据框的名称和结构与您自己的相同:
set.seed(1)
df <- data.frame(dv = c(rnorm(50, 3.2), rnorm(50, 3.8),
rnorm(50, 3.5), rnorm(50, 4.1)),
group = rep(c('grp1_control', 'grp1_treat',
'grp2_control', 'grp2_treat'), each = 50))