使用R中的Anova计算类型I错误的麻烦

时间:2017-03-10 10:23:11

标签: r statistics anova

我试图计算一个简单的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%。

你能帮我解决这个问题吗?

最佳, 西蒙

1 个答案:

答案 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)

谢谢你的时间, 西蒙