对 R 中的差异损耗进行统计测试?

Statistically testing for differential attrition in R?

提问人:rempsyc 提问时间:11/11/2023 最后编辑:Robert Longrempsyc 更新时间:11/21/2023 访问量:61

问:

此问题是从 Stack Overflow 迁移而来的,因为它可以在交叉验证中回答。11 天前迁移

上下文

我有一个随机对照试验,有三组和三个时间测量(前、后、随访)。我注意到,从前到后,再从后到随访,不同组的流失率似乎不同。评价员询问差异性损耗是否具有统计学意义

Reprex的

下面是示例数据:

data <- data.frame(
  group = c("Control", "Treatment1", "Treatment2"),
  pre = c(150, 150, 150),
  post = c(150, 100, 80),
  follow = c(120, 90, 70)
)
data
#>        group pre post follow
#> 1    Control 150  150    120
#> 2 Treatment1 150  100     90
#> 3 Treatment2 150   80     70

创建于 2023-11-10 with reprex v2.0.2

问题

我真的可以一次只用 6 个值进行统计检验吗?我正在考虑两个测试:一个是前到后损耗,另一个是从后到随访的损耗测试。如果是这样,什么测试?

我从这个来源和这个来源读到,在这种情况下使用了两种主要测试:(a)差异损耗率测试和(b)选择性损耗测试这些测试是否适合我的数据?如何在 R 中进行这些测试?

R 实验设计 缺失数据 临床试验 前后比较

评论

2赞 Demetri Pananos 11/11/2023
为什么不把它变成一个生存分析问题,使用对数排名测试呢?

答:

2赞 Robert Long 11/11/2023 #1

对于差分损耗率测试,您可以考虑使用独立性卡方检验,如果您有足够大的样本 - 对于小样本,此测试的功效较低。另一种方法是费舍尔精确检验。以下是我们如何对事前到事后以及事后到随访进行差异损耗率测试

# Calculate the number of dropouts and completers at each stage
data$dropout_pre_post <- data$pre - data$post
data$dropout_post_follow <- data$post - data$follow

# Create a contingency table for pre to post
# This is a test of attrition from pre to post:
table_pre_post <- matrix(c(data$pre, data$dropout_pre_post), ncol = 2)

# Fisher's Exact Test
fisher.test(table_pre_post)

# And similarly for post to follow-up:
# Create a contingency table for post to follow-up
table_post_follow <- matrix(c(data$post, data$dropout_post_follow), ncol = 2)

# Fisher's Exact Test
fisher.test(table_post_follow)

由于只有三个组和少量,电源可能是一个问题。除非差异非常大,否则这些测试可能无法检测到差异。对 p 值的解释要谨慎,尤其是在样本数量较小的情况下。 如果可能,通过对损耗原因的定性评估来补充这些测试,这可能会为了解损耗是差异性还是选择性差异性提供额外的见解。

对于选择性损耗检验,该检验评估辍学的特征是否与留在研究中的特征不同,您可以使用逻辑回归模型,该模型可用于将辍学概率建模为组和其他相关协变量的函数。

另一种也许更合适的可能性是生存分析,正如德米特里·帕纳诺斯(Demetri Pananos)在对问题的评论中所建议的那样。这可能需要对数据进行重塑,但这是专门为“事件发生时间”数据而设计的,您似乎拥有这些数据。

评论

0赞 rempsyc 11/13/2023
谢谢!在我提供的示例数据中,最小的单元格是 70,大于 5,所以从技术上讲,卡方检验应该可以而不是 Fisher 吗?在您的示例中,我看到您比较了 ,而不仅仅是 ,因此此列联表中的最小值实际上是 10,这要低得多。两种策略都提供不同的 p 值。为什么我们必须使用辍学者的值而不是其余参与者的值?predropout_pre_postpost
0赞 rempsyc 11/14/2023
此外,在您的示例中,第一个测试很重要,而另一个测试则不重要。如果你把这个例子转换成一个包含结果的reprex,我们也可以包括对结果的解释,我相信这对未来的读者很有用。如果我没记错的话,第一次测试的 p < .05 意味着我们拒绝(行和列)独立性的假设,即因组而异的损耗率(即存在差异损耗),而对于第二个测试,p > .05,因此没有差异损耗。这是对的吗?
1赞 rempsyc 11/21/2023
我遇到了一位统计学家,他认为上面的例子是“错误的”,因为我们应该比较 post to,而不是比较 ,以便行总数等于原始样本量。我取消将其标记为答案,直到得到纠正或澄清。predropout_pre_postdropout_pre_post
1赞 Nuclear Hoagie 11/21/2023
同意@rempsyc,即运行测试的表应计算每个组的“剩余”与“非剩余”,而不是“总计”与“剩余”。这也不是一个非常小的样本——每组有 150 个样本,真实随访率的 95% CI 在最坏的情况下是 +/-8%,在最好的情况下只有 +/-3%。
0赞 rempsyc 11/21/2023 #2

在与统计学家的会议上,还有人建议,可以比较均值并使用 t 检验(或针对小样本的 Mann-Whitney U 检验,其中正态性假设变得难以评估)来比较感兴趣的因变量的辍学和完成者,以评估辍学是否与这些变量的完成者不同。

示例 reprex:

library(report)

# Prepare data
data <- mtcars
names(data)[2] <- "group"
names(data)[9] <- "dropout"
data$group <- as.factor(ifelse(data$group == 4, "Control",
                            ifelse(data$group == 6, "Treatment1",
                               "Treatment2")))
data$dropout <- as.factor(data$dropout)

# t test
x <- t.test(data$mpg ~ data$dropout)
report(x)
#> Effect sizes were labelled following Cohen's (1988) recommendations.
#> 
#> The Welch Two Sample t-test testing the difference of data$mpg by data$dropout
#> (mean in group 0 = 17.15, mean in group 1 = 24.39) suggests that the effect is
#> negative, statistically significant, and large (difference = -7.24, 95% CI
#> [-11.28, -3.21], t(18.33) = -3.77, p = 0.001; Cohen's d = -1.41, 95% CI [-2.26,
#> -0.53])

# Could also be checked for a specific group, if desired
data_Treatment2 <- data[data$group == "Treatment2", ]

x <- t.test(data_Treatment2$mpg ~ data_Treatment2$dropout)
report(x)
#> Effect sizes were labelled following Cohen's (1988) recommendations.
#> 
#> The Welch Two Sample t-test testing the difference of data_Treatment2$mpg by
#> data_Treatment2$dropout (mean in group 0 = 15.05, mean in group 1 = 15.40)
#> suggests that the effect is negative, statistically not significant, and very
#> small (difference = -0.35, 95% CI [-2.34, 1.64], t(10.19) = -0.39, p = 0.704;
#> Cohen's d = -0.17, 95% CI [-1.05, 0.71])

创建于 2023-11-20 with reprex v2.0.2