class: center, middle, inverse, title-slide # Introducción a la simulación de datos en Psicología ## II Jornada de Metodología Cuantitativa en Psicología - AMP ### Brian Norman Peña Calero ### Avances en Medición Psicológica ### 16/10/2020 --- # Acerca de esta presentación Las diapositivas fueron expuestas en la II Jornada de Metodología Cuantitativa en Psicología organizada por [Avances en Medición Psicológica](https://www.facebook.com/amp.unmsm). El video de la ponencia pueden encontrarlo dándole click en el siguiente enlace: https://www.facebook.com/amp.unmsm/videos/364404511344708/ Las diapositivas fueron elaboradas mediante el paquete [xaringan](https://github.com/yihui/xaringan) en R 4.0.2. Para una óptima visualización del mismo, recomiendo ir al siguiente enlace: [https://brianmsm.github.io/jornada-amp-simulacion/](https://brianmsm.github.io/jornada-amp-simulacion/), además que podrá siempre tener la versión actualizada de la misma. El código fuente está disponible en el siguiente enlace: [https://github.com/brianmsm/jornada-amp-simulacion](https://github.com/brianmsm/jornada-amp-simulacion). --- class: inverse, center, middle # Método Montecarlo
--- class: middle .pull-left[.font120[.line-space1-5[ *Es el uso de procesos aleatorios para cuantificar y estudiar distribuciones aleatorias, y a partir de ello analizar y comparar procedimientos estadísticos así como comportamientos de datos en sistemas más complejos <a name=cite-gentle_monte_2005></a>([Gentle, 2005](https://doi.org/10.1002/0470013192.bsa412)).* ]]] .pull-right[ <img src="img/ruleta.jpg" width="100%" style="display: block; margin: auto;" /> ] --- ## Para ello necesitamos: .pull-left[.line-space2-0[ - Software para simulación - Obtener aleatoriamente datos - Distribución o fórmula subyacente a esa intención - Condiciones - Replicaciones - Evaluación ]] .pull-right[ <img src="img/normal_simulada1.gif" style="display: block; margin: auto;" /> ] --- ### Software simulación Existen diversos softwares de costo para realizar simulación de datos ([goldsim](https://www.goldsim.com/), [xlstat](https://www.xlstat.com/es/soluciones/funciones/simulacion), [vose](https://www.vosesoftware.com/Monte-Carlo-simulation.php), etc.), sin embargo tienen la limitación de restringirse a funciones y soluciones específicas de determinado sector de interés. Por ej. riesgos financieros. A fin de tener control total acerca de lo que se hará con los datos, condiciones y formas de evaluarlo, es recomendable utilizar un lenguaje de programación, entre los cuales puede estar C, C++, Ruby, Python, R, etc. Aunque R, es el lenguaje *más lento* entre los mencionados, es el más difundido en cuanto a análisis de datos (en un sentido similar con `python`) y de fácil entendimiento. --- ### Aleatoriedad de datos Generar un número aleatorio es extremadamente complejo, y conlleva una serie de dificultades y requisitos que no solo se restrinjen al software <a name=cite-park_random_1988></a>([Park and Miller, 1988](https://doi.org/10.1145/63039.63042)), sino también al hardware. Lo que obtenemos en el software son `números pseudo-aleatorios` puesto que parten de un mismo puerto (`semilla`) pre-determinada para generarse. .pull-left[ ```r round(runif(n = 2, min = 1, max = 5), 1) # Primer intento ``` ``` ## [1] 4.8 2.2 ``` ```r round(runif(n = 2, min = 1, max = 5), 1) # Segundo intento ``` ``` ## [1] 1.5 2.2 ``` ] .pull-right[ ```r set.seed(123) # Establecer semilla round(runif(n = 2, min = 1, max = 5), 1) # Primer intento ``` ``` ## [1] 2.2 4.2 ``` ```r set.seed(123) round(runif(n = 2, min = 1, max = 5), 1) # Segundo intento ``` ``` ## [1] 2.2 4.2 ``` ] --- ### Distribución o fórmula subyacente .pull-left[ **Función de densidad para** `\(X \sim \mathcal{N}(\mu,\,\sigma^{2})\,.\)` <img src="https://i.upmath.me/svg/%0AP(x)%20%3D%20%5Cfrac%7B1%7D%7B%7B%5Csigma%20%5Csqrt%20%7B2%5Cpi%20%7D%20%7D%7De%5E%7B%7B%7B%20-%20%5Cleft(%20%7Bx%20-%20%5Cmu%20%7D%20%5Cright)%5E2%20%7D%20%5Cmathord%7B%5Cleft%2F%20%7B%5Cvphantom%20%7B%7B%20-%20%5Cleft(%20%7Bx%20-%20%5Cmu%20%7D%20%5Cright)%5E2%20%7D%20%7B2%5Csigma%20%5E2%20%7D%7D%7D%20%5Cright.%20%5Ckern-%5Cnulldelimiterspace%7D%20%7B2%5Csigma%20%5E2%20%7D%7D%7D%0A" width="400" height="100"> **Función de distribución para** `\(X \sim \mathcal{N}(\mu,\,\sigma^{2})\,.\)` `\(F(x)=P(X≤x)\)` ] .pull-right[ ```r x <- seq(-3, 3, 1) dens_norm <- dnorm(x, mean = 0, sd = 1) dens_norm ``` ``` ## [1] 0.004431848 0.053990967 0.241970725 0.398942280 0.241970725 0.053990967 ## [7] 0.004431848 ``` ```r pnorm(3, mean = 0, sd = 1) ``` ``` ## [1] 0.9986501 ``` ```r pnorm(1.96, mean = 0, sd = 1) ``` ``` ## [1] 0.9750021 ``` ```r qnorm(0.975, mean = 0, sd = 1) ``` ``` ## [1] 1.959964 ``` ] --- ### Distribución o fórmula subyacente Con la función `rnorm()` se pueden generar números pseudo-aleatorios provenientes de una distribución normal. En base a esto se pueden realizar algunos ensayos. .pull-left[ ```r library(tidyverse) set.seed(123) dist_normal <- tibble(Media = rnorm(n = 300, mean = 10, sd = 1.2)) grupo_a <- dist_normal %>% sample_frac(size = 0.5) grupo_b <- dist_normal %>% anti_join(grupo_a) dist_normal <- bind_rows(grupo_a, grupo_b) %>% mutate( Grupo = c(rep("A", 150), rep("B", 150)) ) ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-7-1.png" style="display: block; margin: auto;" /> ] --- ### Distribución o fórmula subyacente Ahora, el ensayo tiene la misma intención pero generando datos aleatorios desde 2 distribuciones distintas. Esto es lo que estaría evaluándose bajo la hipótesis de que ***hay diferencia de medias en 2 grupos***, que en esencia indica que los grupos provienen de distribuciones distintas. .pull-left[ ```r dist_norm_A <- tibble(Media = rnorm(n = 150, mean = 10, sd = 1.2)) dist_norm_B <- tibble(Media = rnorm(n = 150, mean = 14, sd = 0.8)) dist_normal_dif <- bind_rows(dist_norm_A, dist_norm_B) %>% mutate( Grupo = c(rep("A", 150), rep("B", 150)) ) ``` ] .pull-right[ <img src="index_files/figure-html/unnamed-chunk-9-1.png" style="display: block; margin: auto;" /> ] --- ### Condiciones .line-space1-5[ Las condiciones son uno de los componentes claves en el desarrollo de un experimento de simulación Montecarlo, puesto que permite controlar que variables influirán en las evaluaciones y generación de datos que se realicen, y hasta que punto la simulación puede acercarse a condiciones realistas. Algunas condiciones comunes y de utilidad son: - Diferenciar tamaños de muestras - Distribución no-normal de los datos - Presencia de outliers - Grupos desiguales - Presencia de heterocedasticidad ] --- ### Condiciones .line-space1-5[ Así, en caso haya 4 variaciones de tamaño de muestra, 3 grupos desiguales, y consideración de normalidad y no-normalidad, se tendría un diseño de 4x3x2 en la generación de los datos. En ese sentido, si se generá un mínimo de 50 datos por condición, se podría estar trabajando con 3600 datos aproximadamente. Es común observar estudios de simulación que consideren más de 150 condiciones combinadas al mismo tiempo. En estudios psicométricos, las condiciones pueden aumentar si se toma en cuenta la `cantidad de ítems`, `carga factorial`, `cantidad de factores` y `fiabilidad en cada factor`. ] --- ### Replicaciones .line-space1-5[ Las replicaciones permiten controlar problemas de error por la generación de números pseudo-aleatorios. Se trabaja bajo el supuesto de **tendencia**. Si 1 sola generación de datos indica que la prueba de `shapìro-wilk` no detecta adecuadamente la distribución normal de los datos, podría deberse a un error aleatorio. Sin embargo, la cuestión cambia si se trata de 459 de 1000 veces que se hace la generación de datos exactamente en las mismas condiciones. Los números de replicaciones más comunes oscilan entre 500 y 1000. Por lo que, en el ejemplo anterior tenemos, `4x3x2x1000`, lo que lleva al trabajo con `3 600 000` aproximadamente. ] --- ### Evaluación .line-space1-5[ Posterior a la elaboración del diseño y la generación de datos aleatorios correctamente gestionados, se debe evaluar el objetivo del mismo: - Comportamiento del estimador en diversas condiciones: RMSE y sesgo <a name=cite-harwell_strategy_2019></a>([Harwell, 2019](https://doi.org/10.22237/jmasm/1551907966)) - % de Error tipo I y II - Potencia estadística presente ] .pull-left[  ] .pull-right[  ] --- ## Aplicaciones: .line-space1-2[ - **Aprendizaje de estadística** - **Investigación Metodológica** - Análisis del funcionamiento de estadísticos en investigación **empírica**. Ej: - Uso de t-student - Correlación de Pearson - Análisis del funcionamiento de estadísticos en investigación **psicométrica**. Ej: - Análisis factorial confirmatorio - Coeficiente omega y alfa - Índices de ajuste: CFI, TLI, RMSEA, SRMR - Funcionamiento de estadísticos en diferentes **condiciones**. Ej: - Tamaño de muestras distintos - Presencia de no-normalidad - Presencia de outliers - Data missing ] --- ### Aprendizaje de estadística [](https://www.tandfonline.com/doi/full/10.1080/10691898.2020.1720551) --- ### Investigación metodológica [](https://www.tandfonline.com/doi/full/10.1080/00949655.2010.520163) --- class: center ### Investigación metodológica <!-- ```{r inv_met, echo=FALSE, out.width = '78%'} --> <!-- knitr::include_graphics("img/screenshot_invest_met2.png", dpi = 600) --> <!-- ``` --> <img src="img/screenshot_invest_met2.png" width="78%" style="display: block; margin: auto;" /> Fuente: [Tandfonline](https://www.tandfonline.com/doi/full/10.1080/00949655.2010.520163) --- ### Investigación metodológica <embed src="https://drive.google.com/viewerng/ viewer?embedded=true&url=http://www.de.ufpb.br/~ulisses/disciplinas/normality_tests_comparison.pdf" width="1100" height="500"> --- class: inverse, center, middle # ¡Gracias por su atención!