【发布时间】:2017-10-27 08:40:08
【问题描述】:
我正在使用 data.table 的 J 参数来获取变量的置信区间,如下所示:
mt=data.table(mtcars)
mt_m=mt[,.(qsec=mean(qsec),CI1=t.test(qsec)$conf.int[1],CI2=t.test(qsec)$conf.int[2]),.(cyl)]
mt_m
cyl qsec CI1 CI2
1: 6 17.97714 16.39856 19.55573
2: 4 19.13727 18.00699 20.26755
3: 8 16.77214 16.08159 17.46270
绘制均值和误差线非常有用。但是现在我想根据我的控制测试每个条件并获得 p 值,例如 mt[,.(p=t.test(qsec,qsec[cyl%in%4])$p.value),.(cyl)](这显然不起作用)。
t.test.default(qsec, qsec[cyl %in% 4]) 中的错误: 没有足够的'y'观察
complete.cases(x, y) 中的错误: 并非所有参数的长度都相同
(paired test)
有没有办法使用 data.table 来实现这一点?
编辑
Mike 的回答适用于第一个 MWE,只有一个组。但是,我的数据表有两个:
dt=data.table(var1=c(rep(1,18),rep(2,18),rep(3,18)),
var2=rep(c("A","B","C"),54),score=runif(162))
dt_m=dt[,list(score=mean(score),CI1=TCI1(score),CI2=TCI2(score),
p=t.test(score,dt[var2%in%"A",score])$p.value),
.(var1,var2)]
dt_m
var1 var2 score CI1 CI2 p
1: 1 A 0.5291396 0.3737159 0.6845634 0.6062132
2: 1 B 0.4784482 0.3426129 0.6142835 0.9326820
3: 1 C 0.5445497 0.4079861 0.6811133 0.4452131
4: 2 A 0.5047712 0.3519982 0.6575442 0.8146140
5: 2 B 0.4717234 0.3406157 0.6028311 0.8605529
6: 2 C 0.4670736 0.3273769 0.6067704 0.8205882
7: 3 A 0.4210423 0.2671292 0.5749555 0.4531821
8: 3 B 0.4392489 0.2828231 0.5956746 0.5952569
9: 3 C 0.4308970 0.3267391 0.5350549 0.4078637
t 检验不是由var2 和var1 计算的,否则当var2 为A 时p 将为1,导致使用配对测试时出现相同的错误。
如何通过两组实现这一目标?
【问题讨论】:
-
错误在于您尝试执行
t.test的方式而不是您的data.table代码 -
重点是通过
cyl值应用我的t 检验,如果我详细说明t.test的参数,那么我必须设置一个固定的cyl。我知道data.table处理这样的语法,例如diff:=qsec-qsec[cyl%in%4]。这就是我要重现的内容。 -
对不起!我最初误读了这个问题......
标签: r data.table