En esta tarea haremos uso de algunas de las herramientas para incrementar la reproducibilidad científica que hemos visto hasta el momento en el curso. Al mismo tiempo se pretende explorar la fragilidad de una práctica estadística que aún es común en la academia (aunque esto se tratará con mas detalle mas adelante en el curso).
Instrucciones generales:
La regresión escalonada (“stepwise regression”) es un procedimiento que pretende construir un modelo de regresión a partir de un conjunto de variables predictoras candidatas, ingresando y eliminando predictores de manera escalonada en el modelo hasta que no haya una razón “estadísticamente válida” (según sus defensores) para ingresar o quitar más variables.
El objetivo de la regresión escalonada (nuevamente, según sus defensores) es crear un modelo de regresión que incluya todas las variables predictoras que están relacionadas de manera estadísticamente significativa con la variable de respuesta. Vale decir que para otros la regresión escalonada es solo una forma sofisticada de “pescar significancia”. El siguiente ejercicio busca evaluar la robustez estadística de este procedimiento.
En el repositorio de github del curso hemos hecho disponible la función replicar_reg_scal()
(en la sub-carpeta “scripts”) para simular datos con multiples variables respuesta, los cuales pueden ser analizados con una regresión escalonada. Estos son los pasos de la simulacion:
Se simula un juego de datos con múltiples variables predictoras generadas independientemente a partir de una distribución normal
Una de estas variables es escogida al azar como la variable respuesta
El resto de variables son “resumidas” usando un análisis de componentes principales (PCA) con el fin de disminuir la colinearidad entre variables
Para el análisis de regresión se mantienen únicamente los componentes principales que, juntos, contribuyen con al menos 70% de la variación de los datos
La función repite este procedimiento varias veces (según lo defina el usuario) y devuelve un único valor: la proporción de réplicas que produjeron al menos una variable con un efecto significativo (i.e. falsos positivos)
(Nota: entender los pasos que se llevan a cabo dentro de la función no es necesario para poder resolver la tarea)
A excepción del PCA, el procedimiento de la regresión escalonada que se usa dentro de la función es una réplica exacta de lo descrito en el blog sobre regresión escalonada del sitio Statology.
El script que contiene la función provee una descripción detallada de los argumentos y procedimientos (por si fuera de su interés). Solo a manera de ejemplo, el siguiente código corre la función replicar_reg_scal()
usando 20 iteraciones (itr = 20), 30 observaciones por varialble (n = 30), 100 variables por iteración (nvars = 100) y un valor de alfa de 0.05 (alfa = 0.05):
falsos_positivos <- replicar_reg_scal(itr = 20, n = 30, nvars = 100, alfa = 0.05)
Dado que las variables son simuladas de forma independiente, se espera que, en un procedimiento estadístico robusto, el número de falsos positivos (error tipo I) sea cercano a 5% (cuando el alfa es 0.05).
Ejercicios
replicar_reg_scal()
(al correr source()
se carga replicar_reg_scal()
en nuestro ambiente de trabajo):source("./scripts/replicar_reg_scal.R")
replicar_reg_scal()
) para números de variables (argumento nvars
) de 10, 20, 50 y 100.Envié un correo a marcelo.araya@ucr.ac.cr con :
Información de la sesión
## R version 4.0.2 (2020-06-22)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 20.04 LTS
##
## Matrix products: default
## BLAS: /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.9.0
## LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.9.0
##
## locale:
## [1] LC_CTYPE=pt_BR.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=es_CR.UTF-8 LC_COLLATE=pt_BR.UTF-8
## [5] LC_MONETARY=es_CR.UTF-8 LC_MESSAGES=pt_BR.UTF-8
## [7] LC_PAPER=es_CR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=es_CR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## loaded via a namespace (and not attached):
## [1] compiler_4.0.2 magrittr_1.5 tools_4.0.2 htmltools_0.5.0
## [5] yaml_2.2.1 stringi_1.5.3 rmarkdown_2.4 knitr_1.30
## [9] stringr_1.4.0 xfun_0.18 digest_0.6.25 rlang_0.4.7
## [13] evaluate_0.14