Я что-то неправильно понимаю в рандомизации?

#r #testing #random #p-value #balance

Вопрос:

Я думал, что рандомизация » выравнивает все факторы (независимо от того, наблюдаются они или нет)» между группой лечения и контрольной группой.

Чтобы проверить это, я выполнил приведенный ниже код и обнаружил, что более чем в половине случаев рандомизация работала не очень хорошо — это означало, что по крайней мере одна переменная статистически отличалась между случайно разделенной группой лечения и контрольной группой.

  set.seed(1234) for (i in 1:1000){    indlt;-sample(2, 10000, replace=TRUE, prob=c(0.5, 0.5))    alt;-as.matrix(rnorm(10000, mean=0, sd=1))  blt;-as.matrix(rnorm(10000, mean=0.5, sd=1))   clt;-as.matrix(rnorm(10000, mean=1, sd=2))  dtlt;-data.frame(cbind(a,b,c))  dt$X4 lt;- dt$X1   dt$X2  dt$X5 lt;- dt$X1 * dt$X3    dt1lt;-dt[ind==1,]  dt2lt;-dt[ind==2,]    a_pval[i]lt;-t.test(dt1[1,], dt2[1,])$p.value  b_pval[i]lt;-t.test(dt1[2,], dt2[2,])$p.value  c_pval[i]lt;-t.test(dt1[3,], dt2[3,])$p.value  d_pval[i]lt;-t.test(dt1[4,], dt2[4,])$p.value  e_pval[i]lt;-t.test(dt1[5,], dt2[5,])$p.value }  pvallt;-data.frame(cbind(a_pval,b_pval,c_pval,d_pval,e_pval))  pvallt;-mutate(pval, adiff = ifelse(a_pvallt;0.05, 1,0)) pvallt;-mutate(pval, bdiff = ifelse(b_pvallt;0.05, 1,0)) pvallt;-mutate(pval, cdiff = ifelse(c_pvallt;0.05, 1,0)) pvallt;-mutate(pval, ddiff = ifelse(d_pvallt;0.05, 1,0)) pvallt;-mutate(pval, ediff = ifelse(e_pvallt;0.05, 1,0)) pval$difflt;-pval$adiff pval$bdiff pval$cdiff pval$ddiff pval$ediff  table(pval$diff)  length(which(a_pvallt;0.05)) length(which(b_pvallt;0.05)) length(which(c_pvallt;0.05)) length(which(d_pvallt;0.05)) length(which(e_pvallt;0.05))   

Это потому, что с моим кодом что-то не так?

Комментарии:

1. почему set.seed() это ? Это создаст воспроизводимые результаты (т. е.: не случайные).

2. @Wimpel, результаты являются псевдослучайными, как это почти всегда бывает в R. Есть способы получить истинные случайные значения (см. random Пакет), но почти никто их не использует, потому что они очень медленные.

Ответ №1:

Я не думаю, что тесты делают то, что вы думаете, что они делают. Ваши t-тесты работают со строками ваших матриц, а не со столбцами, поэтому распределение не является нормальным, это вырожденная смесь нормалей. Измените тестовые строки t на

 a_pval[i]lt;-t.test(dt1[,1], dt2[,1])$p.value b_pval[i]lt;-t.test(dt1[,2], dt2[,2])$p.value c_pval[i]lt;-t.test(dt1[,3], dt2[,3])$p.value d_pval[i]lt;-t.test(dt1[,4], dt2[,4])$p.value e_pval[i]lt;-t.test(dt1[,5], dt2[,5])$p.value  

и это будет исправлено, и вы увидите, что около 5% ваших значений p меньше 0,05, как и ожидалось.

Я, честно говоря, не понимаю, что вы ожидали увидеть в pval$diff таблице. Поскольку столбцы 4 и 5 основаны на первых 3 столбцах, столбцы зависят друг от друга, и вы не должны ожидать, что увидите стандартное распределение подсчетов.

Комментарии:

1. Спасибо за ваш комментарий! Измененные строки сработали, и это дало результаты, которых я ожидал. pval$diff таблица должна была показать вероятность получения » хорошо сбалансированного случайного разделения(то есть ожидается, что значения p будут достаточно большими во всех 5 переменных)».