我试图计算一个简单的Anova测试的类型I错误,并且我得到了奇怪的结果。
让我们假设我想检测4个不同医院(HOP)中剂量(DOSE)对观察变量(obs)的影响。 根据假设药物不会对观察到的变量产生影响,但医院可以生成这样的数据集:
data.frame(
obs=c(rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1)),
HOP=rep(1:4,100),
DOSE=rep(c(0,15,30,50),each=100))->data
然后我可以使用anova测试剂量对观察变量的影响并提取p值:
summary(aov(data$obs~data$DOSE))[[1]][[5]][1]->pvalue
如果我这样做了100次并且我总结了p值低于或等于0.05的次数我会得到I型错误,这个值应该等于5:
Allp<-NULL
for (i in 1:100){
data.frame(
obs=c(rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1)),
HOP=rep(1:4,100),
DOSE=rep(c(0,15,30,50),each=100))->data
summary(aov(data$obs~data$DOSE))[[1]][[5]][1]->pvalue
Allp<-rbind(Allp,pvalue)}
sum(Allp<=0.05)
然而它等于0或1!
我试过假设没有医院的影响:
Allp<-NULL
for (i in 1:100){
data.frame(
obs=c(rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),
rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),
rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),
rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1),rnorm(25,0,1)),
HOP=rep(1:4,100),
DOSE=rep(c(0,15,30,50),each=100))->data
summary(aov(data$obs~data$DOSE))[[1]][[5]][1]->pvalue
Allp<-rbind(Allp,pvalue)}
sum(Allp<=0.05)
在这里,我得到预期的5%。
你能帮我解决这个问题吗?
最佳, 西蒙
答案 0 :(得分:0)
好的,我终于设法解决了这个问题。 这是由于不同的错误:
1)你需要在anova中使用因子(DOSE)
2)我模拟数据集的方式不正确:
data.frame(
obs=c(rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1)),
HOP=rep(rep(1:4,each=25),4),
DOSE=rep(c(0,15,30,50),each=100))->data
3)您需要考虑HOP的影响以正确估计第一类错误:
set.seed(1234)
Allp<-NULL
for (i in 1:100){
data.frame(
obs=c(rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1),
rnorm(25,0,1),rnorm(25,1,1),rnorm(25,2,1),rnorm(25,3,1)),
HOP=rep(rep(1:4,each=25),4),
DOSE=rep(c(0,15,30,50),each=100))->data
summary(aov(data$obs~as.factor(data$DOSE)+as.factor(data$HOP)))[[1]][[5]][1]->pvalue
Allp<-rbind(Allp,pvalue)}
sum(Allp<=0.05)
谢谢你的时间, 西蒙