我对随机化有啥误解吗?
Posted
技术标签:
【中文标题】我对随机化有啥误解吗?【英文标题】:Am I understanding something wrong about randomization?我对随机化有什么误解吗? 【发布时间】:2021-12-26 12:13:27 【问题描述】:我认为随机化“使治疗组和对照组之间的所有因素(无论是否观察到)均等化”。
为了测试这一点,我执行了以下代码,发现在超过一半的情况下随机化效果不佳 - 这意味着随机分割的治疗组和对照组之间至少有一个变量在统计学上存在差异。
set.seed(1234)
for (i in 1:1000)
ind<-sample(2, 10000, replace=TRUE, prob=c(0.5, 0.5))
a<-as.matrix(rnorm(10000, mean=0, sd=1))
b<-as.matrix(rnorm(10000, mean=0.5, sd=1))
c<-as.matrix(rnorm(10000, mean=1, sd=2))
dt<-data.frame(cbind(a,b,c))
dt$X4 <- dt$X1 + dt$X2
dt$X5 <- dt$X1 * dt$X3
dt1<-dt[ind==1,]
dt2<-dt[ind==2,]
a_pval[i]<-t.test(dt1[1,], dt2[1,])$p.value
b_pval[i]<-t.test(dt1[2,], dt2[2,])$p.value
c_pval[i]<-t.test(dt1[3,], dt2[3,])$p.value
d_pval[i]<-t.test(dt1[4,], dt2[4,])$p.value
e_pval[i]<-t.test(dt1[5,], dt2[5,])$p.value
pval<-data.frame(cbind(a_pval,b_pval,c_pval,d_pval,e_pval))
pval<-mutate(pval, adiff = ifelse(a_pval<0.05, 1,0))
pval<-mutate(pval, bdiff = ifelse(b_pval<0.05, 1,0))
pval<-mutate(pval, cdiff = ifelse(c_pval<0.05, 1,0))
pval<-mutate(pval, ddiff = ifelse(d_pval<0.05, 1,0))
pval<-mutate(pval, ediff = ifelse(e_pval<0.05, 1,0))
pval$diff<-pval$adiff+pval$bdiff+pval$cdiff+pval$ddiff+pval$ediff
table(pval$diff)
length(which(a_pval<0.05))
length(which(b_pval<0.05))
length(which(c_pval<0.05))
length(which(d_pval<0.05))
length(which(e_pval<0.05))
是不是因为我的代码有问题?
【问题讨论】:
为什么是set.seed()
?它将产生可重复的结果(即:非随机)
@Wimpel,结果是伪随机的,因为它们几乎总是在 R 中。有一些方法可以获得真正的随机值(参见 random
包)但几乎没有人使用它们,因为它们是很慢。
【参考方案1】:
我不认为测试在做你认为他们在做的事情。您的 t 检验适用于矩阵的行,而不是列,因此分布不正常,它是正态的退化混合。将 t 测试线更改为
a_pval[i]<-t.test(dt1[,1], dt2[,1])$p.value
b_pval[i]<-t.test(dt1[,2], dt2[,2])$p.value
c_pval[i]<-t.test(dt1[,3], dt2[,3])$p.value
d_pval[i]<-t.test(dt1[,4], dt2[,4])$p.value
e_pval[i]<-t.test(dt1[,5], dt2[,5])$p.value
这将得到解决,您会看到大约 5% 的 p 值小于 0.05,正如预期的那样。
老实说,我不明白您希望在pval$diff
表中看到什么。由于第 4 列和第 5 列基于前 3 列,因此这些列是相互依赖的,您不应期望看到标准的计数分布。
【讨论】:
感谢您的评论!更改的行起作用了,它返回了我期望的结果。pval$diff
表是为了查看获得“平衡良好的随机分割(意味着 p 值在所有 5 个变量中都足够大)”的概率。以上是关于我对随机化有啥误解吗?的主要内容,如果未能解决你的问题,请参考以下文章