From d7264228c3c80a69a3a480d43079c1c369f71bf0 Mon Sep 17 00:00:00 2001
From: Walmes Zeviani <walmes@ufpr.br>
Date: Wed, 17 Oct 2018 18:59:50 -0300
Subject: [PATCH] =?UTF-8?q?Adiciona=20script=20com=20dicas=20para=20estudo?=
 =?UTF-8?q?s=20de=20simula=C3=A7=C3=A3o.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 scripts/ce089-09.R | 71 ++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 71 insertions(+)
 create mode 100644 scripts/ce089-09.R

diff --git a/scripts/ce089-09.R b/scripts/ce089-09.R
new file mode 100644
index 0000000..6e680d5
--- /dev/null
+++ b/scripts/ce089-09.R
@@ -0,0 +1,71 @@
+#=======================================================================
+# Formas eficientes para fazer estudos de simulação/reamostragem.
+
+#-----------------------------------------------------------------------
+# Cria a função com lista de todos os argumentos e use mapply().
+
+library(microbenchmark)
+
+# Curva de poder.
+power_k_groups <- function(k = 3,
+                           r = 4,
+                           sigma_group = 0.01,
+                           simulations = 50,
+                           alpha = 0.05) {
+    trt <- gl(n = k, k = r)
+    X <- model.matrix(~0 + trt)
+    results <- replicate(simulations, {
+        b <- rnorm(k, mean = 0, sigma_group)
+        y <- rnorm(k * r, mean = X %*% b, sd = 1)
+        anova(lm(y ~ X))[1, 5]
+    })
+    mean(results <= alpha)
+}
+
+# Criar o grid de condições (prototipar com um grid pequeno).
+grid <- expand.grid(k = 3:5,
+                    r = c(3, 5, 8),
+                    sigma_group = seq(0.01, 0.5, length.out = 10),
+                    KEEP.OUT.ATTRS = FALSE)
+nrow(grid)
+
+# Aplicar.
+grid$taxa <- mapply(FUN = power_k_groups,
+                    k = grid$k,
+                    r = grid$r,
+                    sigma_group = grid$sigma_group,
+                    MoreArgs = list(simulations = 10,
+                                    alpha = 0.05),
+                    SIMPLIFY = TRUE)
+
+#-----------------------------------------------------------------------
+# Usando purrr.
+
+library(purrr)
+
+grid$taxa <- pmap_dbl(.l = grid,
+                      .f = power_k_groups,
+                      simulations = 10,
+                      alpha = 0.05)
+
+#-----------------------------------------------------------------------
+
+library(microbenchmark)
+
+microbenchmark(
+    mapply = {
+        mapply(FUN = power_k_groups,
+               k = grid$k,
+               r = grid$r,
+               sigma_group = grid$sigma_group,
+               MoreArgs = list(simulations = 10,
+                               alpha = 0.05),
+               SIMPLIFY = TRUE)
+    },
+    pmap = {
+        pmap_dbl(.l = grid,
+                 .f = power_k_groups,
+                 simulations = 10,
+                 alpha = 0.05)
+    },
+    replications = 20)
-- 
GitLab