“Si torturamos los datos lo suficiente, ellos terminarán confensando” - Ronald H. Coase

 

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:


 

Regresión escalonada

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:

  1. Se simula un juego de datos con múltiples variables predictoras generadas independientemente a partir de una distribución normal

  2. Una de estas variables es escogida al azar como la variable respuesta

  3. El resto de variables son “resumidas” usando un análisis de componentes principales (PCA) con el fin de disminuir la colinearidad entre variables

  4. 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

  5. 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


  1. Clone el repositorio de github del curso localmente. Debe trabajar y hacer todos los cambios en el repositorio local


  1. Cree un archivo Rmarkdown que contenga su nombre y el título “Solución tarea 2” y guárdelo en la carpeta principal del repositorio local


  1. Añada el siguiente código en un “chunk” para cargar la función replicar_reg_scal() (al correr source() se carga replicar_reg_scal() en nuestro ambiente de trabajo):
source("./scripts/replicar_reg_scal.R")


  1. Añada otro “chunk” donde calcule la proporción de falsos positivos (el valor que devuelve replicar_reg_scal()) para números de variables (argumento nvars) de 10, 20, 50 y 100.


  1. Añada otro “chunk” donde grafique el número de variables vs. la proporción de falsos positivos. Utilice los argumentos para opciones dentro del “chunk” para centrar el gráfico.


  1. Repita los ejercicios 4 y 5 pero esta vez variando el valor de alfa (siempre usando números menores o iguales a 0.05). Nuevamente, cada paso debe estar en su propio “chunk”.


  1. Añada la información de la sesión en un “chunk” al final del Rmarkdown de forma que muestre la información pero no el código


  1. Suba su repositorio local a un repositorio público en su cuenta personal de github


  1. Publique el html resultante en su cuenta de Rpubs (debe crear una cuenta antes de subirlo)


  1. Ponga una foto de su organismo favorito (no-humano) (no se relaciona al resto, pero ni modo)


Envié un correo a marcelo.araya@ucr.ac.cr con :

  1. el enlace al repositorio de github creado para esta tarea
  2. el enlace a la página de Rpubs donde a subido el html

 


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