在binom.test
选项中使用时,我对by
的行为感到困惑。
它似乎不适用于某些数据帧,但可以处理我放在一起的一些虚拟数据。
调用mean()
可以正常工作......
我的示例代码如下。
##### this does not work...
bug <- InsectSprays
bug$outcome <- ifelse(bug$count > 4, 1, 2 )
bug$spray.n <- ifelse(bug$spray == "A", 1,
ifelse(bug$spray == "B", 2,
ifelse(bug$spray == "C", 3,
ifelse(bug$spray == "D", 4,
ifelse(bug$spray == "E", 5, 6)))))
binom.test(table(bug$outcome), alternative="greater")
by(bug, bug$spray.n, FUN = function(X) binom.test(table(X$outcome),
alternative="greater" ))
by(bug, bug$spray.n, FUN = function(X) mean(X$count)
##### this works...
##### generating example data
##### this has three groups, each with a binomial indicator
##### success is coded as 1, failure as a 0
set.seed(271828)
center <- gl(3,10)
outcome <- rbinom(length(center), 1, .6777)
id <- seq(1,length(center),1)
dat <- as.data.frame(cbind(center,id,outcome))
##### have to recode success and failure to use table()
##### !!!!! would like to avoid having to do this...
dat$primary <- ifelse(dat$outcome == 1 , 1 , 2)
dat$cent <- as.factor(dat$center)
##### carrying out one sided binomial test for positive outcome
binom.test(table(dat$primary), alternative = "greater" )
##### would like to carry out the same test by center...
by(dat, dat$center, FUN = function(X) binom.test(table(X$primary),
alternative = "greater"))
by(dat, dat$center, FUN = function(X) mean(X$outcome))
答案 0 :(得分:2)
有些binom.test
调用不起作用的原因是因为某些组有所有成功(或失败)。因此,为了进行测试,你需要在每个组中至少有两个级别(这完全有道理......)。
为了完整性:
##### this does work...
air <- airquality
air
air$outcome <- ifelse(air$Wind > 10, 1, 2 )
binom.test(table(air$outcome), alternative="greater")
by(air, air$Month, FUN = function(X) mean(X$Wind))
by(air, air$Month, FUN = function(X) table(X$outcome))
by(air, air$Month, FUN = function(X) binom.test(table(X$outcome), alternative="greater"))
答案 1 :(得分:1)
如果您尝试,可以看到问题:
by(bug, bug$spray.n, FUN = function(X) table(X$outcome))