Aquellos que ignoran la estadística etcétera

Ayer asistí a una charla sobre errors. Brevemente (porque está estupendamente explicado, motivado y documentado por su autor, al que aprovecho la ocasión para saludar), hace esto:

Y nuestro viejo, clásico, manido, infrautilizado, semidesconocido mas no por ello menos querido método delta, ¿para qué existe en lugar de (como elucubraba el filósofo), simplemente, no existir? ¿Para qué otra cosa sino para aprenderlo me levanté yo aquella fría mañana del 94 sino para contemplarlo proyectado de diapositivas manuscritas de acetato? ¿Fue en vano?

Pues no, el método delta vive, colea y pega soberanas patadas en el culo. Así:

13 comentarios sobre “Aquellos que ignoran la estadística etcétera

  1. Iñaki 24 mayo, 2017 11:14

    Por completitud, dejo aquí la versión msmera, de salida un poco más parca:

    library(msm)
    deltamethod(~ x1 * sin(x2)^3, valores, diag(vars))
    #> [1] 1.277012
    
  2. Juan V. 25 mayo, 2017 10:35

    Hola Carlos,

    Aprovecho tu interesante entrada para lanzarte una pregunta que realmente es de SAS (no R) y de regresiones logísticas. La cuestión aplica tanto si lo haces en SAS, como en R
    The question:
    Estoy creando un modelo de regresión logistica con SAS con
    proc logistic. Todas las vars de input que incluyo en el modelo han sido validadas
    previamente (lo mejor q he podido) para comprobar que la variable de target tiene dependencia con ellas.

    En mi exploración previa me encuentro una fuerte correlación (0.9) entre 2 vars de input. A saber: rango_ant y rango_edad. Creo que esto se llama “multicolinealidad” en un modelo, ¿correcto?

    Pues que no tengo muy claro cómo proceder…¿quito una de las vars de mi modelo?
    Este es mi modelo:

    proc logistic data=test outmodel=modelo1 plots(only)=roc;
    class cod_posicion nivel_sal rango_edad rango_ant rango_eval;
    model baja = rango_edad rango_ant nivel_sal rango_eval cod_posicion ;
    quit;

    ¿Utilizo efectos cruzados añadiendo una var que sea multiplicación de las dos?

    proc logistic data=test outmodel=modelo1 plots(only)=roc;
    class cod_posicion nivel_sal rango_edad rango_ant rango_eval;
    model baja = rango_edad rango_ant nivel_sal rango_eval cod_posicion rango_edad*rango_ant ;
    quit;

    ¿aplico análisis componentes principales y me quedo con menos vars?

    Te agradezco cualquier orientación porque ando perdidillo…

    Muchas gracias,

  3. Carlos J. Gil Bellosta 25 mayo, 2017 15:55

    Hummm… Si entiendo el significado de las variables (edad y antigüedad), puede que esa (o gran parte de esa) correlación sea debida a la parametrización de las variables: más edad, más antigüedad, en principio. Igual podrías parametrizar de otra manera (edad y edad de alta) que redujese la covarianza. Que viene a ser algo muy parecido a lo que obtendrías de usar PCA, solo que controlarías el significado de las variables generadas. En cualquier caso, te vas a encontrar con “algo” que signifique edad y “algo” que signifique la desviación de las altas con respecto a la edad más o menos ortogonal al anterior. Hazlo a escuadra con PCA o aproximadamente con coeficientes de tu elección.

  4. Juan V. 25 mayo, 2017 16:34

    Ok, voy a darle una vuelta a lo que dices. De momento, he visto que si dentro del procedimiento meto selección de variables (selection=stepwise) me elimina antigüedad y mejora un pelín el modelo. También he probado con efectos cruzados (añadir rango_edad*rango_ant como var input) y esto no tiene efecto, pero tengo la duda de si tiene sentido hacer esto último, ya que tengo dudas sobre la utilidad de los efectos cruzados. Probaré lo que dices. Una última duda, si me voy por un decision tree, entiendo que la correlación entre vars input no me debería afectar o estoy equivocado?. Gracias por la ayuda

  5. jbm 26 mayo, 2017 17:05

    Juan: ¿has pensado en usar regularización para impedir que la varianza de los coeficientes se te vaya a las nubes? En R, tenemos el paquete glmnet para estos menesteres.

  6. Juan V. 26 mayo, 2017 22:31

    Hola jbm, ¿a qué te refieres por regularización?, ¿estandarízación de variables?. (media = 0 y std = 1). Comentame, gracias

  7. Carlos J. Gil Bellosta 26 mayo, 2017 23:57

    Lo de la regularización se refiere a las fórmulas 1-3 de este artículo. Esencialmente, es un método bayesiando en el que fuerzas a los coeficientes a no ser demasiado distintos de cero.

    Ese tipo de métodos de regularización permite seleccionar variables: en determinados casos, el coeficiente de alguna de las variables es un cero (cero, no solo aproximadamente cero) por lo que se puede considerar excluida del modelo. Es una alternativa moderna a los métodos stepwise, que se consideran inadecuados hoy en día.

  8. Daniel T 27 mayo, 2017 10:09

    Hola, el paquete glmnet es muy interesante, digamos que intenta obtener un modelo lineal pero haciendo pequeños los coeficientes en caso de que sea posible tal cosa, para ello hay dos métodos uno se llama LASSO y el otro RIDGE y ambos son útiles en determinadas circunstancias pero a veces es necesario utilizar ambos, es decir una media ponderada. Resulta que cuando hay pocas variables y están correlacionadas el método LASSO es ideal porque tiende a quedarse con menos variables y así tiene mejor poder explicativo, el método RIDGE es preferible cuando hay muchas variables y todas ellas tienen un pequeño efecto. Afortunadamente el paquete glmnet hace todo esto automaticamente mediante la llamada cross validation y encuentra la opción más favorable. Un ejemplo que ilustra estas ideas lo puedes ver en http://www4.stat.ncsu.edu/~post/josh/LASSO_Ridge_Elastic_Net_-_Examples.html
    Saludos.

  9. Daniel T 27 mayo, 2017 10:15

    Aunque sé que cualquier iniciativa requiere mucho esfuerzo y nadie está para ello, quizás sería interesante poner ejemplos de predicciones usando distintos paquetas sobre temas de actualidad: predicciones sobre la bolsa, el ibex, los índices de paro, los equipos de fútbol, modelos bayesianos usando paquetes de redes bayesianas y demás ideas. Los seguidores de R pueden encontrar mucha información en r-bloggers y páginas similares, y también kaggle puede ser una fuente de inspiración, pero tal vez desde nuestra querida patria podríamos hacer algún tipo de pequeños torneo de predicción sobre temas de actualidad mostrando el uso de R y de los paquetes y recursos computaciones a nuestro alcance hoy día, con ello podríamos decir que sí estamos modernizando los enfoques para resolver problemas. Saludos.

  10. Juan V. 27 mayo, 2017 10:40

    De acuerdo, le daré un ojo. Muchas gracias por la ayuda

  11. jbm 30 mayo, 2017 17:26

    Los compañeros ya te lo han explicado muy bien. Como señala Carlos, es una forma implícita de seleccionar variables. El método, automáticamente, desechará las variables (o hace muy pequeños sus coeficientes o los hace cero) que estén muy correlacionadas. Así, no hay que romperse la cabeza pensando qué variables seleccionar.

  12. Daniel V 1 junio, 2017 10:00

    Hablando sobre las variables de rango de antigüedad y la de edad hay que tener en cuenta que aunque estén fuertemente correlacionadas pueden tener un efecto muy distinto en la variable respuesta, por ejemplo una empresa que penaliza a la gente mayor y otra que recompensa la antigüedad en la empresa necesitan poner el énfasis en una u otra variable y por tanto la fuerte correlación no puede ser usada para eliminar o atenuar la importancia de la otra variable.

    Por ejemplo desde el punto de vista del sueldo de un empleado ambas variables tienen una importancia capital que se refleja en el tipo de política salarial que utiliza la empresa, evidentemente las máquinas no pueden saber este tipo de cosas, por ello los analistas deben ser capaces de predecir el efecto de las variables en la respuesta y considerar casos como este.

  13. Daniel V 1 junio, 2017 10:04

    Se me olvidaba comentar que la solución a emplear puede ser considerar la interrelación entre ambos factores agregando las variables correspondientes al modelo lineal creo que es
    lm(response ~ edad + antiguedad + edad:antiguedad + otras) , o creo que se podía emplear
    lm (response ~ . + edad*antiguedad)

Los comentarios están desabilitados.