R para Ciencia de Datos de Salud

Author

Ewen Harrison y Riinu Pius / traducido por A.Carolina Ledezma-Carrizalez

Capítulo 7 Regresión lineal

Fumar es una de las principales causas de las estadísticas.

Fletcher Knebel

7.1 Regresión

La regresión es un método por el cual podemos determinar la existencia y la fuerza de la relación entre dos o más variables. Esto se puede considerar como dibujar líneas, idealmente líneas rectas, a través de puntos de datos.

La regresión lineal es nuestro método preferido para examinar variables de resultado continuas. En términos generales, a menudo hay dos objetivos separados en la regresión:

  • Predicción: ajustar un modelo predictivo a un conjunto de datos observados y luego usar ese modelo para hacer predicciones sobre un resultado a partir de un nuevo conjunto de variables explicativas;

  • Explicación: ajustar un modelo para explicar las interrelaciones entre un conjunto de variables.

La Figura 7.1 unifica los términos que usaremos a lo largo. Una pregunta científica clara debe definir nuestraexplanatory variable of interest (X)(x), que a veces se denomina exposición, predictor o variable independiente. Nos referiremos a nuestro resultado de interés como la dependentvariable o resultado(y)(y); a veces se le conoce como la respuesta. En la regresión lineal simple, hay una sola variable explicativa y una sola variable dependiente, y a veces nos referiremos a esto como regresión lineal univariable . Cuando hay más de una variable explicativa, la llamaremos regresión multivariable . Evite el término regresión multivariada , que significa más de una variable dependiente. ¡No usamos este método y le sugerimos que tampoco lo haga!

Tenga en cuenta que en la regresión lineal, la variable dependiente siempre es continua; no puede ser una variable categórica. Las variables explicativas pueden ser continuas o categóricas.

7.1.1 La pregunta (1)

¡Ilustraremos nuestros ejemplos de regresión lineal usando una pregunta clásica que es importante para muchos de nosotros! Esta es la relación entre el consumo de café y la presión arterial (y por lo tanto eventos cardiovasculares, como infarto de miocardio y accidente cerebrovascular). Ha habido muchas idas y venidas a lo largo de las décadas sobre si el café es dañino, no tiene ningún efecto o, de hecho, es beneficioso.

La figura 7.1 muestra un ejemplo de regresión lineal. Cada punto es una persona. La variable explicativa es el número promedio de tazas de café por día.(X)(x)y la presión arterial sistólica es la variable dependiente(y)(y). ¡Lo siguiente es importante! Estos datos son inventados, falsos, generados aleatoriamente, fabricados, no reales. 14 ¡Así que por favor no altere su hábito de tomar café en base a estas graficos.

FIGURA 7.1: La anatomía de un gráfico de regresión. A - regresión lineal univariable, B - regresión lineal multivariable.

7.1.2 Ajuste de una línea de regresión

La regresión lineal simple utiliza el método de mínimos cuadrados ordinarios para el ajuste. Los detalles están más allá del alcance de este libro, pero si desea sacar el álgebra lineal/matriz matemática que hizo en la escuela secundaria, puede pasar una tarde agradable demostrándose a sí mismo cómo funciona realmente.

La figura 7.2 pretende hacer que esto sea fácil de entender. Las matemáticas definen una línea que se ajusta mejor a los datos proporcionados. Para que la línea se ajuste mejor, las distancias entre ella y los datos observados deben ser lo más pequeñas posible. La distancia desde cada punto observado hasta la línea se llama residuo , uno de esos términos estadísticos que provocan sudores. Se refiere a la diferencia residual que queda después de ajustar la línea.

Puede usar la aplicación Shiny de regresión simple para explorar el concepto. Queremos que los residuos sean lo más pequeños posible. Podemos elevar al cuadrado cada residuo (para deshacernos de los menos y hacer el álgebra más conveniente) y sumarlos. Si este número es lo más pequeño posible, la línea se ajusta lo mejor que puede. O en un lenguaje más formal, queremos minimizar la suma de los residuos al cuadrado.

Las aplicaciones de regresión y las figuras de ejemplo de este capítulo se han adaptado de https://github.com/mwaskom/ShinyApps y https://github.com/ShinyEd/intro-stats con permiso de Michael Waskom y Mine Çetinkaya-Rundel, gracias tú a ellos.

FIGURA 7.2: Cómo se ajusta una línea de regresión. A: los residuos son las líneas verdes: la distancia entre cada punto de datos y la línea ajustada. B - el círculo verde indica el mínimo para estos datos; su valor absoluto no es significativo ni comparable con otros conjuntos de datos. Siga el enlace “aplicación Shiny de regresión simple” para interactuar con la línea ajustada. Una nueva suma de cuadrados de residuos (la cruz negra) se calcula cada vez que mueve la línea. C - Distribución de los residuos. Aplicación y tramas adaptadas de https://github.com/mwaskom/ShinyApps con permiso.

7.1.3 Cuando la línea encaja bien

El modelo de regresión lineal tiene cuatro suposiciones principales:

  1. Relación lineal entre predictores y resultado;
  2. Independencia de los residuos;
  3. Distribución normal de residuos;
  4. Igual varianza de residuos.

Puede usar la aplicación brillante de diagnóstico de regresión simple para controlarlos.

La Figura 7.3 muestra diagramas de diagnóstico de la aplicación, que ejecutaremos debajo de la Figura 7.11 .

Relación lineal

Un gráfico de dispersión simple debería mostrar una relación lineal entre la variable explicativa y la dependiente, como en la Figura 7.3 A. Si los datos describen un patrón no lineal (Figura 7.3 B), entonces una línea recta no encajará bien. En esta situación, se debe considerar un modelo alternativo, como incluir un modelo cuadrático (al cuadrado,X2x2) término.

Independencia de los residuos

Las observaciones y por lo tanto los residuos deben ser independientes. Este es un problema más común en los datos de series de tiempo, donde las observaciones pueden estar correlacionadas entre sí a lo largo del tiempo (autocorrelación).

Distribución normal de residuos

Las observaciones deben distribuirse normalmente alrededor de la línea ajustada. Esto significa que los residuos deben mostrar una distribución normal con una media de cero (Figura 7.3 A). Si las observaciones no se distribuyen por igual alrededor de la línea, el histograma de residuos estará sesgado y una gráfica QQ normal mostrará residuos divergentes de la línea recta (Figura 7.3 B) (consulte la Sección 6.4.2 ).

Igual varianza de residuos

La distancia de las observaciones desde la línea ajustada debe ser la misma en el lado izquierdo que en el lado derecho. Mire los datos en forma de abanico en la aplicación Shiny de diagnóstico de regresión simple. Esta forma de abanico se puede ver en la gráfica de residuos frente a valores ajustados.

Todo lo que hablamos en este capítulo se trata realmente de asegurarse de que la línea que dibuje a través de sus puntos de datos sea válida. Se trata de garantizar que la línea de regresión sea adecuada en todo el rango de la variable explicativa y la variable dependiente. Se trata de comprender los datos subyacentes, en lugar de confiar en una prueba estadística elegante que le da un valor p .

FIGURA 7.3: Diagnóstico de regresión. A: así es como debería verse un ajuste lineal. B - esto no es apropiado; en su lugar, se debe utilizar un modelo no lineal. Aplicación y tramas adaptadas de https://github.com/ShinyEd/intro-stats con permiso.

7.1.4 La recta ajustada y la ecuación lineal

Prometimos mantener las ecuaciones al mínimo, pero esta es tan importante que debe incluirse. Pero es fácil de entender, así que no temas.

La figura 7.4 vincula la línea ajustada, la ecuación lineal y la salida de R. Es probable que algo de esto ya le resulte familiar.

La figura 7.4 A muestra un diagrama de dispersión con líneas ajustadas de un modelo de regresión lineal multivariable. El gráfico se toma de la aplicación Shiny de regresión multivariable . Recuerde, estos datos son simulados y no son reales. Esta aplicación realmente te ayudará a comprender los diferentes modelos de regresión; más sobre esto a continuación. La aplicación nos permite especificar “la verdad” con los controles deslizantes del lado izquierdo. Por ejemplo, podemos configurar elinortetmirCmipagst=1intercept=1, lo que significa que cuandoX=0x=0, el valor de la variable dependiente,y=1y=1.

Nuestro modelo tiene una variable explicativa continua de interés (consumo promedio de café) y otra variable categórica (tabaquismo). En el ejemplo, la verdad se establece comoinortetmirCmipagst=1intercept=1,β1=1β1=1(efecto real del café sobre la presión arterial, pendiente de la línea), yβ2=2β2=2(verdadero efecto del tabaquismo sobre la presión arterial). Los puntos del gráfico son simulados e incluyen ruido aleatorio.

Que haceβ1=1β1=1¿significar? Esta es la pendiente de la línea. Entonces, por cada unidad en el eje x, hay un aumento correspondiente de una unidad en el eje y.

La Figura 7.4 B muestra la salida predeterminada en R para este modelo de regresión lineal. Mire cuidadosamente y asegúrese de tener claro cómo encajan las líneas ajustadas, la ecuación lineal y la salida R. En este ejemplo, la muestra aleatoria de nuestra población real especificada anteriormente muestrainortetmirCmipagst=0,67intercept=0.67,β1=1.00β1=1.00(café), yβ2=2.48β2=2.48(de fumar). Se proporciona un valor p (PAGSr(>|t|)Pr(>|t|)), que es el resultado de una prueba de significación de hipótesis nula para que la pendiente de la recta sea igual a cero.

FIGURA 7.4: Vinculación de la línea ajustada, la ecuación de regresión y la salida R.

7.1.5 Modificación de efectos

La modificación del efecto ocurre cuando el tamaño del efecto de la variable explicativa de interés (exposición) sobre el resultado (variable dependiente) difiere según el nivel de una tercera variable. Dicho de otra manera, se trata de una situación en la que una variable explicativa modifica diferencialmente (positiva o negativamente) el efecto observado de otra variable explicativa sobre el resultado.

La Figura 7.5 muestra tres caminos causales potenciales utilizando ejemplos de la aplicación Shiny de regresión multivariable .

En el primero, fumar no está asociado con el resultado (presión arterial) ni con nuestra variable explicativa de interés (consumo de café).

En el segundo, fumar se asocia con presión arterial elevada, pero no con el consumo de café. Este es un ejemplo de modificación de efecto.

En el tercero, fumar se asocia con presión arterial elevada y con el consumo de café. Este es un ejemplo de confusión.

FIGURA 7.5: Vías causales, modificación del efecto y confusión.

Modificación del efecto aditivo frente al multiplicativo (interacción)

El nombre de estos conceptos difiere según el campo en el que trabaje. La modificación del efecto puede ser aditiva o multiplicativa. Podemos referirnos a la modificación del efecto multiplicativo como “una interacción estadística”.

La figura 7.6 debería dejar claro exactamente cómo funcionan. Los datos se han configurado para incluir una interacción entre las dos variables explicativas. ¿Qué significa esto?

  • inortetmirCmipagst=1intercept=1: la presión arterial (yy) para no fumadores que no toman café (todasX=0x=0);

  • β1=1β1=1( coffee): la presión arterial adicional por cada taza de café consumida por los no fumadores (pendiente de la línea cuandoX2=0x2=0);

  • β2=1β2=1( smoking): la diferencia de presión arterial entre no fumadores y fumadores que no beben café (X1=0x1=0);

  • β3=1β3=1( coffee:smokinginteracción): la presión arterial (yy) además deβ1β1yβ2β2, por cada taza de café que beben los fumadores (X2=1)x2=1).

Puede que tenga que leer eso un par de veces en combinación con mirar la Figura 7.6 .

Con el modelo aditivo, las líneas ajustadas para no fumadores y fumadores siempre deben ser paralelas (el término estadístico es ‘restringido’). Observa la ecuación de la figura 7.6 B y convéncete de que las rectas nunca pueden ser otra cosa que paralelas.

Una interacción estadística (o modificación del efecto multiplicativo) es una situación en la que el efecto de una variable explicativa sobre el resultado se modifica de manera no aditiva. En otras palabras, usando nuestro ejemplo, las líneas ajustadas ya no están obligadas a ser paralelas.

Si no hubiéramos verificado un efecto de interacción, habríamos descrito inadecuadamente la verdadera relación entre estas tres variables.

¿Qué significa esto en la realidad? Bueno, puede ser biológicamente plausible que el efecto de fumar sobre la presión arterial aumente multiplicativamente debido a una interacción química entre el humo del cigarrillo y la cafeína, por ejemplo.

Tenga en cuenta que solo estamos tratando de encontrar un modelo que describa mejor los datos subyacentes. Todos los modelos son aproximaciones de la realidad.

FIGURA 7.6: Regresión lineal multivariable con modificación del efecto aditivo y multiplicativo.

7.1.6 R-cuadrado y ajuste del modelo

La figura 7.6 incluye otra métrica de la salida de R: Adjusted R-squared.

R-cuadrado es otra medida de qué tan cerca están los datos de la línea ajustada. También se conoce como coeficiente de determinación y representa la proporción de la variable dependiente que se explica por la(s) variable(s) explicativa(s). Entonces, 0.0 indica que ninguna de las variaciones en el dependiente se explica por el explicativo (no hay relación entre los puntos de datos y la línea ajustada) y 1.0 indica que el modelo explica toda la variabilidad en el dependiente (la línea ajustada sigue exactamente los puntos de datos).

R proporciona el R-squaredy el Adjusted R-squared. El R-cuadrado ajustado incluye una penalización cuantas más variables explicativas se incluyan en el modelo. Entonces, si el modelo incluye variables que no contribuyen a la descripción de la variable dependiente, el R-cuadrado ajustado será menor.

Mirando nuevamente la Figura 7.6 , en A, un modelo simple de café solo no describe bien los datos (R-cuadrado ajustado 0.38). Agregar fumar al modelo mejora el ajuste como se puede ver por las líneas ajustadas (0.87). Pero existe una verdadera interacción en los datos reales. Al incluir esta interacción en el modelo, el ajuste es realmente muy bueno (0,93).

7.1.7 Confusión

El último concepto importante a mencionar aquí es el de confusión. La confusión es una situación en la que la asociación entre una variable explicativa (exposición) y el resultado (variable dependiente) se distorsiona por la presencia de otra variable explicativa.

En nuestro ejemplo, existe confusión si existe una asociación entre fumar y la presión arterial Y fumar y el consumo de café (Figura 7.5 C). Esto existe si los fumadores beben más café que los no fumadores.

La figura 7.7 muestra esto muy claramente. Los datos subyacentes ahora se han modificado para que quienes beben más de dos tazas de café al día también fumen y quienes beben menos de dos tazas al día no fumen. Se simula un verdadero efecto de fumar sobre la presión arterial, pero en este ejemplo NO hay efecto del café sobre la presión arterial.

Si solo ajustamos la presión arterial por el consumo de café (Figura 7.7 A), entonces podemos concluir erróneamente que existe una relación entre el consumo de café y la presión arterial. Pero esto no existe, porque la verdad fundamental que hemos establecido es que no existe una relación entre el café y la presión arterial. En realidad, estamos analizando el efecto de fumar sobre la presión arterial, lo que confunde el efecto del café sobre la presión arterial.

Si incluimos el factor de confusión en el modelo al agregar fumar, la verdadera relación se hace evidente. Dos líneas planas paralelas que indican que el café no tiene efecto sobre la presión arterial, pero sí una relación entre fumar y la presión arterial. Este procedimiento se conoce como control o ajuste de factores de confusión.

FIGURA 7.7: Regresión lineal multivariable con confusión de beber café por fumar.

Intencionalmente, hemos pasado un tiempo repasando los principios y aplicaciones de la regresión lineal porque es muy importante. Una comprensión firme de estos conceptos conduce a la comprensión de otros procedimientos de regresión, como la regresión logística y la regresión de riesgos proporcionales de Cox.

Ahora realizaremos todo esto nosotros mismos en R utilizando el conjunto de datos gapminder con el que está familiarizado en los capítulos anteriores.

7.2 Ajuste de modelos simples

7.2.1 La pregunta (2)

Estamos interesados ​​en modelar el cambio en la esperanza de vida para diferentes países durante los últimos 60 años.

7.2.2 Obtener los datos

library(tidyverse)
library(gapminder) # dataset
library(finalfit)
library(broom)
theme_set(theme_bw())
gapdata <- gapminder

7.2.3 Comprobar los datos

Siempre verifique un nuevo conjunto de datos, como se describe en la Sección 6.3 .

glimpse(gapdata) # Cada variable como línea, tipo variable, primeros valores
missing_glimpse(gapdata) # datos faltantes para cada variable
ff_glimpse(gapdata) # Estadísticas resumidas para cada variable

7.2.4 Trazar los datos

Tracemos la esperanza de vida en los países europeos durante los últimos 60 años, centrándonos en el Reino Unido y Turquía. Podemos agregar líneas simples de mejor ajuste usando geom_smooth().

gapdata %>%                        
  filter(continent == "Europe") %>%    # Solo Europe 
  ggplot(aes(x = year, y = lifeExp)) + # lifeExp~year  
  geom_point() +                       # plot points
  facet_wrap(~ country) +              # facet por paises
  scale_x_continuous(
    breaks = c(1960, 2000)) +          # adjustar x-axis 
  geom_smooth(method = "lm")           # agregar linea de regresion 
`geom_smooth()` using formula = 'y ~ x'

Scatter plots o Gráficos de dispersión con líneas de regresión lineal: esperanza de vida por año en países europeos

7.2.5 Regresión lineal simple

Como puede ver, ggplot()está muy contento de ejecutar y trazar modelos de regresión lineal para nosotros. Si bien esto es conveniente para una mirada rápida, generalmente queremos construir, ejecutar y explorar estos modelos nosotros mismos. Luego podemos investigar las intersecciones y los coeficientes de pendiente (incremento lineal por año):

Primero, tracemos dos países para comparar, Turquía y Reino Unido:

gapdata %>% 
  filter(country %in% c("Turkey", "United Kingdom")) %>% 
  ggplot(aes(x = year, y = lifeExp, colour = country)) + 
  geom_point()

Scatter plot o Gráficos de dispersión Esperanza de vida por año: Turquía y Reino Unido

Las dos líneas no paralelas pueden hacerle pensar en lo que se discutió anteriormente (Figura 7.6 ).

Primero, modelemos los dos países por separado.

# United Kingdom
fit_uk <- gapdata %>%
  filter(country == "United Kingdom") %>% 
  lm(lifeExp~year, data = .)
fit_uk %>% 
  summary()

Call:
lm(formula = lifeExp ~ year, data = .)

Residuals:
     Min       1Q   Median       3Q      Max 
-0.69767 -0.31962  0.06642  0.36601  0.68165 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -2.942e+02  1.464e+01  -20.10 2.05e-09 ***
year         1.860e-01  7.394e-03   25.15 2.26e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 0.4421 on 10 degrees of freedom
Multiple R-squared:  0.9844,    Adjusted R-squared:  0.9829 
F-statistic: 632.5 on 1 and 10 DF,  p-value: 2.262e-10
# Turkey
fit_turkey <- gapdata %>%
  filter(country == "Turkey") %>% 
  lm(lifeExp~year, data = .)
fit_turkey %>% 
  summary()

Call:
lm(formula = lifeExp ~ year, data = .)

Residuals:
    Min      1Q  Median      3Q     Max 
-2.4373 -0.3457  0.1653  0.9008  1.1033 

Coefficients:
              Estimate Std. Error t value Pr(>|t|)    
(Intercept) -924.58989   37.97715  -24.35 3.12e-10 ***
year           0.49724    0.01918   25.92 1.68e-10 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Residual standard error: 1.147 on 10 degrees of freedom
Multiple R-squared:  0.9853,    Adjusted R-squared:  0.9839 
F-statistic: 671.8 on 1 and 10 DF,  p-value: 1.681e-10

Acceso a los coeficientes de regresión lineal

Un modelo de regresión lineal simple devolverá dos coeficientes: la intersección y la pendiente (el segundo valor devuelto). Compare estos coeficientes con el summary()resultado anterior para ver de dónde provienen estos números.

fit_uk$coefficients
 (Intercept)         year 
-294.1965876    0.1859657 
fit_turkey$coefficients
 (Intercept)         year 
-924.5898865    0.4972399 

Las pendientes tienen sentido: los resultados de la regresión lineal dicen que en el Reino Unido, la esperanza de vida aumenta en 0,186 por año, mientras que en Turquía el cambio es de 0,497 por año. Sin embargo, la razón por la que las intersecciones son negativas puede ser menos obvia.

En este ejemplo, la intercepción nos dice que la esperanza de vida en el año 0 en el Reino Unido (hace unos 2000 años) era de -294 años. Si bien esto es matemáticamente correcto (según los datos que tenemos), obviamente no tiene sentido en la práctica. Es importante pensar en el rango sobre el cual puede extender las predicciones de su modelo y dónde se vuelven poco realistas.

Para que las intersecciones sean significativas, agregaremos una nueva columna llamada year_from1952y volveremos a ejecutar fit_uky fit_turkeyusar year_from1952en lugar de year.

gapdata <- gapdata %>% 
  mutate(year_from1952 = year - 1952)
fit_uk <- gapdata %>%
  filter(country == "United Kingdom") %>% 
  lm(lifeExp ~ year_from1952, data = .)
fit_turkey <- gapdata %>%
  filter(country == "Turkey") %>% 
  lm(lifeExp ~ year_from1952, data = .)
fit_uk$coefficients
  (Intercept) year_from1952 
   68.8085256     0.1859657 
fit_turkey$coefficients
  (Intercept) year_from1952 
   46.0223205     0.4972399 

Ahora, los resultados actualizados nos dicen que en el año 1952, la esperanza de vida en el Reino Unido era de 69 años. Tenga en cuenta que las pendientes no cambian. No había nada malo con el modelo original y los resultados eran correctos, la intercepción simplemente no era significativa.

Acceder a toda la información del modelo tidy()yglance()

En los ejemplos fit_uk y fit_turkey anteriores, estábamos usando fit_uk %>% summary()para obtener R para imprimir un resumen del modelo. Sin embargo, este resumen no tiene forma rectangular, por lo que no podemos acceder fácilmente a los valores o ponerlos en una tabla/usarlos como información en las etiquetas de las parcelas.

Usamos la tidy()función from library(broom)para obtener la(s) variable(s) y los valores específicos en un lindo tibble:

fit_uk %>% tidy()
# A tibble: 2 × 5
  term          estimate std.error statistic  p.value
  <chr>            <dbl>     <dbl>     <dbl>    <dbl>
1 (Intercept)     68.8     0.240       287.  6.58e-21
2 year_from1952    0.186   0.00739      25.1 2.26e-10

En la tidy()salida, la columna estimateincluye tanto las intersecciones como las pendientes.

Y usamos la glance()función para obtener estadísticas generales del modelo (principalmente el r.squared).

fit_uk %>% glance()
# A tibble: 1 × 12
  r.squared adj.r.squa…¹ sigma stati…²  p.value    df logLik   AIC   BIC devia…³
      <dbl>        <dbl> <dbl>   <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>   <dbl>
1     0.984        0.983 0.442    633. 2.26e-10     1  -6.14  18.3  19.7    1.95
# … with 2 more variables: df.residual <int>, nobs <int>, and abbreviated
#   variable names ¹​adj.r.squared, ²​statistic, ³​deviance
# ℹ Use `colnames()` to see all variable names

7.2.6 Regresión lineal multivariable

La regresión lineal multivariable incluye más de una variable explicativa. Hay algunas formas de incluir más variables, dependiendo de si deben compartir la intersección y cómo interactúan:

Regresión lineal simple (exactamente una variable predictora):

myfit = lm(lifeExp ~ year, data = gapdata)

Regresión lineal multivariable (aditiva):

myfit = lm(lifeExp ~ year + country, data = gapdata)

Regresión lineal multivariable (interacción):

myfit = lm(lifeExp ~ year * country, data = gapdata)

Esto equivale a: myfit = lm(lifeExp ~ year + country + year:country, data = gapdata)

Estos ejemplos de regresión multivariable incluyen dos variables: yeary country, pero podríamos incluir más añadiéndolas con +, no tiene que ser solo dos.

Ahora crearemos tres modelos de regresión lineal diferentes para ilustrar mejor la diferencia entre un modelo simple, un modelo aditivo y un modelo multiplicativo.

Modelo 1: solo año

# UK y Turkey dataset

gapdata_UK_T <- gapdata %>% 
  filter(country %in% c("Turkey", "United Kingdom"))
fit_both1 <- gapdata_UK_T %>% 
  lm(lifeExp ~ year_from1952, data = .)
fit_both1

Call:
lm(formula = lifeExp ~ year_from1952, data = .)

Coefficients:
  (Intercept)  year_from1952  
      57.4154         0.3416  
gapdata_UK_T %>% 
  mutate(pred_lifeExp = predict(fit_both1)) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = lifeExp, colour = country)) +
  geom_line(aes(x = year, y = pred_lifeExp))

Scatter and line plot o Diagrama de dispersión y línea. Esperanza de vida en Turquía y el Reino Unido - Fit Univariable.. Life expectancy in Turkey and the UK - univariable fit.

Al ajustarse solo al año ( lifeExp ~ year_from 1952), el modelo ignora el país. Esto nos da una línea ajustada que es el promedio de esperanza de vida en el Reino Unido y Turquía. Esto puede ser deseable, dependiendo de la pregunta. Pero aquí queremos describir mejor los datos.

¿Cómo hicimos la trama y qué hace predict()? Anteriormente, usábamos geom_smooth(method = "lm")para agregar convenientemente líneas de regresión lineal en un diagrama de dispersión. Cuando un gráfico de dispersión incluye un valor categórico (p. ej., los puntos están coloreados por una variable), los geom_smooth()dibujos de las líneas de regresión son multiplicativos. Eso es genial, y casi siempre exactamente lo que queremos. Aquí, sin embargo, para ilustrar la diferencia entre los diferentes modelos, tendremos que usar el predict()modelo y geom_line()tener un control total sobre las líneas de regresión trazadas.

gapdata_UK_T %>% 
  mutate(pred_lifeExp = predict(fit_both1)) %>% 
  select(country, year, lifeExp, pred_lifeExp) %>% 
  group_by(country) %>%
  slice(1, 6, 12)
# A tibble: 6 × 4
# Groups:   country [2]
  country         year lifeExp pred_lifeExp
  <fct>          <int>   <dbl>        <dbl>
1 Turkey          1952    43.6         57.4
2 Turkey          1977    59.5         66.0
3 Turkey          2007    71.8         76.2
4 United Kingdom  1952    69.2         57.4
5 United Kingdom  1977    72.8         66.0
6 United Kingdom  2007    79.4         76.2

Observe cómo la slice()función reconoce group_by() y, en este caso, nos muestra la observación 1, 6 y 12 dentro de cada grupo.

Modelo 2: año + país

fit_both2 <- gapdata_UK_T %>% 
  lm(lifeExp ~ year_from1952 + country, data = .)
fit_both2

Call:
lm(formula = lifeExp ~ year_from1952 + country, data = .)

Coefficients:
          (Intercept)          year_from1952  countryUnited Kingdom  
              50.3023                 0.3416                14.2262  
gapdata_UK_T %>% 
  mutate(pred_lifeExp = predict(fit_both2)) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = lifeExp, colour = country)) +
  geom_line(aes(x = year, y = pred_lifeExp, colour = country))

Scatter and line plot o Diagrama de dispersion y linea:Esperanza de vida en Turquía y el Reino Unido - ajuste de aditivos multivariables.

Esto es mejor, al incluir el país en el modelo, ahora tenemos líneas ajustadas que representan los datos más de cerca. Sin embargo, las líneas están restringidas para ser paralelas. Este es el modelo aditivo que se discutió anteriormente. Necesitamos incluir un término de interacción para permitir que el efecto del año en la esperanza de vida varíe por país de manera no aditiva.

Modelo 3: año * país

fit_both3 <- gapdata_UK_T %>% 
  lm(lifeExp ~ year_from1952 * country, data = .)
fit_both3

Call:
lm(formula = lifeExp ~ year_from1952 * country, data = .)

Coefficients:
                        (Intercept)                        year_from1952  
                            46.0223                               0.4972  
              countryUnited Kingdom  year_from1952:countryUnited Kingdom  
                            22.7862                              -0.3113  
gapdata_UK_T %>% 
  mutate(pred_lifeExp = predict(fit_both3)) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = lifeExp, colour = country)) +
  geom_line(aes(x = year, y = pred_lifeExp, colour = country))

Scatter and line plot o Diagrama de Dispersion y linea Esperanza de vida en Turquía y el Reino Unido: ajuste multivariable multiplicativo.

Esto se ajusta a los datos mucho mejor que los dos modelos anteriores. Puede verificar el R-cuadrado usando summary(fit_both3).

Consejo avanzado: podemos aplicar una función en varios objetos a la vez colocándolos en un list()y usando una map_()función del paquete purrr . library(purrr)se instala y se carga con library(tidyverse), pero está fuera del alcance de este libro. Búscalo una vez que te sientas un poco más cómodo con el uso de R y date cuenta de que estás empezando a hacer cosas similares una y otra vez. Por ejemplo, este código:

mod_stats1 <- glance(fit_both1)
mod_stats2 <- glance(fit_both2)
mod_stats3 <- glance(fit_both3)
bind_rows(mod_stats1, mod_stats2, mod_stats3)

devuelve exactamente lo mismo que:

list(fit_both1, fit_both2, fit_both3) %>% 
  map_df(glance)
# A tibble: 3 × 12
  r.squared adj.r.squa…¹ sigma stati…²  p.value    df logLik   AIC   BIC devia…³
      <dbl>        <dbl> <dbl>   <dbl>    <dbl> <dbl>  <dbl> <dbl> <dbl>   <dbl>
1     0.373        0.344 7.98     13.1 1.53e- 3     1  -82.9 172.  175.   1403. 
2     0.916        0.908 2.99    114.  5.18e-12     2  -58.8 126.  130.    188. 
3     0.993        0.992 0.869   980.  7.30e-22     3  -28.5  67.0  72.9    15.1
# … with 2 more variables: df.residual <int>, nobs <int>, and abbreviated
#   variable names ¹​adj.r.squared, ²​statistic, ³​deviance
# ℹ Use `colnames()` to see all variable names

Lo que sucede aquí es que map_df()aplica una función en cada objeto de la lista que se pasa y devuelve un df (marco de datos). En este caso, la función es glance()(tenga en cuenta que una vez dentro map_df(), glanceno tiene sus propios corchetes.

7.2.7 Comprobación de supuestos

Los supuestos de la regresión lineal se pueden verificar con gráficos de diagnóstico, ya sea pasando el objeto ajustado ( lm()salida) a la base R plot()o usando la función más conveniente a continuación.

library(ggfortify)
autoplot(fit_both3)

FIGURA 7.11: Gráficos de diagnóstico. Esperanza de vida en Turquía y el Reino Unido: modelo multiplicativo multivariable.

7.3 Ajuste de modelos más complejos

7.3.1 La pregunta (3)

Finalmente, en esta sección, vamos a ajustar un modelo de regresión lineal más complejo. Aquí, discutiremos la selección de variables y presentaremos el criterio de información de Akaike (AIC).

Presentaremos un nuevo conjunto de datos: el estudio del grupo colaborativo occidental. Este conjunto de datos clásico incluye observaciones de 3154 hombres jóvenes sanos de 39 a 59 años del área de San Francisco que fueron evaluados por su tipo de personalidad. Su objetivo era capturar la aparición de enfermedad coronaria durante los siguientes 8,5 años.

Sin embargo, lo usaremos para explorar la relación entre la presión arterial sistólica ( sbp) y el tipo de personalidad ( personality_2L), teniendo en cuenta posibles factores de confusión como el peso ( weight). Ahora, esto es solo por diversión, ¡no escribas!

El estudio fue diseñado para considerar los eventos cardiovasculares como resultado, no la presión arterial. Pero es conveniente utilizar la presión arterial como un resultado continuo de este conjunto de datos, incluso si esa no fuera la intención del estudio.

Los tipos de personalidad incluidos son A: agresivo y B: pasivo.

7.3.2 Principios de ajuste del modelo

Sugerimos construir modelos estadísticos sobre la base de los siguientes seis principios pragmáticos:

  1. Deben usarse la menor cantidad posible de variables explicativas (parsimonia);

  2. Deben tenerse en cuenta las variables explicativas asociadas con la variable de resultado en estudios previos;

  3. Las variables demográficas deben incluirse en la exploración del modelo;

  4. La estratificación de la población debe incorporarse si está disponible;

  5. Las interacciones deben verificarse e incluirse si son influyentes;

  6. La selección del modelo final debe realizarse utilizando un “enfoque basado en criterios”

  • minimizar el criterio de información de Akaike (AIC)

    • maximizar el valor R-cuadrado ajustado.

Esta no es la ley, pero probablemente debería serlo. Estos principios son sensatos, como discutiremos a lo largo del resto de este libro. Le recomendamos encarecidamente que no utilice métodos automatizados de selección de variables. Estos son a menudo métodos de “selección hacia adelante” o “eliminación hacia atrás” para incluir o excluir variables particulares sobre la base de una propiedad estadística.

En ciertos entornos, se puede encontrar que estos enfoques funcionan. Sin embargo, crean una distancia artificial entre usted y el problema en el que está trabajando. Te dan una falsa sensación de certeza de que el modelo que has creado es válido en algún sentido. Y con bastante frecuencia, simplemente se equivocarán.

Alternativamente, puede seguir los seis principios anteriores.

Es posible que previamente se haya demostrado que una variable predice fuertemente un resultado (piense en fumar y el riesgo de cáncer). Esto debería darle una buena razón para considerarlo en su modelo. Pero quizás pienses que los estudios anteriores fueron incorrectos, o que la variable se confunde con otra. Todo esto es justo, pero se espera que este nuevo conocimiento sea claramente demostrado por ti, así que no omitas estas variables antes de empezar.

Hay algunas variables que se asocian tan comúnmente con resultados particulares en el cuidado de la salud que casi siempre deberían incluirse al principio. La edad, el sexo, la clase social y la comorbilidad, por ejemplo, se asocian comúnmente con la supervivencia. Estos deben evaluarse antes de comenzar a buscar la variable explicativa de interés.

Además, los pacientes a menudo se agrupan por una variable de agrupación particular, como el hospital de tratamiento. Habrá puntos en común entre estos pacientes que pueden no ser completamente explicados por las variables observadas. Para estimar los coeficientes de sus variables de interés con mayor precisión, se debe tener en cuenta la agrupación en el análisis.

Como se demostró anteriormente, el propósito del modelo es proporcionar una aproximación de mejor ajuste de los datos subyacentes. La modificación del efecto y las interacciones existen comúnmente en los conjuntos de datos de salud y deben incorporarse si están presentes.

Finalmente, queremos evaluar qué tan bien nuestros modelos se ajustan a los datos con la ‘verificación del modelo’. El efecto de agregar o quitar una variable a los coeficientes de las otras variables en el modelo es muy importante y se discutirá más adelante. Las medidas de bondad de ajuste como AIC, también pueden ser de gran utilidad al decidir qué opción de modelo es la más válida.

7.3.3 AIC

El criterio de información de Akaike (AIC) es una medida alternativa de bondad de ajuste. En ese sentido, es similar al R-cuadrado, pero tiene una base estadística diferente. Es útil porque se puede utilizar para ayudar a guiar el mejor ajuste en modelos lineales generalizados como la regresión logística (consulte el Capítulo 9 ). Se basa en la probabilidad pero también se penaliza por el número de variables presentes en el modelo. Nuestro objetivo es tener un AIC lo más pequeño posible. El valor del número en sí no tiene un significado inherente, pero se usa para comparar diferentes modelos de los mismos datos.

7.3.4 Obtener los datos

wcgsdata <- finalfit::wcgs #presione F1 para tener detalles

7.3.5 Comprobar los datos

Como siempre, cuando reciba un nuevo conjunto de datos, verifique cuidadosamente que no contenga errores.

WCGS data, ff\_glimpse: continuous.
label var_type n missing_n mean sd median
Subject ID <int> 3154 0 10477.9 5877.4 11405.5
Age (years) <int> 3154 0 46.3 5.5 45.0
Height (inches) <int> 3154 0 69.8 2.5 70.0
Weight (pounds) <int> 3154 0 170.0 21.1 170.0
Systolic BP (mmHg) <int> 3154 0 128.6 15.1 126.0
Diastolic BP (mmHg) <int> 3154 0 82.0 9.7 80.0
Cholesterol (mg/100 ml) <int> 3142 12 226.4 43.4 223.0
Cigarettes/day <int> 3154 0 11.6 14.5 0.0
Time to CHD event <int> 3154 0 2683.9 666.5 2942.0
WCGS data, ff\_glimpse: categorical.
label var_type n missing_n levels_n levels levels_count
Personality type <fct> 3154 0 4 ``A1" ``A2" ``B3" ``B4" 264, 1325, 1216, 349
Personality type <fct> 3154 0 2 ``B" ``A" 1565, 1589
Smoking <fct> 3154 0 2 ``Non-smoker" ``Smoker" 1652, 1502
Corneal arcus <fct> 3152 2 2 ``No" ``Yes" ``(Missing)" 2211, 941, 2
CHD event <fct> 3154 0 2 ``No" ``Yes" 2897, 257
Type CHD <fct> 3154 0 4 ``No" ``MI_SD" ``Silent_MI" ``Angina" 2897, 135, 71, 51

7.3.6 Trazar los datos

wcgsdata %>%
  ggplot(aes(y = sbp, x = weight,
             colour = personality_2L)) +   # Tipo de personalidad
  geom_point(alpha = 0.2) +                # Agregamos transparencia
  geom_smooth(method = "lm", se = FALSE)
`geom_smooth()` using formula = 'y ~ x'

Scatter and line plot o Grafico de Dispersion y linea. Presión arterial sistólica por peso y tipo de personalidad.

En la figura 7.12 , podemos ver que existe una relación débil entre el peso y la presión arterial.

Además, en realidad no existe un efecto significativo del tipo de personalidad sobre la presión arterial. Esto es realmente importante porque, como verá a continuación, estamos a punto de “encontrar” algunos efectos estadísticamente significativos en un modelo.

7.3.7 Regresión lineal con ajuste final

finalfit es nuestro propio paquete y proporciona un conjunto conveniente de funciones para ajustar modelos de regresión con resultados presentados en tablas finales.

Hay una gran cantidad de características con código de ejemplo en el sitio web de finalfit .

Aquí usaremos la finalfit()función todo en uno, que toma una variable dependiente y una o más variables explicativas. Se realiza la regresión adecuada para la variable dependiente, a partir de una selección de modelos de regresión lineal, logística y de riesgos proporcionales de Cox. Las estadísticas de resumen, junto con un análisis de regresión univariable y multivariable, se producen en una tabla de resultados final.

dependent <- "sbp"
explanatory <- "personality_2L"
fit_sbp1 <- wcgsdata %>% 
  finalfit(dependent, explanatory, metrics = TRUE)

Regresión lineal: presión arterial sistólica por tipo de personalidad.
Dependent: Systolic BP (mmHg) unit value OR (univariable) OR (multivariable)
Personality type B Mean (sd) 127.5 (14.4) - -
A Mean (sd) 129.8 (15.7) 2.32 (1.26 to 3.37, p<0.001) 2.32 (1.26 to 3.37, p<0.001)
Métricas del modelo: presión arterial sistólica por tipo de personalidad.
Number in dataframe = 3154, Number in model = 3154, Missing = 0, Log-likelihood = -13031.39, AIC = 26068.8, R-squared = 0.0059, Adjusted R-squared = 0.0056

Veamos primero nuestra variable explicativa de interés, tipo de personalidad. Cuando se ingresa un factor en un modelo de regresión, el valor predeterminado es comparar cada nivel del factor con un “nivel de referencia”. Lo que elija como nivel de referencia se puede cambiar fácilmente (consulte la Sección 8.9 ). Hay métodos alternativos disponibles (a veces llamados contrastes ), pero es probable que el método predeterminado sea el que desee casi todo el tiempo. Tenga en cuenta que esto a veces se denomina creación una “variable ficticia”.

Se puede ver que la presión arterial media para el tipo A es más alta que para el tipo B. Como solo hay una variable, los análisis univariable y multivariable son los mismos (la columna multivariable puede eliminarse si se desea incluirla select(-5) #5th columnen la función canalizada) .

Aunque la diferencia es numéricamente bastante pequeña (2,3 mmHg), es estadísticamente significativa en parte debido al gran número de pacientes en el estudio. La salida opcional metrics = TRUEnos da el número de filas (en este caso, materias) incluidas en el modelo. Esto es importante ya que con frecuencia la gente olvida que en los modelos de regresión estándar, los datos faltantes de cualquier variable dan como resultado que toda la fila quede excluida del análisis (consulte el Capítulo 11 ).

Tenga en cuenta los resultados AICy Adjusted R-squared. El R-cuadrado ajustado es muy bajo: el modelo solo explica el 0,6% de la variación en la presión arterial sistólica. Esto es de esperar, dado nuestro gráfico de dispersión anterior.

Incluyamos ahora el peso del sujeto, que, según nuestra hipótesis, puede influir en la presión arterial.

dependent <- "sbp"
explanatory <- c("personality_2L", "weight", "age", 
                "height", "chol", "smoking") 
fit_sbp3 <- wcgsdata %>% 
  finalfit(dependent, explanatory, metrics = TRUE)
Regresión lineal multivariable: presión arterial sistólica por variables explicativas disponibles.
Dependent: Systolic BP (mmHg) unit value OR (univariable) OR (multivariable)
Personality type B Mean (sd) 127.5 (14.4) - -
A Mean (sd) 129.8 (15.7) 2.32 (1.26 to 3.37, p<0.001) 1.44 (0.44 to 2.43, p=0.005)
Weight (pounds) [78.0,320.0] Mean (sd) 128.6 (15.1) 0.18 (0.16 to 0.21, p<0.001) 0.24 (0.21 to 0.27, p<0.001)
Age (years) [39.0,59.0] Mean (sd) 128.6 (15.1) 0.45 (0.36 to 0.55, p<0.001) 0.43 (0.33 to 0.52, p<0.001)
Height (inches) [60.0,78.0] Mean (sd) 128.6 (15.1) 0.11 (-0.10 to 0.32, p=0.302) -0.84 (-1.08 to -0.61, p<0.001)
Cholesterol (mg/100 ml) [103.0,645.0] Mean (sd) 128.6 (15.1) 0.04 (0.03 to 0.05, p<0.001) 0.03 (0.02 to 0.04, p<0.001)
Smoking Non-smoker Mean (sd) 128.6 (15.6) - -
Smoker Mean (sd) 128.7 (14.6) 0.08 (-0.98 to 1.14, p=0.883) 0.95 (-0.05 to 1.96, p=0.063)
Métricas del modelo: presión arterial sistólica por variables explicativas disponibles.
Number in dataframe = 3154, Number in model = 3142, Missing = 12, Log-likelihood = -12772.04, AIC = 25560.1, R-squared = 0.12, Adjusted R-squared = 0.12

El resultado nos muestra el rango de peso (78 a 320 libras) y la presión arterial sistólica media (desviación estándar) para toda la cohorte.

El coeficiente con un intervalo de confianza del 95 % se proporciona de forma predeterminada. Esto se interpreta como: por cada libra de aumento de peso, en promedio hay un aumento correspondiente de 0,18 mmHg en la presión arterial sistólica.

Tenga en cuenta la diferencia en la interpretación de las variables continuas y categóricas en el resultado del modelo de regresión (Tabla 7.4 ).

El R-cuadrado ajustado ahora es más alto: la personalidad y el peso juntos explican el 6,8% de la variación en la presión arterial.

El AIC también es ligeramente más bajo, lo que significa que este nuevo modelo se ajusta mejor a los datos.

Hay poco cambio en el tamaño de los coeficientes para cada variable en el análisis multivariable, lo que significa que son razonablemente independientes. Como ejercicio, verifique la distribución del peso por tipo de personalidad utilizando un diagrama de caja.

Ahora agreguemos otras variables que pueden influir en la presión arterial sistólica.

dependent <- "sbp"
explanatory <- c("personality_2L", "weight", "age", 
                "height", "chol", "smoking") 
fit_sbp3 <- wcgsdata %>% 
  finalfit(dependent, explanatory, metrics = TRUE)
Regresión lineal multivariable: presión arterial sistólica por variables explicativas disponibles.
Dependent: Systolic BP (mmHg) unit value OR (univariable) OR (multivariable)
Personality type B Mean (sd) 127.5 (14.4) - -
A Mean (sd) 129.8 (15.7) 2.32 (1.26 to 3.37, p<0.001) 1.44 (0.44 to 2.43, p=0.005)
Weight (pounds) [78.0,320.0] Mean (sd) 128.6 (15.1) 0.18 (0.16 to 0.21, p<0.001) 0.24 (0.21 to 0.27, p<0.001)
Age (years) [39.0,59.0] Mean (sd) 128.6 (15.1) 0.45 (0.36 to 0.55, p<0.001) 0.43 (0.33 to 0.52, p<0.001)
Height (inches) [60.0,78.0] Mean (sd) 128.6 (15.1) 0.11 (-0.10 to 0.32, p=0.302) -0.84 (-1.08 to -0.61, p<0.001)
Cholesterol (mg/100 ml) [103.0,645.0] Mean (sd) 128.6 (15.1) 0.04 (0.03 to 0.05, p<0.001) 0.03 (0.02 to 0.04, p<0.001)
Smoking Non-smoker Mean (sd) 128.6 (15.6) - -
Smoker Mean (sd) 128.7 (14.6) 0.08 (-0.98 to 1.14, p=0.883) 0.95 (-0.05 to 1.96, p=0.063)
Métricas del modelo: presión arterial sistólica por variables explicativas disponibles.
Number in dataframe = 3154, Number in model = 3142, Missing = 12, Log-likelihood = -12772.04, AIC = 25560.1, R-squared = 0.12, Adjusted R-squared = 0.12

Se han agregado la edad, la altura, el colesterol sérico y el tabaquismo. Parte de la variación explicada por el tipo de personalidad ha sido absorbida por estas nuevas variables: la personalidad ahora está asociada con un cambio promedio de la presión arterial de 1,4 mmHg.

El R-cuadrado ajustado ahora nos dice que el modelo explica el 12% de la variación en la presión arterial, lo cual es una mejora.

Busque variables que muestren grandes cambios en el tamaño del efecto o un cambio en la dirección del efecto al pasar de un modelo univariable a un modelo multivariable. Esto significa que las otras variables en el modelo tienen un gran efecto sobre esta variable y se debe explorar la causa de esto. Por ejemplo, en este ejemplo, el efecto de la altura cambia de tamaño y dirección. Esto se debe a la estrecha asociación entre el peso y la altura. Por ejemplo, puede ser más sensato trabajar con el índice de masa corporal ( ) en lugar de las dos variables separadas.wmiigramoht/hmiigramoht2weight/height2

En general, las variables que están altamente correlacionadas entre sí deben tratarse con cuidado en el análisis de regresión. Esto se denomina colinealidad y puede dar lugar a estimaciones inestables de los coeficientes. Para obtener más información sobre esto, consulte la Sección 9.4.2 .

Vamos a crear una nueva variable llamada bmi, observe la conversión de libras y pulgadas a kg y m:

wcgsdata <- wcgsdata %>% 
  mutate(
    bmi = ((weight*0.4536) / (height*0.0254)^2) %>% 
      ff_label("BMI")
  )

El peso y la altura ahora se pueden reemplazar en el modelo con BMI.

explanatory <- c("personality_2L", "bmi", "age", 
                "chol", "smoking") 
fit_sbp4 <- wcgsdata %>% 
  finalfit(dependent, explanatory, metrics = TRUE)
Multivariable linear regression: Systolic blood pressure using BMI.
Dependent: Systolic BP (mmHg) unit value OR (univariable) OR (multivariable)
Personality type B Mean (sd) 127.5 (14.4) - -
A Mean (sd) 129.8 (15.7) 2.32 (1.26 to 3.37, p<0.001) 1.51 (0.51 to 2.50, p=0.003)
BMI [11.2,39.0] Mean (sd) 128.6 (15.1) 1.69 (1.50 to 1.89, p<0.001) 1.65 (1.46 to 1.85, p<0.001)
Age (years) [39.0,59.0] Mean (sd) 128.6 (15.1) 0.45 (0.36 to 0.55, p<0.001) 0.41 (0.32 to 0.50, p<0.001)
Cholesterol (mg/100 ml) [103.0,645.0] Mean (sd) 128.6 (15.1) 0.04 (0.03 to 0.05, p<0.001) 0.03 (0.02 to 0.04, p<0.001)
Smoking Non-smoker Mean (sd) 128.6 (15.6) - -
Smoker Mean (sd) 128.7 (14.6) 0.08 (-0.98 to 1.14, p=0.883) 0.98 (-0.03 to 1.98, p=0.057)
Model metrics: Systolic blood pressure using BMI.
Number in dataframe = 3154, Number in model = 3142, Missing = 12, Log-likelihood = -12775.03, AIC = 25564.1, R-squared = 0.12, Adjusted R-squared = 0.12

Según el principio de parsimonia, es posible que deseemos eliminar las variables que no contribuyen mucho al modelo. Por ejemplo, comparemos modelos con y sin la inclusión de fumar. Esto se puede hacer fácilmente usando la finalfit explanatory_multiopción.

dependent <- "sbp"
explanatory       <- c("personality_2L", "bmi", "age", 
                      "chol", "smoking") 
explanatory_multi <- c("bmi", "personality_2L", "age", 
                      "chol") 
fit_sbp5 <- wcgsdata %>% 
  finalfit(dependent, explanatory, 
           explanatory_multi, 
           keep_models = TRUE, metrics = TRUE)
Regresión lineal multivariable: presión arterial sistólica por variables explicativas disponibles y modelo reducido.
Dependent: Systolic BP (mmHg) unit value OR (univariable) OR (multivariable full) OR (multivariable)
Personality type B Mean (sd) 127.5 (14.4) - - -
A Mean (sd) 129.8 (15.7) 2.32 (1.26 to 3.37, p<0.001) 1.51 (0.51 to 2.50, p=0.003) 1.56 (0.57 to 2.56, p=0.002)
BMI [11.2,39.0] Mean (sd) 128.6 (15.1) 1.69 (1.50 to 1.89, p<0.001) 1.65 (1.46 to 1.85, p<0.001) 1.62 (1.43 to 1.82, p<0.001)
Age (years) [39.0,59.0] Mean (sd) 128.6 (15.1) 0.45 (0.36 to 0.55, p<0.001) 0.41 (0.32 to 0.50, p<0.001) 0.41 (0.32 to 0.50, p<0.001)
Cholesterol (mg/100 ml) [103.0,645.0] Mean (sd) 128.6 (15.1) 0.04 (0.03 to 0.05, p<0.001) 0.03 (0.02 to 0.04, p<0.001) 0.03 (0.02 to 0.04, p<0.001)
Smoking Non-smoker Mean (sd) 128.6 (15.6) - - -
Smoker Mean (sd) 128.7 (14.6) 0.08 (-0.98 to 1.14, p=0.883) 0.98 (-0.03 to 1.98, p=0.057) -
Métricas del modelo: presión arterial sistólica por variables explicativas disponibles (arriba) con modelo reducido (abajo).
Number in dataframe = 3154, Number in model = 3142, Missing = 12, Log-likelihood = -12775.03, AIC = 25564.1, R-squared = 0.12, Adjusted R-squared = 0.12
Number in dataframe = 3154, Number in model = 3142, Missing = 12, Log-likelihood = -12776.83, AIC = 25565.7, R-squared = 0.12, Adjusted R-squared = 0.12

Esto da como resultado poco cambio en los otros coeficientes y muy poco cambio en el AIC. Consideraremos el modelo reducido como el modelo final.

También podemos visualizar modelos usando trazados. Esto es útil para comunicar un modelo en un espacio restringido, por ejemplo, en una presentación.

dependent <- "sbp"
explanatory       <- c("personality_2L", "bmi", "age", 
                      "chol", "smoking") 
explanatory_multi <- c("bmi", "personality_2L", "age", 
                      "chol") 
fit_sbp5 <- wcgsdata %>% 
  ff_plot(dependent, explanatory_multi)

Podemos verificar las suposiciones como arriba.

dependent <- "sbp"
explanatory_multi <- c("bmi", "personality_2L", "age", 
                      "chol") 
wcgsdata %>%
  lmmulti(dependent, explanatory_multi) %>% 
  autoplot()

FIGURA 7.13: Gráficos de diagnóstico: modelo de regresión lineal de la presión arterial sistólica

7.3.8 Resumen

El tiempo dedicado a comprender verdaderamente la regresión lineal está bien invertido. No porque pasará mucho tiempo haciendo modelos de regresión lineal en ciencia de datos de salud (rara vez lo hacemos), sino porque es la base esencial para comprender modelos estadísticos más avanzados.

Incluso se puede argumentar que todas las pruebas estadísticas comunes son modelos lineales . Esta gran publicación demuestra maravillosamente cómo las pruebas estadísticas con las que estamos más familiarizados (como la prueba t, la prueba U de Mann-Whitney, ANOVA, la prueba de chi-cuadrado) pueden considerarse simplemente como casos especiales de modelos lineales o aproximaciones cercanas.

La regresión consiste en ajustar líneas, preferiblemente rectas, a través de puntos de datos. Haz un amigo cercano.y=β0+β1X1y=β0+β1x1

Un libro excelente para leer más sobre la regresión es Harrell ( 2015 ) .

Referencias

Harrell, Frank. 2015. Estrategias de modelado de regresión: con aplicaciones a modelos lineales, regresión logística y ordinal y análisis de supervivencia . 2ª ed. Serie Springer en Estadística. Publicaciones internacionales de Springer. https://doi.org/10.1007/978-3-319-19425-7 .

7.4 Ejercicios

7.4.1 Ejercicio

Usando la aplicación Shiny de regresión multivariable , piratee algunos valores p para probarse a sí mismo el principio de las pruebas múltiples.

Desde la posición predeterminada, seleccione “modelo aditivo” y luego establezca “Desviación estándar de error” en 2. Deje todos los efectos verdaderos en 0. ¿Cuántos clics de “Nueva muestra” necesitó antes de obtener un resultado estadísticamente significativo?

7.4.2 Ejercicio

Trace el PIB per cápita por año para los países de Europa. Agregue una línea recta de mejor ajuste a la gráfica. ¿En qué países la relación no es lineal? Avanzado: haga que la línea sea curva agregando un término cuadrático/cuadrado, por ejemplo, . Sugerencia: consulte la página de ayuda de geom_smooth() en .y X2+Xy x2+xformula

7.4.3 Ejercicio

Compare la relación entre el PIB per cápita y el año para dos países de su elección. Si no puedes elegir, que sea Albania y Austria.

Ajuste y trace un modelo de regresión que promedie simplemente los valores de los dos países.

Ajuste y trace un modelo de regresión de mejor ajuste.

Utilice su modelo para determinar la diferencia en el PIB per cápita de sus países en 1980.

7.4.4 Ejercicio

Utilice los datos del Estudio del Grupo Colaborativo Occidental para determinar si existe una relación entre la edad y el nivel de colesterol.

Recuerda graficar los datos primero.

Haz un modelo de regresión simple. Agregue otras variables para ajustar posibles factores de confusión.

7.5 Soluciones

Solución al Ejercicio 7.4.2 :

gapdata %>% 
  filter(continent == "Europe") %>% 
  ggplot(aes(x = year, y = gdpPercap)) + 
  geom_point() +
  geom_smooth(method = "lm") +
  facet_wrap(country ~ .)
`geom_smooth()` using formula = 'y ~ x'

# Países no lineales: Irlanda, Montenegro, Serbia.
# Agregar término cuadrático
gapdata %>% 
  filter(continent == "Europe") %>% 
  ggplot(aes(x = year, y = gdpPercap)) + 
  geom_point() +
  geom_smooth(method = "lm", formula = "y ~ poly(x, 2)") +
  facet_wrap(country ~ .)

Solución al Ejercicio 7.4.3 :

# Primer Plot 
gapdata %>% 
  filter(country %in% c("Albania", "Austria")) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = gdpPercap, colour= country))

# Ajusta la línea promedio entre dos países.
fit_both1 = gapdata %>% 
  filter(country %in% c("Albania", "Austria")) %>% 
  lm(gdpPercap ~ year, data = .)

gapdata %>% 
  filter(country %in% c("Albania", "Austria")) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = gdpPercap, colour = country)) +
  geom_line(aes(x = year, y = predict(fit_both1)))

# Ajusta la línea promedio entre dos países. 
fit_both3 = gapdata %>% 
  filter(country %in% c("Albania", "Austria")) %>% 
  lm(gdpPercap ~ year * country, data = .)

gapdata %>% 
  filter(country %in% c("Albania", "Austria")) %>% 
  ggplot() + 
  geom_point(aes(x = year, y = gdpPercap, colour = country)) +
  geom_line(aes(x = year, y = predict(fit_both3), group = country))

# Puede usar la ecuación de regresión a mano para resolver la diferencia
summary(fit_both3)

#O pasar a NewData para predecir estimar los dos puntos de interés
gdp_1980 <- predict(fit_both3, newdata = data.frame(
  country = c("Albania", "Austria"),
  year = c(1980, 1980))
)
gdp_1980
gdp_1980[2] - gdp_1980[1]

Solución al Ejercicio 7.4.4 :

# Data del primer Plot 
wcgsdata %>% 
  ggplot(aes(x = age, y = chol))+
  geom_point() + 
  geom_smooth(method = "lm", formula = "y~x")
Warning: Removed 12 rows containing non-finite values (`stat_smooth()`).
Warning: Removed 12 rows containing missing values (`geom_point()`).

# Relación positiva débil

# Regresión lineal simple
dependent <- "chol"
explanatory <- "age" 
wcgsdata %>% 
  finalfit(dependent, explanatory, metrics = TRUE)
Note: dependent includes missing data. These are dropped.
# Para cada año de edad, el colesterol aumenta en 0.7 mg/100 ml.
# Este gradiente difiere de cero.

# ¿Es este efecto independiente de otras variables disponibles?

# Haz el IMC como arriba
dependent <- "chol"
explanatory <- c( "age", "bmi", "sbp", "smoking", "personality_2L") 
wcgsdata %>% 
  mutate(
    bmi = ((weight*0.4536) / (height*0.0254)^2) %>% 
      ff_label("BMI")
  ) %>% 
  finalfit(dependent, explanatory, metrics = TRUE)
Note: dependent includes missing data. These are dropped.