gpt4 book ai didi

r - 配对 t 检验崩溃应用循环(已编辑)

转载 作者:行者123 更新时间:2023-12-03 12:14:56 26 4
gpt4 key购买 nike

为了回应有用的评论,我编辑了原始问题(我假设 for 循环和应用循环给出不同的结果)。

我正在使用 R 运行大量 2 组 t 检验,使用来自分隔表的输入。根据此处和其他地方的建议,我尝试了“for-loops”和“apply”来实现这一点。对于“正常”t.test,两者都很好地工作并给出相同的结果。但是,对于配对 t 检验,for-look 似乎有效,而 apply-loop 无效。后来,我发现两个循环都遇到了同样的问题(见下文),但是 for 循环更优雅地处理了这种情况(只有一个循环循环返回无效结果),而应用循环完全失败。

我的输入文件如下所示:(第一行是标题行,数据行有一个名称,第 1 组有 4 个数据点,第 2 组有 4 个数据点):

header g1.1 g1.2 g1.3 g1.4 g2.1 g2.2 g2.3 g2.4
name1 0 0.5 -0.2 -0.2 -0.1 0.4 -0.3 -0.3
name2 23.2 24.4 24.5 27.2 15.5 16.5 17.7 20.0
name3 .....

等等(总共约 50000 行)。第一个数据行(以 name19 开头的结果是罪魁祸首。

这是效果更好的 for-loop 版本(在有问题的行上失败但正确处理所有其他行):

table <- read.table('ttest_in.txt',head=1,sep='\t')
for(i in 1:nrow(table)) {
g1<-as.numeric((table)[i,2:5])
g2<-as.numeric((table)[i,6:9])
pv <- t.test(g1,g2,paired=TRUE)$p.value
}

这是导致问题的“应用”版本

table <- read.table('ttest_in.txt',head=1,sep='\t')
pv.list <- apply(table[,2:9],1,function(x){t.test(x[1:4],x[5:8],paired=TRUE)$p.value})

大约 50000 条数据线中的一条存在问题,因为所有成对比较的差异都是相同的,这在配对 t 检验中会导致未定义的 p 值(基本上为零)。应用循环崩溃并出现错误“数据基本不变”。对我(作为 R 新手)来说,仅仅因为 t.test 不喜欢一条数据就让整个脚本崩溃似乎不是一个好主意。在 for 循环中,此数据行也会产生一条错误消息,但循环会继续,所有其他 t 检验都会给出正确的结果。

我做错了什么根本性的事情吗?此行为实质上禁止将应用循环用于此类批处理分析。或者是否有规避此问题的标准方法。为什么 t 检验不只返回对特定 p 值无效的内容而不是退出?

最佳答案

更新 既然你说过 for 循环也会出错,并且你希望 apply 版本更健壮,为什么不简单地添加一个 tryCatch ?

pv.list <- apply(table[,2:9],1, function(x) tryCatch( 
t.test(x[1:4],x[5:8],paired=TRUE)$p.value, error=function(x) NA ))

如果无法计算 p.value,这应该返回 NA。您可以通过编辑错误处理函数更改为另一个值(例如 NULL0Inf)。

旧帖

我注意到 t.test (有点)给出了当某些值是 Inf 时发现的错误(这似乎是一个错误):

> t.test(1:10, c(rep(1,9), Inf), paired=TRUE)
Error in if (stderr < 10 * .Machine$double.eps * abs(mx)) stop("data are essentially constant") :
missing value where TRUE/FALSE needed

那么你真的明白了吗,或者它真的说:

Error in t.test: data are essentially constant

仍然不太清楚 for 循环为何有效。但请注意,在您的 for 循环中,您执行了 as.numeric,而在 apply 情况下您没有执行...

关于r - 配对 t 检验崩溃应用循环(已编辑),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9480855/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com