当我尝试 运行 t.test() 时出现错误
I get an error when I try to run t.test()
我正在尝试执行 t.test 如下:
t.test(data = a, score ~ group, paired = T)
但是,我得到这个错误:
Error in complete.cases(x, y) : not all arguments have the same length
我认为这是因为 group$target 有一些 NA。
我怎样才能告诉 t.test() 函数 运行 测试(因为 NA 应该在那里)?
这是关于我的数据的一些信息:
table(a$group)
target: 96
nontarget: 96
str(a$score)
num [1:192] 3 4.5 5.75 6.25 6 7 5 5.5 NA 5.25 ...
str(a$group)
Factor w/ 2 levels "nontarget","target": 2 2 2 2 2 2 2 2 2 2 ...
部分数据样本:
ResponseId
group
score
R_XZz2leQjPyBF4OZ
target
4.750000
R_yx5aiVCJfpz1Y9b
target
NA
R_z0RbO2yL1QT3jTX
target
6.500000
R_3DnI1SqwhDrourD
nontarget
3.250000
R_3e39IHkvt1yh0R8
nontarget
1.833333
R_3e5kUZaUet2HYTw
nontarget
2.916667
回应评论,我很关心@JohnGarland 的问题(你确定 你真的有配对数据吗?),但前提是你有(以及不同的 ResponseID
值是一条红鲱鱼),我认为你必须丢弃所有 对 和 NA
值(你说“NAs 应该在那里”,但是由于没有办法在成对的 t-test 中包含一个带有缺失值的对 [*请参阅下面的反驳],您将不得不丢弃它们)。一种方法是将数据集转换为宽格式,然后使用 na.omit()
(然后使用稍微奇怪的语法来对 t-test 和 wide-format 数据进行配对)。
读入样本数据(短但无所谓):
dd <- read.table(header=TRUE, text="
ResponseId group score
R_XZz2leQjPyBF4OZ target 4.750000
R_yx5aiVCJfpz1Y9b target NA
R_z0RbO2yL1QT3jTX target 6.500000
R_3DnI1SqwhDrourD nontarget 3.250000
R_3e39IHkvt1yh0R8 nontarget 1.833333
R_3e5kUZaUet2HYTw nontarget 2.916667
")
转换为宽格式:
d_wide <- with(dd,
data.frame(target = score[group == "target"],
nontarget = score[group == "nontarget"]))
这是一个low-tech方法。您还可以使用基础 R 中的 reshape()
或 unstack()
(尽管我很难弄清楚这些); reshape2::reshape
;或 tidyr::pivot_wider
.
完成后:
t.test(Pair(target, nontarget) ~ 1, data = na.omit(d_wide))
counter-argument 是你实际上可以通过拟合线性 mixed-effect 模型 (LMM) 限制最大似然 (REML) 来更好地处理不平衡数据;这可以使用未配对的数据略微改善两组平均值的估计;当组平衡时,它应该 (??) 给出与经典 t-test 相同的答案。
dd$pair <- factor(rep(1:3, 2))
mm <- nlme::lme(score ~ group,
random = ~1|pair, data = dd, method = "REML",
na.action = na.omit)
summary(mm)
部分根据上下文工作,部分根据数据的设置方式工作。大多数人不会按照 OP 中给出的方式使用 2 个因素 设置配对样本 t 检验(目标组与非目标组是否相同?通常不会,但有时会发生在参加者)。另外,请注意
a <- data.frame(ResponseID = letters[1:6],
group = as.factor(c(rep("target",3),rep("nontarget",3))),
score = c(4.75,NA,6.5,3.25,1.83,2.92))
t.test(data = a, score ~ group, paired = FALSE)
在给定的数据结构上工作得很好。
我正在尝试执行 t.test 如下:
t.test(data = a, score ~ group, paired = T)
但是,我得到这个错误:
Error in complete.cases(x, y) : not all arguments have the same length
我认为这是因为 group$target 有一些 NA。 我怎样才能告诉 t.test() 函数 运行 测试(因为 NA 应该在那里)?
这是关于我的数据的一些信息:
table(a$group)
target: 96
nontarget: 96
str(a$score)
num [1:192] 3 4.5 5.75 6.25 6 7 5 5.5 NA 5.25 ...
str(a$group)
Factor w/ 2 levels "nontarget","target": 2 2 2 2 2 2 2 2 2 2 ...
部分数据样本:
ResponseId | group | score |
---|---|---|
R_XZz2leQjPyBF4OZ | target | 4.750000 |
R_yx5aiVCJfpz1Y9b | target | NA |
R_z0RbO2yL1QT3jTX | target | 6.500000 |
R_3DnI1SqwhDrourD | nontarget | 3.250000 |
R_3e39IHkvt1yh0R8 | nontarget | 1.833333 |
R_3e5kUZaUet2HYTw | nontarget | 2.916667 |
回应评论,我很关心@JohnGarland 的问题(你确定 你真的有配对数据吗?),但前提是你有(以及不同的 ResponseID
值是一条红鲱鱼),我认为你必须丢弃所有 对 和 NA
值(你说“NAs 应该在那里”,但是由于没有办法在成对的 t-test 中包含一个带有缺失值的对 [*请参阅下面的反驳],您将不得不丢弃它们)。一种方法是将数据集转换为宽格式,然后使用 na.omit()
(然后使用稍微奇怪的语法来对 t-test 和 wide-format 数据进行配对)。
读入样本数据(短但无所谓):
dd <- read.table(header=TRUE, text="
ResponseId group score
R_XZz2leQjPyBF4OZ target 4.750000
R_yx5aiVCJfpz1Y9b target NA
R_z0RbO2yL1QT3jTX target 6.500000
R_3DnI1SqwhDrourD nontarget 3.250000
R_3e39IHkvt1yh0R8 nontarget 1.833333
R_3e5kUZaUet2HYTw nontarget 2.916667
")
转换为宽格式:
d_wide <- with(dd,
data.frame(target = score[group == "target"],
nontarget = score[group == "nontarget"]))
这是一个low-tech方法。您还可以使用基础 R 中的 reshape()
或 unstack()
(尽管我很难弄清楚这些); reshape2::reshape
;或 tidyr::pivot_wider
.
完成后:
t.test(Pair(target, nontarget) ~ 1, data = na.omit(d_wide))
counter-argument 是你实际上可以通过拟合线性 mixed-effect 模型 (LMM) 限制最大似然 (REML) 来更好地处理不平衡数据;这可以使用未配对的数据略微改善两组平均值的估计;当组平衡时,它应该 (??) 给出与经典 t-test 相同的答案。
dd$pair <- factor(rep(1:3, 2))
mm <- nlme::lme(score ~ group,
random = ~1|pair, data = dd, method = "REML",
na.action = na.omit)
summary(mm)
部分根据上下文工作,部分根据数据的设置方式工作。大多数人不会按照 OP 中给出的方式使用 2 个因素 设置配对样本 t 检验(目标组与非目标组是否相同?通常不会,但有时会发生在参加者)。另外,请注意
a <- data.frame(ResponseID = letters[1:6],
group = as.factor(c(rep("target",3),rep("nontarget",3))),
score = c(4.75,NA,6.5,3.25,1.83,2.92))
t.test(data = a, score ~ group, paired = FALSE)
在给定的数据结构上工作得很好。