Profesor del programa de Ingeniería Industrial, Universidad Sergio Arboleda. Candidato a doctor en Ingeniería de la Universidad de los Andes.

Clase 3 - Modelos y herramientas básicas para la analítica de datos

La analítica de datos (DA) es el proceso de examinar conjuntos de datos para extraer conclusiones sobre la información que contienen, cada vez más con la ayuda de sistemas y software especializados. Las tecnologías y técnicas de análisis de datos se utilizan ampliamente en las industrias comerciales para permitir que las organizaciones tomen decisiones comerciales más informadas y los científicos e investigadores puedan verificar o refutar los modelos, las teorías y las hipótesis científicas.

Como término, el análisis de datos se refiere principalmente a una variedad de aplicaciones, desde inteligencia de negocios (BI) hasta diversas formas de análisis avanzado. Las iniciativas de analítica de datos pueden ayudar a las empresas a aumentar los ingresos, mejorar la eficiencia operativa, optimizar las campañas de marketing y los esfuerzos de servicio al cliente, responder más rápidamente a las tendencias de los mercados emergentes y obtener una ventaja competitiva sobre los rivales, todo con el objetivo final de impulsar el rendimiento empresarial. Dependiendo de la aplicación en particular, los datos que se analizan pueden consistir en registros históricos o información nueva que se haya procesado para usos de análisis en tiempo real. Además, puede provenir de una combinación de sistemas internos y fuentes de datos externas.

Sin embargo, sin importar el tipo de datos o la pregunta específica que querramos hacer, el proceso que debemos llevar a cabo es el mismo (figura 1)

Figura 1: Proceso de la analítica de datos

Figura 1: Proceso de la analítica de datos

Las aplicaciones de análisis de datos implican más que solo analizar datos. Particularmente en los proyectos de analítica avanzada, gran parte del trabajo requerido se realiza por adelantado, en la recopilación, integración y preparación de datos y luego en el desarrollo, prueba y revisión de modelos analíticos para garantizar que producen resultados precisos. Además de los científicos de datos y otros analistas de datos, los equipos de análisis suelen incluir ingenieros de datos, cuyo trabajo es ayudar a preparar los conjuntos de datos para su análisis.

El proceso de análisis comienza con la recopilación de datos, en la que los científicos de datos identifican la información que necesitan para una aplicación de análisis en particular . Es posible que los datos de diferentes sistemas de origen deban combinarse a través de rutinas de integración de datos, transformarse en un formato común y cargarse en un sistema de análisis.

Una vez que los datos que se necesitan están en su lugar, el siguiente paso es encontrar y solucionar los problemas de calidad de los datos que podrían afectar la precisión de las aplicaciones de análisis. Esto incluye la ejecución de trabajos de creación de perfiles de datos y de limpieza de datos para asegurarse de que la información de un conjunto de datos sea coherente y que se eliminen los errores y las entradas duplicadas.

En ese punto, el trabajo de análisis de datos comienza en serio. Un científico de datos construye un modelo analítico, utilizando herramientas de modelado predictivo u otro software de análisis y lenguajes de programación como R. El modelo se ejecuta contra el conjunto de datos, algo que se puede hacer una vez para abordar una necesidad de información específica o de forma continua a medida que se actualizan los datos.

En un nivel alto, las metodologías de analítica de datos incluyen el análisis exploratorio de datos (EDA), que tiene como objetivo encontrar patrones y relaciones en los datos (que vimos la clase pasada), y el análisis confirmatorio de datos (CDA), que aplica técnicas estadísticas para determinar si las hipótesis sobre un conjunto de datos son verdaderas o falsas. A menudo, la EDA se compara con el trabajo de detective, mientras que la CDA es similar al trabajo de un juez o jurado durante un juicio en el tribunal, una distinción que el estadístico John W. Tukey hizo en primer lugar en su libro Exploratory Data Analysis de 1977.

La analítica de datos también se puede separar en análisis de datos cuantitativos y análisis de datos cualitativos. El primero implica el análisis de datos numéricos con variables cuantificables que pueden compararse o medirse estadísticamente. El enfoque cualitativo es más interpretativo: se centra en comprender el contenido de datos no numéricos como texto, imágenes, audio y video, incluidas frases comunes, temas y puntos de vista.

En algunos casos, las aplicaciones de análisis pueden configurarse para desencadenar automáticamente acciones comerciales, por ejemplo, operaciones bursátiles realizadas por una empresa de servicios financieros. De lo contrario, el último paso en el proceso de análisis de datos es comunicar los resultados generados por los modelos analíticos a los ejecutivos de negocios y otros usuarios finales para ayudarlos en la toma de decisiones. Por lo general, esto se hace con la ayuda de técnicas de visualización de datos, que los equipos de análisis utilizan para crear gráficos y otras infografías diseñadas para que sus hallazgos sean más fáciles de entender. Las visualizaciones de datos a menudo se incorporan en las aplicaciones del panel de BI que muestran los datos en una sola pantalla y se pueden actualizar en tiempo real a medida que se dispone de nueva información.

El día de hoy nos centraremos en aprender los modelos básicos para el análisis confirmatorio de datos usando los siguientes modelos: ** pruebas T, pruebas de chi cuadraro, ANOVAs, pruebas no paramétricas, regresiones lineales y regresiones logísticas **

Pruebas de hipótesis

En la prueba de hipótesis, una pregunta de investigación es una hipótesis formulada en formato de pregunta. Una pregunta de investigación puede ser: ¿Hay una diferencia significativa entre algo? Una hipótesis puede ser, hay una diferencia significativa entre algo. La pregunta de investigación comienza con Está ahí y la hipótesis comienza con Existe.

Puedes usar pruebas estadísticas para obtener tu p-valor. Utiliza una prueba t para variables o datos continuos y una prueba chi-cuadrado para variables categóricas. Para pruebas más complejas, se usa ANOVA. Si los datos no se distribuyen normalmente, se utilizan pruebas no paramétricas. Un valor P le ayuda a determinar la importancia de los resultados de sus pruebas estadísticas. Su afirmación en la prueba se conoce como hipótesis nula y la hipótesis alternativa significa que usted cree que la hipótesis nula no es cierta. Para ayudarnos a escoger cuál es la prueba que más nos sirve nos apoyaremos en la gráfica 2

Figura 2: Tipos de pruebas de hipótesis

Figura 2: Tipos de pruebas de hipótesis

Pruebas T

Antes de empezar a realizar pruebas específicas sobre nuestros datos, debemos cargarlos y revisar qué tipo de información tenemos en nuestro archivo de datos.

library('readr')
data <- read_csv("Clase 3.csv")
## Parsed with column specification:
## cols(
##   ID = col_double(),
##   City = col_character(),
##   Gender = col_character(),
##   Age = col_double(),
##   Income = col_double(),
##   Illness = col_character(),
##   Height1 = col_double(),
##   Height2 = col_double(),
##   Height3 = col_double(),
##   Weight1 = col_double(),
##   Weight2 = col_double(),
##   Weight3 = col_double(),
##   Smoker = col_double(),
##   Drinker = col_double(),
##   Cocaine = col_double(),
##   ExerciseTime = col_double()
## )
str(data)
## Classes 'spec_tbl_df', 'tbl_df', 'tbl' and 'data.frame': 150000 obs. of  16 variables:
##  $ ID          : num  1 2 3 4 5 6 7 8 9 10 ...
##  $ City        : chr  "Dallas" "Dallas" "Dallas" "Dallas" ...
##  $ Gender      : chr  "Male" "Male" "Male" "Male" ...
##  $ Age         : num  41 54 42 40 46 36 32 39 51 30 ...
##  $ Income      : num  40367 45084 52483 40941 50289 ...
##  $ Illness     : chr  "No" "No" "No" "No" ...
##  $ Height1     : num  144 199 160 155 193 160 166 168 191 205 ...
##  $ Height2     : num  190 160 174 184 121 160 184 172 155 168 ...
##  $ Height3     : num  180 195 197 180 187 187 186 184 200 201 ...
##  $ Weight1     : num  70 68 106 34 156 105 110 168 100 98 ...
##  $ Weight2     : num  77 70 66 128 98 68 93 56 107 72 ...
##  $ Weight3     : num  68 116 86 79 65 119 71 76 92 87 ...
##  $ Smoker      : num  1 0 1 0 0 0 1 0 1 1 ...
##  $ Drinker     : num  1 0 0 0 1 1 0 0 1 0 ...
##  $ Cocaine     : num  0 0 0 0 0 1 0 0 1 0 ...
##  $ ExerciseTime: num  23 21 17 0 3 13 3 9 0 17 ...
##  - attr(*, "spec")=
##   .. cols(
##   ..   ID = col_double(),
##   ..   City = col_character(),
##   ..   Gender = col_character(),
##   ..   Age = col_double(),
##   ..   Income = col_double(),
##   ..   Illness = col_character(),
##   ..   Height1 = col_double(),
##   ..   Height2 = col_double(),
##   ..   Height3 = col_double(),
##   ..   Weight1 = col_double(),
##   ..   Weight2 = col_double(),
##   ..   Weight3 = col_double(),
##   ..   Smoker = col_double(),
##   ..   Drinker = col_double(),
##   ..   Cocaine = col_double(),
##   ..   ExerciseTime = col_double()
##   .. )

Una prueba t es una de las pruebas más importantes en estadística. Se utiliza una prueba t para determinar si la media entre dos puntos de datos o muestras son iguales entre sí.Existen varios tipos de pruebas T que podemos realizar, dependendiendo de los datos que vayamos a analizar (figura 3)

Figura 3: Tipos de pruebas T

Figura 3: Tipos de pruebas T

La hipótesis nula significa que los dos medios son iguales, y la alternativa significa que los dos medios son diferentes.La primera versión es probar que la media corresponde a un valor de media dado. Para ello, haremos uso de la función t.test(). Nuestra pregunta en este caso es ¿la media de la edad de las personas del estudio es igual a 40 años?

t1 <- t.test(data$Age, mu=40)
t1
## 
##  One Sample t-test
## 
## data:  data$Age
## t = 165.67, df = 150000, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 40
## 95 percent confidence interval:
##  44.89164 45.00876
## sample estimates:
## mean of x 
##   44.9502

La segunda versión es la prueba t no pareada de dos muestras es cuando se comparan dos medias de dos muestras independientes. Para ello, haremos uso de la función t.test. Supongamos que la altura tomada por el método 1 es igual a la altura tomada por el método 2. Nuestra pregunta en este caso es ¿la media de por ambos métodos es igual?

t2 <-t.test(data$Height1, data$Height2, var.equal=TRUE, paired=FALSE)
t2
## 
##  Two Sample t-test
## 
## data:  data$Height1 and data$Height2
## t = 120.18, df = 3e+05, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   9.781753 10.106100
## sample estimates:
## mean of x mean of y 
##  179.9343  169.9904

En la prueba t no pareada de dos muestras, cuando la varianza es desigual, se usa la prueba t de Welch. Pueden asumir que las dos variaciones de datos son diferentes, o puede calcular la variación de cada grupo de datos.

t3 <- t.test(data$Height1,data$Height2, var.equal= FALSE, paired=FALSE)
t3
## 
##  Welch Two Sample t-test
## 
## data:  data$Height1 and data$Height2
## t = 120.18, df = 285980, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   9.781753 10.106100
## sample estimates:
## mean of x mean of y 
##  179.9343  169.9904

Finalmente, se utiliza una prueba t pareada de dos muestras para probar la media de dos muestras que dependen una de la otra. El código para este tipo de prueba es el siguiente:

t4 <- t.test(data$Height1, data$Height2, paired=TRUE)
t4
## 
##  Paired t-test
## 
## data:  data$Height1 and data$Height2
## t = 120.14, df = 150000, p-value < 2.2e-16
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##   9.781698 10.106156
## sample estimates:
## mean of the differences 
##                9.943927

Prueba Chi cuadrado

Ahora bien, hemos visto como entender las relaciones entre dos variables categóricas. Para eso, miraremos las dos variaciones de nuestra prueba chi cuadrado.

Primero, si tenemos una sola variable en nuestra población y quieres comprobar si una variable es consistente con una distribución hipotética, debemos usar la prueba de bondad de ajuste. Para eso, la función que nos interesa es chisq.test().

ct1 <- (table(data$Illness))

Si tienes dos variables categóricas y desea comparar si existe una relación entre dos variables, puede usar la prueba de contingencia. ¿Qué significa esto? Usaremos las tablas de contingencia para crear nuestros estadísticos. La hipótesis nula significa que las dos variables categóricas no tienen relación. La hipótesis alternativa significa que las dos variables categóricas tienen una relación.

Por tanto, lo primero que debemos hacer es crear una tabla de contingencia de los datos. Acá usaremos el género y el ser fumador como nuestras variables.

tc1 <- table(data$Gender, data$Smoker)
tc1
##         
##              0     1
##   Female 26506 39694
##   Male   33494 50306

Una vez has obtenido nuestra tabla de contigencia, podemos aplicar nuestro test de chi cuadrado para la prueba de hipótesis.

ct2 <- chisq.test(tc1)
ct2
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tc1
## X-squared = 0.073259, df = 1, p-value = 0.7867

Pruebas ANOVA

ANOVA es el proceso de prueba de los medias de dos o más grupos. ANOVA también verifica el impacto de los factores al comparar los medios de diferentes muestras. En una prueba t, se prueban las medias de dos muestras; en una prueba de chi-cuadrado, prueba atributos o variables categóricos; En ANOVA, pruebas más muestras.

Para eso, estudiaremos diferentes pruebas de ANOVA que existen.

Primero, cuando solamente tenemos una variable categórica que queremos probar utilizaremos una prueba ANOVA de un factor. Para calcular esta prueba usaremos la función aov().

A1 <- aov(data$Income ~ data$Gender)
A1
## Call:
##    aov(formula = data$Income ~ data$Gender)
## 
## Terms:
##                  data$Gender    Residuals
## Sum of Squares  3.705274e+12 8.996537e+13
## Deg. of Freedom            1       149998
## 
## Residual standard error: 24490.35
## Estimated effects may be unbalanced
#Si queremos conocer el p-valor de la prueba, usaremos la función Summary
summary(A1)
##                 Df    Sum Sq   Mean Sq F value Pr(>F)    
## data$Gender      1 3.705e+12 3.705e+12    6178 <2e-16 ***
## Residuals   149998 8.997e+13 5.998e+08                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

¿Y qué pasa si tenemos dos variables independientes que queremos probar? Sencillo, al igual que con las regresiones deberemos “sumar” las nuevas variables en nuestra ecuación. Recuerden que nuestra hipótesis es que todas las medias son iguales.

A2 <- aov(data$Income ~ data$Gender + data$Illness)
A2
## Call:
##    aov(formula = data$Income ~ data$Gender + data$Illness)
## 
## Terms:
##                  data$Gender data$Illness    Residuals
## Sum of Squares  3.705274e+12 1.485620e+05 8.996537e+13
## Deg. of Freedom            1            1       149997
## 
## Residual standard error: 24490.43
## Estimated effects may be unbalanced
summary(A2)
##                  Df    Sum Sq   Mean Sq F value Pr(>F)    
## data$Gender       1 3.705e+12 3.705e+12    6178 <2e-16 ***
## data$Illness      1 1.486e+05 1.486e+05       0  0.987    
## Residuals    149997 8.997e+13 5.998e+08                   
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

¿Pero qué pasa si ahora queremos analizar múltiples respuestas? Para esto hacemos uso del análisis de varianza multivariado o MANOVA. Para hacer este análisis, crearemos una matriz a partir de los vectores con los cuales llevaremos a cabo los análisis. Esta función es cbind(). Además, dado que esto requiere otro tipo de análisis, la función a usar es manova().

A3 <- manova(cbind(data$Income, data$Weight1) ~ data$Gender)
A3
## Call:
##    manova(cbind(data$Income, data$Weight1) ~ data$Gender)
## 
## Terms:
##                  data$Gender    Residuals
## resp 1          3.705274e+12 8.996537e+13
## resp 2                  1540     93158078
## Deg. of Freedom            1       149998
## 
## Residual standard errors: 24490.35 24.92112
## Estimated effects may be unbalanced
summary(A3)
##                 Df  Pillai approx F num Df den Df    Pr(>F)    
## data$Gender      1 0.03957     3090      2 149997 < 2.2e-16 ***
## Residuals   149998                                             
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Pruebas no paramétricas

Pero como todo en la vida no es perfecto, hay supuestos que se deben cumplir para asegurar que se puedan usar. Las pruebas no paramétricas son pruebas que no requieren que la variable y la muestra se distribuyan normalmente. La mayoría de las veces debería usar pruebas paramétricas como la prueba t, la prueba de chi-cuadrado y ANOVA porque son más precisas. Utiliza pruebas no paramétricas cuando no tiene datos distribuidos normalmente y los datos de muestra son grandes.

Por ejemplo, para sustituir la prueba t de una sola muestra usaremos el test de rango asignado de Wilcoxon (con la función wilcox.test()):

wilcox.test(data$Age, mu= 40)
## 
##  Wilcoxon signed rank test with continuity correction
## 
## data:  data$Age
## V = 7.71e+09, p-value < 2.2e-16
## alternative hypothesis: true location is not equal to 40

Para sustituir la prueba de t de dos muestras se usa el test de Wilcoxon-Mann-Whitney (con la mmisma función):

wilcox.test(data$Height1, data$Height2, correct=FALSE)
## 
##  Wilcoxon rank sum test
## 
## data:  data$Height1 and data$Height2
## W = 1.4003e+10, p-value < 2.2e-16
## alternative hypothesis: true location shift is not equal to 0

Finalmente, para la sustitución del ANOVA se usa el test de Kruskal-Wallis. La función para este test no paramétrico es kruskal.test():

kruskal.test(data$Income ~ data$Drinker)
## 
##  Kruskal-Wallis rank sum test
## 
## data:  data$Income by data$Drinker
## Kruskal-Wallis chi-squared = 0.074938, df = 1, p-value = 0.7843

Modelos de regresión

El análisis de regresión implica identificar relaciones entre variables. Dado un conjunto de variables independientes o predictoras, nuestro objetivo es predecir una variable dependiente o objetivo. En el análisis de regresión, la variable objetivo es numérica y las variables predictoras pueden ser numéricas, categóricas u ordinales. En esta sección veremos tres versiones de la regresión lineal

Regresiones lineales

Empezaremos con el modelo de regresión más sencillo, la regresión lineal simple. La regresión lineal simple es un caso especial de regresión lineal con una sola variable predictiva x y una variable objetivo y. Para realizar una regresión usaremos el comando lm():

reg1 <- lm(data$Income ~ data$Weight1)
reg1
## 
## Call:
## lm(formula = data$Income ~ data$Weight1)
## 
## Coefficients:
##  (Intercept)  data$Weight1  
##    91083.702         1.878
summary(reg1)
## 
## Call:
## lm(formula = data$Income ~ data$Weight1)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -91864 -10383   2406  13267  85925 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  91083.702    241.861 376.596   <2e-16 ***
## data$Weight1     1.878      2.589   0.725    0.468    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24990 on 149998 degrees of freedom
## Multiple R-squared:  3.508e-06,  Adjusted R-squared:  -3.158e-06 
## F-statistic: 0.5263 on 1 and 149998 DF,  p-value: 0.4682

Si queremos ver que tan bien nos fue con los datos, usando un gráfico de dispersión de nuestras variables podemos añadir nuestra línea de regresión con la función abline().

plot(data$Income ~ data$Weight1)
abline(reg1)

Si queremos una regresión que pase por el origen (sin intercepto) deberemos usar la siguiente expresión:

reg2 <- lm(data$Income ~ data$Weight1 - 1)
summary(reg2)
## 
## Call:
## lm(formula = data$Income ~ data$Weight1 - 1)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -154084  -15185    7459   29158  146336 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## data$Weight1 941.5762     0.9634   977.3   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 34860 on 149999 degrees of freedom
## Multiple R-squared:  0.8643, Adjusted R-squared:  0.8643 
## F-statistic: 9.552e+05 on 1 and 149999 DF,  p-value: < 2.2e-16
plot(data$Income ~ data$Weight1)
abline(reg2)

Para la regresión lineal múltiple, a las variables predictoras las agregaremos con el comando +:

reg3 <- lm(data$Income ~ data$Weight1 + data$Cocaine)
summary(reg3)
## 
## Call:
## lm(formula = data$Income ~ data$Weight1 + data$Cocaine)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -91814 -10384   2407  13266  85917 
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  91090.964    243.052 374.779   <2e-16 ***
## data$Weight1     1.882      2.589   0.727    0.467    
## data$Cocaine   -57.351    189.813  -0.302    0.763    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24990 on 149997 degrees of freedom
## Multiple R-squared:  4.117e-06,  Adjusted R-squared:  -9.216e-06 
## F-statistic: 0.3088 on 2 and 149997 DF,  p-value: 0.7343

Sin embargo, hay una trinidad que debemos revisar para asegurar que se cumplan tres condiciones: multicolinealidad, heterocedasticidad y independencia de los residuos.

Para determinar si los residuos son independientes, usaremos un gráfico QQ. Usaremos las funciones qqnorm() y qqline():

plot(reg3$residuals)

qqnorm(reg3$residuals)
qqline(reg3$residuals)

Como podemos ver, los datos no parecen comportarse adecuadamente. Para esto veremos varias variaciones que nos pueden solucionar el problema más adelante.

Además, podemos usar el test de Durbin Watson para saber si se comportan normalmente. La función que nos permite hacer eso es durbinWatsonTest() de la librería car.

library(car)
## Loading required package: carData
durbinWatsonTest(reg3$residuals)
## [1] 0.3994367

Este valor lo comparamos con la tabla de datos del estadístico de Durbin-Watson y podemos ver que no tenemos problemas de autocorrelación de los residuos.

Finalmente, tenemos que probar que nuestros datos no estén correlacionados y eliminamos la multicolinealidad. Para usaremos las correlaciones y el índice de inflación de la varianza.

cor(cbind(data$Income, data$Weight1, data$Cocaine))
##               [,1]        [,2]          [,3]
## [1,]  1.0000000000 0.001873081 -0.0007698828
## [2,]  0.0018730814 1.000000000  0.0054714279
## [3,] -0.0007698828 0.005471428  1.0000000000
vif(reg3)
## data$Weight1 data$Cocaine 
##      1.00003      1.00003

¿Cómo sabemos si hay problemas de multicolinealidad? Simple, si tenemos unos altos niveles de correlación entre las variables o un vif mayor a 10 (aunque por lo general se dice que 5) podemos afirmar que nuestro modelo tiene problemas. En nuestro caso podemos ver que no tenemos multicolinealidad.

Entonces, ¿cuál es el problema? Parece que la forma funcional de los datos no nos ayuda. Para eso, la solución más fácil es linealizar las variables. Para eso utilizaremos la función log().

reg4 <- lm(data$Income ~ log(data$Weight1) + data$Cocaine)
## Warning in log(data$Weight1): Se han producido NaNs
reg4
## 
## Call:
## lm(formula = data$Income ~ log(data$Weight1) + data$Cocaine)
## 
## Coefficients:
##       (Intercept)  log(data$Weight1)       data$Cocaine  
##           90758.8              112.6              -56.9
summary(reg4)
## 
## Call:
## lm(formula = data$Income ~ log(data$Weight1) + data$Cocaine)
## 
## Residuals:
##    Min     1Q Median     3Q    Max 
## -91829 -10382   2404  13262  85906 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)        90758.8      913.6  99.336   <2e-16 ***
## log(data$Weight1)    112.6      204.5   0.551    0.582    
## data$Cocaine         -56.9      189.8  -0.300    0.764    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 24990 on 149977 degrees of freedom
##   (20 observations deleted due to missingness)
## Multiple R-squared:  2.612e-06,  Adjusted R-squared:  -1.072e-05 
## F-statistic: 0.1958 on 2 and 149977 DF,  p-value: 0.8221
plot(reg4$residuals)

qqnorm(reg4$residuals)
qqline(reg4$residuals)

¿Que pasó? Hay que explorar la forma funcional de las variables para solucionar el problema.

plot(data$Income ~ data$Weight1)

plot(data$Income ~ log(data$Weight1))
## Warning in log(data$Weight1): Se han producido NaNs

El verdadero problema es que esta variable no sirve para explicar la otra. En este caso el problema ya no es estadístico, es de especificación de las variables. Ahí es donde el conocimiento específico de su área puede ser muy útil.

Regresiones logísticas

Por último, ,miramemos un modelo más de regresión. la regresión logística es un tipo de análisis de regresión utilizado para predecir el resultado de una variable categórica en función de las variables independientes o predictoras. Es útil para modelar la probabilidad de un evento ocurriendo como función de otros factores. El análisis de regresión logística se enmarca en el conjunto de Modelos Lineales Generalizados (GLM por sus siglas en inglés). Las probabilidades que describen el posible resultado de un único ensayo se modelan, como una función de variables explicativas, utilizando una función logística.

Para construir nuestra función, tenemos que asegurarnos que la variable que vamos a predecir esté compuesta por factores. En este caso, lo haremos con la variable bebedor (o Drinker). Además, como haremos uso de modelos lineales generalizados (como vimos arriba), la función a utilizar es glm().

table(data$Drinker)
## 
##     0     1 
## 90000 60000
rl1 <- glm(data$Drinker ~ data$Income)
rl1
## 
## Call:  glm(formula = data$Drinker ~ data$Income)
## 
## Coefficients:
## (Intercept)  data$Income  
##   4.020e-01   -2.162e-08  
## 
## Degrees of Freedom: 149999 Total (i.e. Null);  149998 Residual
## Null Deviance:       36000 
## Residual Deviance: 36000     AIC: 211600
summary(rl1)
## 
## Call:
## glm(formula = data$Drinker ~ data$Income)
## 
## Deviance Residuals: 
##     Min       1Q   Median       3Q      Max  
## -0.4020  -0.4000  -0.3996   0.5999   0.6019  
## 
## Coefficients:
##               Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  4.020e-01  4.789e-03  83.935   <2e-16 ***
## data$Income -2.162e-08  5.062e-08  -0.427    0.669    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for gaussian family taken to be 0.2400029)
## 
##     Null deviance: 36000  on 149999  degrees of freedom
## Residual deviance: 36000  on 149998  degrees of freedom
## AIC: 211620
## 
## Number of Fisher Scoring iterations: 2

¿Cómo sabemos si le pegamos a los resultados? Creamos una matriz de confusión con los datos. Esta no es más que una matriz de contigencia para modelos de clasificación.

predicciones <- ifelse(test = rl1$fitted.values > 0.4, yes = 1, no = 0)
table(data$Drinker, predicciones)
##    predicciones
##         0     1
##   0 50184 39816
##   1 33447 26553

Esto es solamente un primer acercamiento a los modelos lineales. Queda mucho por explorar y por conocer ¿Hay algún otro tema que sea de su interés? Los invito a mirar las librerias y paquetes que hay en R para resolver muchos de los problemas que tenemos en nuestro campo profesional.

Taller

Ahora ustedes deberán realizar el mismo proceso de la semana pasada. Deberán hacerse 5 preguntas las cuales deberán contestar a partir de un análisis exploratorio de datos y un análisis confirmatorio de datos. Estos resultados los deberán presentar, analizar y concluir, en un archivo de Word que deberán enviar al correo andres.acerol@correo.usa.edu.co

¡Buena suerte!