Regresión Logistica

Ejemplo: supongamos 400 tiendas de discos repartidas entre los países de la U.E. Se clasifica a los compradores en 3 categorías distintas: Jóvenes, Edad Media, Mayores, y a los tipos de música en 5 tipos:

\[\begin{array}{ccccc} & \text { Jov } & \text { Med } & \text { May } & \text { Total } \\ \text { A } & 70 & 0 & 0 & 70 \\ \text { B } & 45 & 45 & 0 & 90 \\ \text { C } & 30 & 30 & 30 & 90 \\ \text { D } & 0 & 80 & 20 & 100 \\ \text { E } & 35 & 5 & 10 & 50 \\ \text { Total } & 180 & 160 & 60 & 400 \end{array}\] \[\begin{array}{cccc} & \text { Jov } & \text { Med } & \text { May } \\ \text { A } & 1 & 0 & 0 \\ \text { B } & 0.5 & 0.5 & 0 \\ \text { C } & 0.33 & 0.33 & 0.33 \\ \text { D } & 0 & 0.8 & 0.2 \\ \text { E } & 0.7 & 0.1 & 0.2 \\ \text { Total } & 0.45 & 0.40 & 0.15 \end{array}\]

Si nos centramos en las columnas

\[\begin{array}{lcccc} & \text { Jov } & \text { Med } & \text { Mayores} & \text { Total } \\ \text { A } & 0.39 & 0 & 0 & 0.175 \\ \text { B } & 0.25 & 0.28 & 0 & 0.225 \\ \text { C } & 0.17 & 0.19 & 0.50 & 0.225 \\ \text { D } & 0 & 0.50 & 0.33 & 0.25 \\ \text { E } & 0.19 & 0.03 & 0.17 & 0.125 \end{array}\]

Por ejemplo de los 160 compradores en el caso de los de mediana edad, un 50% compra el tipo de música \(D\) en vez del porcentaje general del 25%.

Independencia

Si el hecho de que aparezca o se presente una categoría junto con otra no es ni más ni menos probable de que se presenten las dos categorías por separado, se dice que las variables son independientes y, en general, se dice que la tabla es homogénea.

Dadas dos variables aleatorias \(X\) e \(Y\) , son independientes si

\[P\left(X=x_{i}, Y=y_{j}\right)=P\left(X=x_{i}\right) \cdot P\left(Y=y_{j}\right)\]

para todo (\(i,j\))

\[ \begin{aligned} p_{i j} &=\frac{n_{i j}}{n . .} \\ p_{i .} &=\frac{n_{i .}}{n . .} \\ p_{. j} &=\frac{n_{. j}}{n . .} \end{aligned} \] Así, si \[ P\left(X=x_{i}, Y=y_{j}\right)=p_{i j}=p_{i} \cdot \times p_{\cdot j} \]

para todo \(i\), \(j\), las variables \(X\) e \(Y\) son independientes y la tabla es homogénea

En el caso de de ser cierta la hipótesis de independencia esperaremos encontrar \(E_{ij}\) objetos dentro de la casilla \((i, j)- ésima\), donde

\[ E_{i j}=n.. p_{i j}=n.. p_{i\cdot} p_{\cdot j}=\frac{n_{i\cdot} n_{\cdot j}}{n_{. .}} \]

Contraste Chi cuadrado

contraste o test que me mida las distancias entre lo que uno observa y lo que esperaría si se cumple la hipótesis nula de independencia

\[ \chi^{2}=\sum_{i=1}^{r} \sum_{j=1}^{c} \frac{\left(n_{i j}-\frac{n_{i \cdot} n_{\cdot j}}{n_{. .}}\right)^{2}}{\frac{n_{i \cdot} n_{\cdot j}}{n_{..}}} \]

\[\chi^2 = \sum_{i,j} \frac{(\text{observado}_{ij} - \text{esperado}_{ij})^2}{\text{esperado}_{ij}}\]

library("factoextra")
library("FactoMineR")
library("gplots")
library("dplyr")

Tabla de contingencias observadas

library(sjPlot)
library(sjmisc)
library(sjlabelled)
O=matrix(c(11,3,8,2,9,14,12,13,28), nrow = 3, byrow = T)

colnames(O)=c("Mano der", "Mano izq", "Manos iguales")
rownames(O)=c("pie der", "pie izq", "pies iguales")

Prueba Chi-cuadrado

La prueba Chi-cuadrado es un método estadístico utilizado para determinar si existe una asociación significativa entre dos variables categóricas en una muestra. Es una prueba de independencia que compara las frecuencias observadas en una tabla de contingencia con las frecuencias esperadas bajo la hipótesis de que las dos variables son independientes.

\(H_0\): No hay asociación significativa entre las variables. \(H_1\): Hay una asociación significativa entre las variables.

Para realizar la prueba Chi-cuadrado:

  • Crear una tabla de contingencia con las frecuencias observadas para cada categoría.
  • Calcular las frecuencias esperadas asumiendo la independencia entre las variables.
  • Calcular el estadístico Chi-cuadrado. -Comparar el estadístico calculado con el valor crítico de la distribución Chi-cuadrado para determinar si se rechaza o no la hipótesis nula.

con una significancia del 5% hay evidencia para decir que el tama?o de manos y pies es dependiente

library(kableExtra)
  • Tabla de valores observados
kable(addmargins(O))
Mano der Mano izq Manos iguales Sum
pie der 11 3 8 22
pie izq 2 9 14 25
pies iguales 12 13 28 53
Sum 25 25 50 100
O_chisq = chisq.test(O)
  • Tabla de valores Esperados

Los valores esperados son el número de observaciones que se podría esperar que ocurran, en promedio, si las proporciones de la prueba fueran verdaderas.

kable(addmargins(O_chisq$expected))
Mano der Mano izq Manos iguales Sum
pie der 5.50 5.50 11.0 22
pie izq 6.25 6.25 12.5 25
pies iguales 13.25 13.25 26.5 53
Sum 25.00 25.00 50.0 100
par(mfrow = c(1, 2))

mosaicplot(O,  col = 3:5, main= "Valores observados",)
mosaicplot(O_chisq$expected, col = 3:5, main= "Valores esperados")

par(mfrow = c(1, 1))

prueba chi cuadrado

O_chisq = chisq.test(O)
O_chisq
## 
##  Pearson's Chi-squared test
## 
## data:  O
## X-squared = 11.942, df = 4, p-value = 0.01779

Test exacto de Fisher

La prueba exacta de Fisher es otro método para evaluar la asociación entre dos variables categóricas. Es especialmente útil cuando las muestras son pequeñas, y los supuestos de la prueba Chi-cuadrado no se cumplen (como en casos donde las frecuencias esperadas son muy bajas < 5 ).

La prueba exacta de Fisher calcula la probabilidad de observar una distribución de frecuencias igual o más extrema que la observada, asumiendo la hipótesis nula de independencia entre las variables. Utiliza la distribución hipergeométrica en lugar de la distribución Chi-cuadrado

La prueba de Fisher es el test exacto utilizado cuando se quiere estudiar si existe asociación entre dos variables cualitativas, es decir, si las proporciones de una variable son diferentes dependiendo del valor que adquiera la otra variable. En la gran mayoría de casos, el test de Fisher se aplica para comparar dos variables categóricas con dos niveles cada una (tabla 2x2). Es posible utilizarlo con tablas 2xK niveles pero los requerimientos de cálculo son altos.

Nota: Usa la prueba Chi-cuadrado cuando las condiciones son adecuadas: muestras grandes y frecuencias esperadas suficientes (generalmente, más de 5 en cada celda de la tabla de contingencia). Si no se cumplen estas condiciones, es preferible utilizar la prueba exacta de Fisher.

Ejemplo:

Enfermo No enfermo
Vegetariano 10 40
No vegetariano 20 30

Regresión Logistica

El objetivo de este procedimiento es establecer el mejor modelo de explicación de una variable dicotómica cualitativa \(Y [0,1]\), denominada variable de respuesta o dependiente, en base a otra serie. de variables denominadas covariables, variables predictoras o simplemente variables independientes \(X_1\) , \(X_2\) , \(X_3\) , …, \(X_m\) que indican las características del sujeto, y que pueden ser: - Discretas - Continuas.

Cuando la variable respuesta \(Y\) es de tipo dicotómico nos referimos a regresión logística, y cuando la variable dependiente \(Y\) es cualitativa con más de dos categorías (policotómica), nos referimos a regresión logística multinomial.

Además de evitar las limitaciones de la regresión lineal cuando la variable de resultado es dicotómica, esta técnica permite interpretar los parámetros de forma sencilla en términos de odds ratio (OR).

Definiciones previas

Riesgo o probabilidad

El número de casos en que ocurre el evento, dividido por el número total de casos o riesgo de ocurrencia del evento.

Ejemplo: 20 de cada 200 recién nacidos tienen asma.

El riesgo de asma es por lo tanto 20/200=0.1

Odss

El número de casos en los que ocurre el evento, dividido por el número de casos en los que no ocurre el evento.

En el ejemplo anterior: probabilidades de asma=20/180.

El riesgo de tener hijos con asma se ve incrementado en mujeres fumadoras, con una frecuencia de 10 casos de cada 40 mujeres fumadoras. En este ejemplo el riesgo=10/40 y probabilidades de recién nacido asmático (NB)=10/30.

Para medir la intensidad de la relación entre un determinado tipo de exposición (tabaquismo) y un determinado efecto (RN asmático), utilizamos “medidas de fuerza de asociación”. Estas medidas de asociación nunca miden la causalidad, varían según el diseño del estudio y están representadas por el riesgo relativo y la razón de posibilidades.

Riesgo relativo (RR)

Relación entre el riesgo de RN asmáticos de madre fumadora y RN asmáticos de madre no fumadora.

Ejemplo: RR=(10/40)/(20/200)=2.5.

Odds RATIO (OR) “razón de momios” o “cociente de momios”

Medida utilizada en estadística y epidemiología para cuantificar la fuerza de asociación entre dos variables categóricas en un estudio de investigación.

El odds ratio se calcula comparando las probabilidades de un evento entre dos grupos o categorías diferentes. Se define como la razón entre los odds (probabilidad de éxito dividida por la probabilidad de fracaso) en el grupo de interés (por ejemplo, casos) y los odds en un grupo de referencia (por ejemplo, controles).

\[OR = (A/B) / (C/D)\]

Donde:

  • A representa el número de casos expuestos al factor de interés.
  • B representa el número de casos no expuestos al factor de interés.
  • C representa el número de controles expuestos al factor de interés.
  • D representa el número de controles no expuestos al factor de interés.

El odds ratio indica cuántas veces es más probable que ocurra el evento de interés en el grupo de exposición en comparación con el grupo de no exposición. Si el odds ratio es igual a 1, significa que no hay asociación entre la exposición y el evento. Un odds ratio mayor a 1 indica una asociación positiva, lo que implica que la exposición está relacionada con un mayor riesgo de que ocurra el evento. Por otro lado, un odds ratio menor a 1 indica una asociación negativa, lo que sugiere que la exposición está relacionada con un menor riesgo de que ocurra el evento.

Relación entre las probabilidades de RN asmáticos expuestos a madres fumadoras y las probabilidades de RN asmáticos no expuestos a madres fumadoras.

Ejemplo: OR=(10/30)/(20/180)=3.

El RR es intuitivo y más fácil de interpretar que el OR, aunque este último es más fácil de calcular y se puede realizar en cualquier diseño, ya que el RR no se puede utilizar en estudios de casos y controles o retrospectivos.

Tanto RR como OR no tienen dimensiones y toman valores entre cero e infinito. De este modo:

\(OR=1\) se interpreta como que indica que no existe tal factor de riesgo, ya que las probabilidades para los expuestos son las mismas que para los no expuestos.

\(OR>1\) se interpreta como que indica que existe un factor de riesgo, ya que las probabilidades de que el evento ocurra en respuesta a la exposición al factor son mayores que en el caso de no exposición.

\(OR<1\) se interpreta como que indica que las probabilidades de que ocurra el evento en los expuestos al tratamiento son menores que en el caso de los no expuestos al tratamiento, por lo que estamos en presencia de un factor protector.

OR no tiene dimensiones y toma valores entre cero e infinito.

Regresión logística binaria

El modelo de regresión logística

  • La regresión logística es un método de análisis estadístico que se utiliza para modelar la relación entre una variable dependiente binaria (es decir, que puede tomar dos valores, como 0 o 1, sí o no, éxito o fracaso) y una o más variables independientes, que pueden ser tanto categóricas como continuas.

  • La regresión logística es especialmente útil cuando se desea predecir la probabilidad de un evento o resultado en función de ciertos factores o características.

  • La regresión logística modela la probabilidad de que un evento ocurra utilizando una función logística (o función sigmoide) que transforma las probabilidades en log-odds.

La regresión logística puede ser de dos tipos:

  • Regresión logística binaria: Se utiliza cuando la variable dependiente tiene solo dos posibles valores (por ejemplo, enfermo o sano, aprobado o reprobado). En este caso, la regresión logística modela la probabilidad de que la variable dependiente tome un valor en función de las variables independientes.

  • Regresión logística multinomial: Se utiliza cuando la variable dependiente tiene más de dos posibles categorías (por ejemplo, bajo, medio y alto riesgo). En este caso, la regresión logística modela la probabilidad de que la variable dependiente pertenezca a una categoría específica en función de las variables independientes.

La regresión logística es comúnmente utilizada en estudios epidemiológicos, médicos y de ciencias sociales para investigar la relación entre factores de riesgo o exposición y resultados binarios o categóricos. También se utiliza en modelos predictivos y de clasificación en campos como el aprendizaje automático y la inteligencia artificial.

La definición del mejor modelo depende del tipo y objetivo del estudio.

El modelo suele tener dos tipos de objetivo:

  • predictivo o

  • explicativo.

    • En un modelo con objetivos predictivos pretendemos establecer un modelo parsimonioso, es decir, un modelo que involucre el menor número de variables que mejor expliquen la variable dependiente.

    • En el caso de un modelo con objetivos explicativos, se pretende estudiar la relación causal entre una variable “causa” y una variable “efecto”, con el debido control de las posibles variables de confusión (definidas en el Apartado ‘Interacción y factores de confusión’) o variables modificadoras del efecto (interacción) en esta relación causal.

Construcción del modelo:

Función logística (o función sigmoide):

Es una función matemática en forma de “S” que toma cualquier valor de entrada real y lo transforma en un valor entre 0 y 1. La función logística se define como:

\[f(x) = \frac{1} {1 + e^{-x}}\]

  • donde \(x\) es el valor de entrada y \(e\) es la base del logaritmo natural (aproximadamente igual a 2.718).
sigmoid <- function(x) {
  1 / (1 + exp(-x))
}

curve(sigmoid, from = -10, to = 10, n = 100, xlab = "x", ylab = "sigmoid(x)", main = "Función Sigmoide")

Log-odds (o logit):

Los log-odds son el logaritmo natural de la razón de odds, que es la proporción entre la probabilidad de que ocurra un evento y la probabilidad de que no ocurra. Si \(p\) es la probabilidad de que un evento ocurra, entonces los log-odds (logit) se definen como:

\[\text{logit}(p) = \ln\bigg(\frac{p}{1 - p}\bigg)\]

Concepto de ODDS o razón de probabilidad, ratio de ODDS y logaritmo de ODDS

En la regresión logística, se modela la probabilidad de que la variable respuesta \(Y\) pertenezca al nivel de referencia \(1\) en función del valor que adquieran los predictores, mediante el uso de .

  • Supóngase que la probabilidad de que un evento sea verdadero es de 0.8, por lo que la probabilidad de evento falso es de \(1 - 0.8 = 0.2\).

  • Los ODDs o razón de probabilidad de verdadero se definen como el ratio entre la probabilidad de evento verdadero y la probabilidad de evento falso \(\frac{p}{1-p}\). En este caso los ODDs de verdadero son \(\frac{0.8}{0.2} = 4\), lo que equivale a decir que se esperan 4 eventos verdaderos por cada evento falso.

  • La trasformación de probabilidades a ODDs es monotónica, si la probabilidad aumenta también lo hacen los ODDs, y viceversa. El rango de valores que pueden tomar los ODDs es de \([0,∞]\). Dado que el valor de una probabilidad está acotado entre \([0,1]\) se recurre a una trasformación logit (existen otras) que consiste en el logaritmo natural de los ODDs. Esto permite convertir el rango de probabilidad previamente limitado a \([0,1]\) a \([−∞,+∞]\).

p odds Log(odds)
0.001 0.001001 -6.906755
0.01 0.010101 -4.59512
0.2 0.25 -1.386294
0.3 0.4285714 -0.8472978
0.4 0.6666667 -0.4054651
0.5 1 0
0.6 1.5 0.4054651
0.7 2.333333 0.8472978
0.8 4 1.386294
0.9 9 2.197225
0.999 999 6.906755
0.9999 9999 9.21024

Caso ubivariante

  • \(Y\) : variable dependiente dicotómica, con respuesta 0 cuando el evento no ocurre (ausencia de evento) y respuesta 1 cuando el evento está presente (evento).

  • \(X_1\) : variable independiente, que puede ser de cualquier naturaleza, cualitativa o cuantitativa.

Deseamos relacionar la verdadera proporción \(p\) de individuos que presentan una determinada característica (p. ej., estar enfermos) con el valor de una determinada variable explicativa \(X_1\) como posible factor de riesgo. Si se realiza una regresión lineal, y con el fin de utilizar los datos para estimar los coeficientes \(β_0\) , \(β_1\) de la ecuación:

\[p=\beta_0 + \beta_1X_1\]

Lo anterior lleva a resultados absurdos, ya que \(p\) toma valores entre 0 y 1, mientras que en el modelo de regresión suponemos que \(p\) sigue una distribución normal y por lo tanto debe estar entre \(-\infty\) y \(\infty\) Para evitar este problema, es común definir una función de enlace \(f ( p )\) entre \(-\infty\) y \(\infty\), y luego ver si podemos asumir el modelo lineal clásico. De esta forma se obtiene una distribución normal para la variable dependiente \(f ( p )\), transformando la ecuación anterior en la expresión:

\[f(p)=\beta_0 + \beta_1X_1+e\]

donde “ \(e\) ” son los residuos, es decir, la variabilidad no explicada en el modelo.

En el entorno estadístico es común utilizar la transformación logit: \(f (p)=\ln\big(\frac{p}{1−p}\big)\). Con esta transformación, el modelo logístico simple es:

\[y=logit(p)=\ln\bigg(\frac{p}{1−p}\bigg)= \beta_0 + \beta_1X_1\]

O equivalente:

\[p=\frac{1}{1+e^{-(\beta_0 + \beta_1X_1)}}\]

Para el caso multivariante, la expresión anterior se generaliza al caso en el que existen k variables independientes o factores de riesgo ( \(X_1\) , \(X_2\) ,… \(X_k\) ), a partir de la expresión:

\[y=\ln\bigg(\frac{p}{1−p}\bigg)= \beta_0 + \beta_1X_1+ \cdots + \beta_kX_k \]

O en términos de probabilidad:

\[p=\frac{1}{1+e^{-(\beta_0 + \beta_1X_1+ \cdots + \beta_kX_k)}}\]

Las exponenciales de los coeficientes \(β_i\) asociados a las variables independientes se interpretan como el OR de padecer la enfermedad en cuestión (o de ocurrencia del evento) por cada incremento en la variable independiente, ajustando por el resto de variables independientes.

El aspecto verdaderamente importante del modelo de regresión logística es que podemos analizar conjuntamente varios factores o variables, con el fin de examinar cómo pueden afectar la ocurrencia o no ocurrencia del evento de estudio.

Codificación e interpretación de los coeficientes del modelo

Coeficientes del modelo logístico como cuantificadores de riesgo

Es recomendable seguir las siguientes recomendaciones a la hora de codificar las variables de un modelo de regresión logística, ya que facilita la interpretación de los resultados:

  • Variable dependiente : codificamos como 1 la ocurrencia del evento de interés y como 0 la ausencia del evento.

Ejemplo:

  • 1: enfermedad sí,

  • 0: enfermedad no.

  • Variables independientes : estas pueden ser de diferentes tipos:

    • Variable numérica: para introducir la variable en el modelo, debe satisfacer la hipótesis de linealidad, es decir, por cada unidad de incremento en la variable numérica, el OR (\(exp(B_j\)) aumenta en un valor multiplicativo constante. En este caso podemos utilizar la variable tal y como está en el modelo. Si no se cumple la hipótesis de linealidad, podemos transformar la variable numérica, categorizándola. Cuando la variable es continua, la OR asociada se interpreta como el incremento del riesgo por incremento unitario en la covariable analizada, es decir, si el factor de riesgo fuera la edad, la variable resultado sería tener o no la enfermedad, y si la OR fuera 1.87, entonces este valor se interpretaría como que indica que por cada año adicional de edad del sujeto, el riesgo de padecer la enfermedad aumenta en 1,87.

    Es decir, la probabilidad de padecer la enfermedad aumenta un 87% por cada año adicional de edad, ajustando por el resto de variables del modelo en el caso multivariado.

    • Variable dicotómica : codificamos como 1 el caso que se cree que favorece la ocurrencia del evento, mientras que el caso contrario se codifica como 0, es decir, codificamos como 1 aquellos individuos expuestos a un supuesto factor de riesgo, y como 0 aquellos individuos no expuestos al mismo. factor mencionado. Así, si codificamos a las madres fumadoras como 1 y a las madres no fumadoras como 0, y se toma como evento de interés un niño asmático (codificado como 1) versus un niño no asmático (codificado como 0), y obtenemos OR=2.23, entonces se puede concluir que las madres fumadoras tienen un riesgo 2.23 veces mayor de tener un hijo asmático que las madres no fumadoras.

    Alternativamente, esto puede interpretarse como que el riesgo de tener un hijo con asma en el caso de una madre fumadora es algo más del doble que en el caso de una madre no fumadora, ajustando en todos los casos por el resto de covariables del modelo.

    • Variable categórica: este tipo de variable se divide en diferentes variables dicotómicas que representan las distintas categorías. Estas variables se conocen como indicadores, variables internas, variables de diseño o variables “ficticias”.

    La mayoría de las aplicaciones de software estadístico generan internamente estas variables al incluir una variable de tipo factorial en el modelo (es decir, con más de dos categorías). En este tipo de codificación solemos seleccionar una categoría de referencia, y el coeficiente de la ecuación de regresión para cada “dummy La variable” (siempre transformada con la función exponencial) corresponde al OR de esa categoría con respecto al nivel de referencia.

    Así, cuantificamos el cambio en el riesgo de sufrir el evento de cada una de las categorías con respecto a la categoría de referencia.

Como regla general, si una variable cualitativa tiene \(k\) niveles, se necesitarán de \(k-1\) variables indicadoras para resumir la variable cualitativa.

Conjunto de datos

Estos datos provienen de un estudio de pacientes con accidente cerebrovascular hospitalizados. El conjunto de datos original contiene 12 variables, pero nuestras principales variables de interés son:

  • status : Estado del paciente durante la hospitalización (vivo o muerto)
  • gcs: Escala de coma de Glasgow al ingreso (rango de 3 a 15)
  • stroke_type : IS (ACV isquémico) o HS (ACV hemorrágico) sexo: femenino o masculino
  • dm : Antecedentes de Diabetes (sí o no)
  • sbp : Presión arterial sistólica (mmHg)
  • edad : edad del paciente al ingreso

La variable objetivo es status . Se etiqueta como vivo o muerto, que es el resultado de cada paciente durante la hospitalización.

library(haven)
library(tidyverse)
library(gtsummary)
library(broom)
#library(LogisticDx)
library(here)
library(kableExtra)
library(rio)
library(DT)
fatal=rio::import("https://github.com/Wilsonsr/Metodos-Estadisticos/raw/main/BASES/basestronk.csv")
DT::datatable(fatal)
glimpse(fatal)
## Rows: 226
## Columns: 7
## $ sex         <chr> "Masculino", "Masculino", "Masculino", "Femenino", "Mascul…
## $ status      <chr> "Vivo", "Vivo", "Vivo", "Vivo", "Vivo", "Vivo", "Muerto", …
## $ gcs         <int> 13, 15, 15, 15, 15, 15, 13, 15, 15, 10, 15, 15, 15, 15, 15…
## $ sbp         <int> 143, 150, 152, 215, 162, 169, 178, 180, 186, 185, 122, 211…
## $ dm          <chr> "NO", "NO", "NO", "SI", "SI", "SI", "SI", "NO", "SI", "SI"…
## $ age         <int> 50, 58, 64, 50, 65, 78, 66, 72, 61, 64, 63, 59, 64, 62, 40…
## $ stroke_type <chr> "IS", "IS", "IS", "IS", "IS", "IS", "IS", "IS", "IS", "IS"…
fatal$status<-as.factor(fatal$status)
fatal$sex <-as.factor(fatal$sex)
fatal$dm <-as.factor(fatal$dm)
fatal$stroke_type <-as.factor(fatal$stroke_type)
fatal %>%
  tbl_summary() %>%
  as_gt()
Characteristic N = 2261
sex
    Femenino 129 (57%)
    Masculino 97 (43%)
status
    Muerto 55 (24%)
    Vivo 171 (76%)
gcs 15 (10, 15)
sbp 161 (143, 187)
dm
    NO 88 (39%)
    SI 138 (61%)
age 61 (52, 69)
stroke_type
    HS 77 (34%)
    IS 149 (66%)
1 n (%); Median (IQR)
fatal %>%
  tbl_summary(by = status) %>%
  as_gt()
Characteristic Muerto, N = 551 Vivo, N = 1711
sex
    Femenino 39 (71%) 90 (53%)
    Masculino 16 (29%) 81 (47%)
gcs 8 (5, 11) 15 (14, 15)
sbp 162 (140, 199) 160 (143, 186)
dm
    NO 17 (31%) 71 (42%)
    SI 38 (69%) 100 (58%)
age 62 (50, 73) 61 (53, 68)
stroke_type
    HS 38 (69%) 39 (23%)
    IS 17 (31%) 132 (77%)
1 n (%); Median (IQR)

`

#library(ExPanDaR)
## Create report
#ExPanD(fatal)
str(fatal)
## 'data.frame':    226 obs. of  7 variables:
##  $ sex        : Factor w/ 2 levels "Femenino","Masculino": 2 2 2 1 2 1 1 2 1 1 ...
##  $ status     : Factor w/ 2 levels "Muerto","Vivo": 2 2 2 2 2 2 1 2 2 1 ...
##  $ gcs        : int  13 15 15 15 15 15 13 15 15 10 ...
##  $ sbp        : int  143 150 152 215 162 169 178 180 186 185 ...
##  $ dm         : Factor w/ 2 levels "NO","SI": 1 1 1 2 2 2 2 1 2 2 ...
##  $ age        : int  50 58 64 50 65 78 66 72 61 64 ...
##  $ stroke_type: Factor w/ 2 levels "HS","IS": 2 2 2 2 2 2 2 2 2 2 ...
variables_categoricas <- sapply(fatal, is.factor) | sapply(fatal, is.character)
datos_categoricos <- fatal[, variables_categoricas]
variables <- names(datos_categoricos)
combinaciones <- combn(variables, m = 2, simplify = FALSE)
resultados_chi2 <- list()

for (i in 1:length(combinaciones)) {
  tabla_contingencia <- table(datos_categoricos[, combinaciones[[i]]])
  resultado_chi2 <- chisq.test(tabla_contingencia)
  resultados_chi2[[i]] <- resultado_chi2
}
for (i in 1:length(resultados_chi2)) {
  print(paste("Variables:", combinaciones[[i]]))
  print( resultados_chi2[[i]])
  print("-----------------------------------------------------")
  print("-----------------------------------------------------")
  
}
## [1] "Variables: sex"    "Variables: status"
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 4.9531, df = 1, p-value = 0.02604
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
## [1] "Variables: sex" "Variables: dm" 
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 0.04049, df = 1, p-value = 0.8405
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
## [1] "Variables: sex"         "Variables: stroke_type"
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 1.0126, df = 1, p-value = 0.3143
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
## [1] "Variables: status" "Variables: dm"    
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 1.5498, df = 1, p-value = 0.2132
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
## [1] "Variables: status"      "Variables: stroke_type"
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 37.653, df = 1, p-value = 8.45e-10
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
## [1] "Variables: dm"          "Variables: stroke_type"
## 
##  Pearson's Chi-squared test with Yates' continuity correction
## 
## data:  tabla_contingencia
## X-squared = 0.5105, df = 1, p-value = 0.4749
## 
## [1] "-----------------------------------------------------"
## [1] "-----------------------------------------------------"
fatal_glm_1 <-glm(status ~ gcs, data = fatal, family = binomial(link = 'logit'))
resumen=summary(fatal_glm_1)
tabla <- resumen$table
tabla_formateada <- kable(tabla)

# Imprimir la tabla formateada
tabla_formateada
summary(fatal_glm_1)
## 
## Call:
## glm(formula = status ~ gcs, family = binomial(link = "logit"), 
##     data = fatal)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -3.29479    0.60432  -5.452 4.98e-08 ***
## gcs          0.38811    0.05213   7.446 9.64e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 250.83  on 225  degrees of freedom
## Residual deviance: 170.92  on 224  degrees of freedom
## AIC: 174.92
## 
## Number of Fisher Scoring iterations: 5
library(sjPlot)
library(sjmisc)
library(sjlabelled)


fatal_glm_1 <-glm(status ~ gcs, data = fatal, family = binomial(link = 'logit'))
summary(fatal_glm_1)
## 
## Call:
## glm(formula = status ~ gcs, family = binomial(link = "logit"), 
##     data = fatal)
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)    
## (Intercept) -3.29479    0.60432  -5.452 4.98e-08 ***
## gcs          0.38811    0.05213   7.446 9.64e-14 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 250.83  on 225  degrees of freedom
## Residual deviance: 170.92  on 224  degrees of freedom
## AIC: 174.92
## 
## Number of Fisher Scoring iterations: 5
tab_model(fatal_glm_1, show.est = TRUE, show.se = TRUE, show.std = TRUE,  collapse.ci = FALSE)
  status
Predictors Odds Ratios std. Error std. Beta standardized std. Error CI standardized CI p
(Intercept) 0.04 0.02 4.49 0.94 0.01 – 0.11 3.04 – 6.93 <0.001
gcs 1.47 0.08 4.37 0.87 1.34 – 1.64 3.03 – 6.61 <0.001
Observations 226
R2 Tjur 0.370
tab_model(fatal_glm_1)
  status
Predictors Odds Ratios CI p
(Intercept) 0.04 0.01 – 0.11 <0.001
gcs 1.47 1.34 – 1.64 <0.001
Observations 226
R2 Tjur 0.370
tidy(fatal_glm_1, conf.int = TRUE)
## # A tibble: 2 × 7
##   term        estimate std.error statistic  p.value conf.low conf.high
##   <chr>          <dbl>     <dbl>     <dbl>    <dbl>    <dbl>     <dbl>
## 1 (Intercept)   -3.29     0.604      -5.45 4.98e- 8   -4.55     -2.17 
## 2 gcs            0.388    0.0521      7.45 9.64e-14    0.292     0.497
  • Coeficiente del intercepto (Intercept): El coeficiente del intercepto es -3.29479. En un modelo de regresión logística, el intercepto representa el logaritmo de la razón de probabilidades (log-odds) de que la respuesta sea “vivo” en ausencia de cualquier efecto de las variables predictoras.

Para interpretar en términos de probabilidades,se aplicar la función exponencial al coeficiente del intercepto. En este caso, sería exp(-3.29479), lo cual es aproximadamente 0.036. Esto significa que, cuando todas las variables predictoras son cero, la probabilidad de que la respuesta sea “vivo” es de aproximadamente 0.036, o alrededor del 3.6%.

  • Coeficiente de la variable gcs: El coeficiente para la variable gcs es 0.38811. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de la respuesta “vivo” por cada unidad de cambio en la variable “gcs”.

Para interpretarlo en términos de la dirección del efecto, un coeficiente positivo significa que un aumento en la variable “gcs” está asociado con un aumento en la probabilidad de que la respuesta sea “vivo”. Por ejemplo, si “gcs” aumenta en una unidad, la razón de probabilidades de estar “vivo” aumentará en aproximadamente exp(0.38811) = 1.474 veces.

Es importante tener en cuenta que los coeficientes en un modelo de regresión logística se interpretan en términos de log-odds o razones de probabilidades. Para obtener interpretaciones más intuitivas en términos de probabilidades, puedes aplicar funciones exponenciales a los coeficientes. Además, es recomendable considerar los intervalos de confianza y los p-valores asociados para evaluar la significancia estadística de los coeficientes y la incertidumbre en las estimaciones.

Ahora, usemos otra covariable, stroke_type. El tipo de trazo tiene 2 niveles o categorías; Accidente cerebrovascular hemorrágico (HS) y Accidente cerebrovascular isquémico (IS). Se sabe que la HS causa un mayor riesgo de muerte por accidente cerebrovascular.

fatal_glm_2 <-  glm(status ~ stroke_type,   data = fatal,   family = binomial(link = 'logit'))
summary(fatal_glm_2)
## 
## Call:
## glm(formula = status ~ stroke_type, family = binomial(link = "logit"), 
##     data = fatal)
## 
## Coefficients:
##               Estimate Std. Error z value Pr(>|z|)    
## (Intercept)    0.02598    0.22794   0.114    0.909    
## stroke_typeIS  2.02361    0.34403   5.882 4.05e-09 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 250.83  on 225  degrees of freedom
## Residual deviance: 212.52  on 224  degrees of freedom
## AIC: 216.52
## 
## Number of Fisher Scoring iterations: 4
kable(tidy(fatal_glm_2, conf.int = TRUE)) %>% kable_styling("striped")
term estimate std.error statistic p.value conf.low conf.high
(Intercept) 0.0259755 0.2279404 0.1139574 0.9092716 -0.4222135 0.4750342
stroke_typeIS 2.0236131 0.3440260 5.8821522 0.0000000 1.3649830 2.7189964
  • Coeficiente del intercepto (Intercept): El coeficiente del intercepto es 0.02598. En este modelo, el intercepto representa el logaritmo de la razón de probabilidades (log-odds) de que la respuesta sea “vivo” (o la categoría de referencia) cuando “stroke_type” es el valor de referencia. Sin embargo, en este caso, el valor \(p\) para el coeficiente del intercepto es alto (0.909), lo que indica que no hay evidencia estadística significativa de que haya una diferencia en las probabilidades de estar “vivo” en función del tipo de accidente cerebrovascular.

  • Coeficiente para la variable stroke_typeIS: El coeficiente para la categoría “IS” de la variable “stroke_type” es 2.02361. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de la respuesta “vivo” en comparación con el tipo de accidente cerebrovascular de referencia (en este caso, “HS”).

El coeficiente para la variable “stroke_typeIS” es 2.02361, lo que significa que la razón de probabilidades (odds ratio) de estar “vivo” en el caso de un accidente cerebrovascular isquémico (IS) en comparación con un accidente cerebrovascular hemorrágico (HS) es exp(2.02361) = 7.559.

Esto indica que los pacientes con un accidente cerebrovascular isquémico (IS) tienen una razón de probabilidades 7.559 veces mayor de estar “vivos” en comparación con aquellos con un accidente cerebrovascular hemorrágico (HS), manteniendo constantes las demás variables en el modelo.

En este caso, el valor p para el coeficiente de “stroke_typeIS” es muy bajo (< 0.001), lo que indica que hay evidencia estadística significativa de que el tipo de accidente cerebrovascular isquémico (IS) tiene un efecto significativo en la probabilidad de estar “vivo” en comparación con el tipo de accidente cerebrovascular hemorrágico (HS).

Regresión logística binaria múltiple

Hay múltiples factores que pueden contribuir al resultado de un accidente cerebrovascular. Por lo tanto, existe una fuerte motivación para incluir otras variables independientes o covariables en el modelo. Por ejemplo, en el caso de un accidente cerebrovascular:

  • Es poco probable que solo una variable (gcs o tipo de ictus) esté relacionada con el ictus. El accidente cerebrovascular, al igual que otras enfermedades cardiovasculares, tiene muchos factores que afectan el resultado. Tiene más sentido considerar agregar otras variables independientes que creemos que son variables independientes importantes para el resultado del accidente cerebrovascular en el modelo.

al agregar más covariables en el modelo, podemos estimar las probabilidades logarítmicas ajustadas. Estas probabilidades logarítmicas indican la relación de una covariable particular independiente de otras covariables en el modelo. En epidemiología, siempre podemos esto como ajuste. Un ajuste es importante particularmente cuando tenemos efectos de confusión de otras variables independientes. Se puede generar un término de interacción (el producto de dos covariables) y agregarlo al modelo que se va a estimar. Agregar o no agregar variables es un gran tema en sí mismo. Por lo general, se rige por la experiencia clínica, los expertos en la materia y algunos análisis preliminares. Puede leer el último capítulo del libro para comprender más sobre la construcción de modelos y la selección de variables.

Ampliemos nuestro modelo e incluyamos gcs, tipo de brazada, sexo, dm, sbp y edad en el modelo. Llamaremos a este modelo como fatal_mv. Como tenemos más de una variable independiente en el modelo, lo llamaremos regresión logística binaria múltiple.

Para estimar el modelo de regresión logística múltiple en R:

fatal_mv1 <-   glm(status ~ gcs + stroke_type + sex + dm + sbp + age, data = fatal,     family = binomial(link = 'logit'))
summary(fatal_mv1)
## 
## Call:
## glm(formula = status ~ gcs + stroke_type + sex + dm + sbp + age, 
##     family = binomial(link = "logit"), data = fatal)
## 
## Coefficients:
##                 Estimate Std. Error z value Pr(>|z|)    
## (Intercept)   -1.5377396  1.4658253  -1.049  0.29415    
## gcs            0.3284640  0.0557574   5.891 3.84e-09 ***
## stroke_typeIS  1.2662764  0.4365882   2.900  0.00373 ** 
## sexMasculino   0.4302901  0.4362742   0.986  0.32399    
## dmSI          -0.4736670  0.4362309  -1.086  0.27756    
## sbp           -0.0008612  0.0060619  -0.142  0.88703    
## age           -0.0242321  0.0154010  -1.573  0.11562    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 250.83  on 225  degrees of freedom
## Residual deviance: 159.34  on 219  degrees of freedom
## AIC: 173.34
## 
## Number of Fisher Scoring iterations: 5
log_odds <- tidy(fatal_mv1, conf.int = TRUE)
log_odds
## # A tibble: 7 × 7
##   term           estimate std.error statistic       p.value conf.low conf.high
##   <chr>             <dbl>     <dbl>     <dbl>         <dbl>    <dbl>     <dbl>
## 1 (Intercept)   -1.54       1.47       -1.05  0.294          -4.46     1.33   
## 2 gcs            0.328      0.0558      5.89  0.00000000384   0.224    0.444  
## 3 stroke_typeIS  1.27       0.437       2.90  0.00373         0.411    2.13   
## 4 sexMasculino   0.430      0.436       0.986 0.324          -0.420    1.30   
## 5 dmSI          -0.474      0.436      -1.09  0.278          -1.35     0.368  
## 6 sbp           -0.000861   0.00606    -0.142 0.887          -0.0129   0.0110 
## 7 age           -0.0242     0.0154     -1.57  0.116          -0.0555   0.00520
  1. Coeficiente del intercepto (Intercept): El coeficiente del intercepto es -1.5377396. Este coeficiente representa el logaritmo de la razón de probabilidades (log-odds) de estar “vivo” en ausencia de cualquier efecto de las variables predictoras. Sin embargo, en este caso, el valor p para el coeficiente del intercepto es alto (0.29415), lo que indica que no hay evidencia estadística significativa de que haya una diferencia en las probabilidades de estar “vivo” en función de las demás variables en el modelo.

  2. Coeficiente para la variable “gcs”: El coeficiente para la variable “gcs” es 0.3284640. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” por cada unidad de aumento en el valor de la variable “gcs”. Un coeficiente positivo indica que un mayor valor de “gcs” se asocia con una mayor probabilidad de estar “vivo”.

  3. Coeficiente para la variable “stroke_typeIS”: El coeficiente para la variable “stroke_typeIS” es 1.2662764. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” en comparación con el tipo de accidente cerebrovascular de referencia (en este caso, “HS”). Un coeficiente positivo indica que tener un accidente cerebrovascular isquémico (IS) en lugar de un accidente cerebrovascular hemorrágico (HS) se asocia con una mayor probabilidad de estar “vivo”.

  4. Coeficiente para la variable “sexMasculino”: El coeficiente para la variable “sexMasculino” es 0.4302901. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” para los pacientes masculinos en comparación con los pacientes femeninos. Un coeficiente positivo indica que los pacientes masculinos tienen una mayor probabilidad de estar “vivos” en comparación con los pacientes femeninos.

  5. Coeficiente para la variable “dmSI”: El coeficiente para la variable “dmSI” es -0.4736670. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” para los pacientes con diabetes en comparación con los pacientes sin diabetes. Un coeficiente negativo indica que los pacientes con diabetes tienen una menor probabilidad de estar “vivos” en comparación con los pacientes sin diabetes.

  6. Coeficiente para la variable “sbp”: El coeficiente para la variable “sbp” es -0.0008612. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” por cada unidad de cambio en la presión arterial sistólica (sbp). En este caso, el coeficiente es muy pequeño y no significativo (p > 0.05), lo que sugiere que la presión arterial sistólica no tiene un efecto significativo en la probabilidad de estar “vivo”.

  7. Coeficiente para la variable “age”: El coeficiente para la variable “age” es -0.0242321. Este coeficiente indica cómo cambia la razón de probabilidades (odds ratio) de estar “vivo” por cada unidad de aumento en la edad. Un coeficiente negativo indica que a medida que aumenta la edad, la probabilidad de estar “vivo” disminuye. Sin embargo, en este caso, el valor p para el coeficiente de “age” no es significativo (p > 0.05), lo que sugiere que la edad no tiene un efecto estadísticamente significativo en la probabilidad de estar “vivo”.

odds_ratio <- tidy(fatal_mv1,
                   exponentiate = TRUE,  
                   conf.int = TRUE)
odds_ratio
## # A tibble: 7 × 7
##   term          estimate std.error statistic       p.value conf.low conf.high
##   <chr>            <dbl>     <dbl>     <dbl>         <dbl>    <dbl>     <dbl>
## 1 (Intercept)      0.215   1.47       -1.05  0.294           0.0116      3.78
## 2 gcs              1.39    0.0558      5.89  0.00000000384   1.25        1.56
## 3 stroke_typeIS    3.55    0.437       2.90  0.00373         1.51        8.45
## 4 sexMasculino     1.54    0.436       0.986 0.324           0.657       3.69
## 5 dmSI             0.623   0.436      -1.09  0.278           0.258       1.45
## 6 sbp              0.999   0.00606    -0.142 0.887           0.987       1.01
## 7 age              0.976   0.0154     -1.57  0.116           0.946       1.01
tab_logistic <- bind_cols(log_odds, odds_ratio) 
## New names:
## • `term` -> `term...1`
## • `estimate` -> `estimate...2`
## • `std.error` -> `std.error...3`
## • `statistic` -> `statistic...4`
## • `p.value` -> `p.value...5`
## • `conf.low` -> `conf.low...6`
## • `conf.high` -> `conf.high...7`
## • `term` -> `term...8`
## • `estimate` -> `estimate...9`
## • `std.error` -> `std.error...10`
## • `statistic` -> `statistic...11`
## • `p.value` -> `p.value...12`
## • `conf.low` -> `conf.low...13`
## • `conf.high` -> `conf.high...14`
tab_logistic %>% 
  select(term...1, estimate...2, std.error...3, 
         estimate...9, conf.low...13, conf.high...14 ,p.value...5) %>%
  rename(covariate = term...1, 
         log_odds = estimate...2,
         SE = std.error...3,
         odds_ratio = estimate...9,
         lower_OR = conf.low...13, 
         upper_OR = conf.high...14,
         p.val = p.value...5) 
## # A tibble: 7 × 7
##   covariate      log_odds      SE odds_ratio lower_OR upper_OR         p.val
##   <chr>             <dbl>   <dbl>      <dbl>    <dbl>    <dbl>         <dbl>
## 1 (Intercept)   -1.54     1.47         0.215   0.0116     3.78 0.294        
## 2 gcs            0.328    0.0558       1.39    1.25       1.56 0.00000000384
## 3 stroke_typeIS  1.27     0.437        3.55    1.51       8.45 0.00373      
## 4 sexMasculino   0.430    0.436        1.54    0.657      3.69 0.324        
## 5 dmSI          -0.474    0.436        0.623   0.258      1.45 0.278        
## 6 sbp           -0.000861 0.00606      0.999   0.987      1.01 0.887        
## 7 age           -0.0242   0.0154       0.976   0.946      1.01 0.116

Bondad de ajuste en R

Devianza y χ2

her Scoring iterations: 4 La bondad de ajuste global del modelo se evalúa mediante la devianza (-2 veces el logaritmo de la verosimilitud) y tenemos que valores grandes indican que los modelos estadísticos son pobres.

En el resumen del modelo R calcula la devianza nula (solo con la constante) y la devianza residual (todo el modelo). Para que el modelo sea bueno la devianza residual debe ser menor que la devianza nula ya que valores más bajo de -2LL indican que el modelo predice la variable respuesta con mayor precisión.

En este caso la devianza del modelo nulo es −2LL=250.83 , pero cuando añadimos todas las variables este valor se reduce a 159.34

Comparación de modelos

La importancia de las variables independientes en los modelos no debe basarse únicamente en sus valores \(p\) o en las estadísticas de Wald. Se recomienda utilizar la razón de verosimilitud para comparar modelos. La diferencia en la razón de verosimilitud entre los modelos puede guiarnos en la elección de un mejor modelo.

Por ejemplo, cuando comparamos el modelo 1 ( fatal_mv) y el modelo 2 ( fatal_glm_1), ¿podríamos decir que son diferentes? Un enfoque es ver si ambos modelos son diferentes estadísticamente. Esta comparación se puede hacer estableciendo el nivel de significación en \(/5%\)

anova( fatal_glm_1, fatal_mv1, test = 'Chisq')
## Analysis of Deviance Table
## 
## Model 1: status ~ gcs
## Model 2: status ~ gcs + stroke_type + sex + dm + sbp + age
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)  
## 1       224     170.92                       
## 2       219     159.34  5   11.582  0.04098 *
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

Ambos modelos son diferentes estadísticamente (en \(5/%\) nivel). Por lo tanto, preferimos mantener el modelo fatal_mv1porque el modelo tiene más sentido (más parsimonioso).

fatal_mv2 <-   glm(status ~ gcs + stroke_type + age,       data = fatal,       family = binomial(link = 'logit'))
anova( fatal_mv1, fatal_mv2, test = 'Chisq')
## Analysis of Deviance Table
## 
## Model 1: status ~ gcs + stroke_type + sex + dm + sbp + age
## Model 2: status ~ gcs + stroke_type + age
##   Resid. Df Resid. Dev Df Deviance Pr(>Chi)
## 1       219     159.34                     
## 2       222     161.51 -3  -2.1743    0.537

el valor p está por encima del umbral de \(5\%\) establecido por nosotros. Por lo tanto, no se rechazar la hipótesis nula (la hipótesis nula dice que ambos modelos no son estadísticamente diferentes).

Adición de un término de interacción

El efecto de interacción ocurre cuando el efecto de una variable depende del valor de otra variable (en el caso de dos variables que interactúan). El efecto de interacción es común en el análisis de regresión, ANOVA y en experimentos diseñados.

El término de interacción bidireccional involucra dos factores de riesgo y su efecto en el resultado de una enfermedad. Si el efecto de un factor de riesgo es el mismo dentro de los estratos definidos por el otro, entonces no hay interacción. Cuando el efecto de un factor de riesgo es diferente dentro de los estratos definidos por el otro, entonces hay una interacción; esto se puede considerar como una interacción biológica.

Agreguemos un término de interacción entre el tipo de accidente cerebrovascular y la diabetes:

fatal_mv2_ia <-   glm(status ~ gcs + stroke_type + stroke_type:gcs + age, data = fatal,   family = binomial(link = 'logit'))
tidy(fatal_mv2_ia)
## # A tibble: 5 × 5
##   term              estimate std.error statistic    p.value
##   <chr>                <dbl>     <dbl>     <dbl>      <dbl>
## 1 (Intercept)        -2.12      1.15      -1.84  0.0662    
## 2 gcs                 0.355     0.0775     4.58  0.00000468
## 3 stroke_typeIS       1.61      1.30       1.24  0.217     
## 4 age                -0.0236    0.0147    -1.60  0.109     
## 5 gcs:stroke_typeIS  -0.0347    0.111     -0.312 0.755
prob_mv2 <-  augment(fatal_mv2, type.predict = "response")

DT::datatable(prob_mv2)
library(sjPlot)
plot_model(fatal_mv1)

library(stargazer)
## 
## Please cite as:
##  Hlavac, Marek (2022). stargazer: Well-Formatted Regression and Summary Statistics Tables.
##  R package version 5.2.3. https://CRAN.R-project.org/package=stargazer
stargazer(fatal_glm_1, fatal_mv1, 
          type = 'text', header=FALSE,
          apply.coef = exp,
          apply.se   = exp)
## 
## ==============================================
##                       Dependent variable:     
##                   ----------------------------
##                              status           
##                        (1)            (2)     
## ----------------------------------------------
## gcs                   1.474          1.389    
##                      (1.054)        (1.057)   
##                                               
## stroke_typeIS                       3.548**   
##                                     (1.547)   
##                                               
## sexMasculino                         1.538    
##                                     (1.547)   
##                                               
## dmSI                                 0.623    
##                                     (1.547)   
##                                               
## sbp                                  0.999    
##                                     (1.006)   
##                                               
## age                                  0.976    
##                                     (1.016)   
##                                               
## Constant              0.037          0.215    
##                      (1.830)        (4.331)   
##                                               
## ----------------------------------------------
## Observations           226            226     
## Log Likelihood       -85.460        -79.669   
## Akaike Inf. Crit.    174.920        173.337   
## ==============================================
## Note:              *p<0.1; **p<0.05; ***p<0.01

Aptitud del modelo

La evaluación básica del modelo de regresión logística incluye la medición de la aptitud general del modelo. Para ello, comprobamos

  • área bajo la curva
  • Prueba de Hosmer-Lemeshow
  • prueba modificada de Hosmer-Lemeshow
  • Prueba Oseo Rojek

Referencias y bibliografía

Field, A., Miles, J., & Field, Z. (2012). Discovering statistics using r (1st edition.). Sage Publications Ltd.

González-Revaldería, J., Fernández, J. M. P., García, B. P., & Queraltó, J. M. (2007). Curso de estadística para el laboratorio clínico. módulo 3: Regresión logística. Sociedad Española de Bioquímica Clínica y Patología Molecular. Retrieved October 24, 2014, from http://www.seqc.es/es/Varios/7/40/Modulo_3:_Regresion_logistica_y_multiple/

Group, U. S. C. (2014a). FAQ: How do i interpret odds ratios in logistic regression? Institute for Digital Research; Education. Retrieved October 24, 2014, from http://www.ats.ucla.edu/stat/r/dae/logit.htm

Group, U. S. C. (2014b). R data analysis examples: Logit regression. Institute for Digital Research; Education. Retrieved October 24, 2014, from http://www.ats.ucla.edu/stat/r/dae/logit.htm