我認為隨機化“平衡了治療組和對照組之間的所有因素(無論是否觀察到)”。
為了測驗這一點,我執行了下面的代碼,發現在超過一半的情況下,隨機化效果不佳——這意味著至少有一個變數在隨機分割的治療組和對照組之間存在統計學差異。
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))
是不是因為我的代碼有問題?
uj5u.com熱心網友回復:
我不認為測驗正在做你認為他們正在做的事情。您的 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 列,因此這些列是相關的,您不應期望看到計數的標準分布。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/360610.html
