Как сравнить значения P в тесте перестановки или рандомизации, перетасовывая только одну переменную в кадре данных - PullRequest
0 голосов
/ 29 мая 2019

Я пишу циклы или функции в R, и я до сих пор не понял, как это сделать. В настоящее время мне нужно написать цикл / функцию (не уверен, какая из них лучше), чтобы создать несколько результатов формулы смешанных моделей в тесте перестановок или рандомизации

образец набора данных выглядит так:

dataset <- read.table(text = 
"ID A_2 B_2 C_2 A_1 B_1 C_1 chkgp
M1  10  20  60  30  54  33  Treatment
M1  20  50  40  33  31  44  Placebo
M2  40  80  40  23  15  66  Placebo
M2  30  90  40  67  67  66  Treatment
M3  30  10  20  22  89  77  Treatment
M3  40  50  30  44  50  88  Placebo
M4  40  30  40  42  34  99  Treatment
M4  30  40  50  33  60  80  Placebo",header = TRUE, stringsAsFactors = FALSE)

У меня есть переменная shuffle chkgp при каждом запуске модели и используется следующий код


mod1<-summary(lmerTest::lmer(A_2~B_1+sample(chkgp)+(1|ID),data = dataset))
mod1
P_value= 2 * (1 - pnorm(abs(mod1$coefficients[3, 4])))
P_value

результат модель 1 после случайного перемешивания 1 раз

Linear mixed model fit by REML. t-tests use Satterthwaite's method ['lmerModLmerTest']
Formula: A_2 ~ B_1 + sample(chkgp) + (1 | ID)
   Data: dataset

REML criterion at convergence: 44.7

Scaled residuals: 
    Min      1Q  Median      3Q     Max 
-0.7792 -0.4441  0.1185  0.3893  0.7734 

Random effects:
 Groups   Name        Variance Std.Dev.
 ID       (Intercept) 122.52   11.069  
 Residual              10.15    3.186  
Number of obs: 8, groups:  ID, 4

Fixed effects:
                       Estimate Std. Error       df t value Pr(>|t|)   
(Intercept)            42.87450    6.49941  4.06743   6.597  0.00258 **
B_1                    -0.27492    0.09149  7.97033  -3.005  0.01702 * 
sample(chkgp)Treatment  1.74313    4.71095  8.33366   0.370  0.72060   
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Correlation of Fixed Effects:
            (Intr) B_1   
B_1         -0.433       
smpl(chkg)T  0.164 -0.748
[1] 0.7113693

Вопрос 1: Мне нужно выяснить, как сравнивать и проверять фактическое значение P одинаково даже после перестановки переменной chkgp 1000

вопрос 2: мне нужно написать 1000 циклических моделей запуска, в каждой из которых необходимо перемешать переменную chkgp.

1 Ответ

0 голосов
/ 29 мая 2019
dataset <- read.table(text = 
                        "ID A_2 B_2 C_2 A_1 B_1 C_1 chkgp
M1  10  20  60  30  54  33  Treatment
M1  20  50  40  33  31  44  Placebo
M2  40  80  40  23  15  66  Placebo
M2  30  90  40  67  67  66  Treatment
M3  30  10  20  22  89  77  Treatment
M3  40  50  30  44  50  88  Placebo
M4  40  30  40  42  34  99  Treatment
M4  30  40  50  33  60  80  Placebo",header = TRUE, stringsAsFactors = FALSE)


storeP <- list(rep(NA, 1000))

for(i in 1:1000) {
  #dataset <- transform(dataset, chkgp = sample(chkgp))
  dataset$chkgp <- ifelse(runif(nrow(dataset)) > 0.5, "Treatment", "Placebo")
  mod1<-summary(lmerTest::lmer(A_2~B_1+sample(chkgp)+(1|ID),data = dataset))
  P_value= 2 * (1 - pnorm(abs(mod1$coefficients[3, 4])))
  storeP[[i]] <- P_value
}

var(unlist(storeP)) == 0

У меня есть два варианта «перетасовки данных»:

  1. случайная сортировка столбца chkgp: transform(dataset, chkgp = sample(chkgp))
  2. случайное присвоение «Обработки» и «Плацебо» переменной с порогом 0,5: ifelse(runif(nrow(dataset)) > 0.5, "Treatment", "Placebo"
...