Formas de ajustar una regresión logística con datos agrupados

  • Cuando se tiene datos agrupados a partir de una tabla de contingencia con dos variables binarias (por ejemplo, Hepatitis B (si, no) y Cirrosis (si, no). Se usa un dataframe con variable binaria y pesos (weight) (Aplicación 1)

  • Si no tienes datos binarios por fila sino solo conteos agrupados, usar la forma con cbind() es más directa. (Aplicación 2)

1 Aplicación 1: Datos agrupados con dos variables binarias

Se tiene un estudio para analizar la relación entre el virus de la Hepatitis B y la cirrosis hepática, a partir de un diseño de casos y control. Los resultados de una muestra de 400 pacientes se presentan en la tabla.

Tipo Cirrosis No cirrosis Totales
Hepatitis B (+) 51 9 60
Hepatitis B (−) 149 191 340
Totales 200 200 400

Ajuste los datos a una regresión logística binaria con función de enlace logit.

  1. Formule el MLG de la regresión logística binaria.
  2. Halle e interprete los coeficientes de regresión estimados.
  3. Halle e interprete los Odds y Odds Ratios (OR).
  4. Halle un intervalo de confianza del 95% para los coeficientes y OR.
  5. Pruebe la significación del modelo logístico binario. Use un alfa del 5%.
  6. Calcule e interprete el Pseudo R².
  7. Pruebe la significación de los coeficientes de regresión. Use un α = 0.05.
  8. Utilizando el modelo estimado determine lo siguiente: 8.1 Halle la probabilidad de que un paciente tenga cirrosis, sabiendo que ha tenido hepatitis B.
    8.2 ¿Cuál es más probable: que un paciente tenga cirrosis debido a que ha tenido hepatitis B o no la ha tenido?

Nota: Esta es una regresión logística binaria con datos agrupados por celdas de frecuencia.

1.1 1. Formule el MLG de la regresión logística binaria

  • Variable respuesta:
    \(Y = \text{Grupo paciente (1 = Cirrosis, 0 = No cirrosis)}\)
    \(\pi = P(Y = 1) = P(\text{paciente con cirrosis})\)

  • Variable explicativa:
    \(X = \text{Hepatitis (1 = (+), 0 = (−))}\)


1.1.1 Componentes del MLG:

  • Componente aleatorio:
    \(Y \sim \text{Binomial}(n, \pi)\)

  • Componente sistemático:
    \(\eta = X'\beta = \beta_0 + \beta_1 X_1\)

  • Función de enlace:
    Logit (logístico)


1.1.2 Modelo logístico:

\[ P(Y = 1) = \pi_i = \frac{\exp(\beta_0 + \beta_1 X)}{1 + \exp(\beta_0 + \beta_1 X)} = \frac{1}{1 + \exp(-(\beta_0 + \beta_1 X))} \]

1.1.3 Modelo logit:

\[ \text{logit}(P(Y = 1)) = \text{logit}(\pi_i) = \log\left(\frac{\pi_i}{1 - \pi_i}\right) = \beta_0 + \beta_1 X \]

1.2 2. Halle e interprete los coeficientes de regresión estimados

Cuando se tiene una tabla de frecuencias (datos agrupados), lo mejor es construir un dataframe resumido por celdas, que contenga:

  • Paso 1: Identifica las combinaciones de variables (Tienes 4 combinaciones posibles entre Hepatitis y Cirrosis. siempre es el producto de la cantidad de clases)

  • Paso 2: Asocia las frecuencias (n) (Usa los datos de la tabla original para indicar cuántas veces aparece cada combinación)

  • Paso 3: Construye el DataFrame en R

# Entrada de datos
Datos1 <- data.frame(
  Y_Cirro = c(1, 1, 0, 0), #El primer registro: tiene hepatitis y cirrosis 51...
  X_Hepa  = c(1, 0, 1, 0),
  n       = c(51, 149, 9, 191)
)
Datos1
  Y_Cirro X_Hepa   n
1       1      1  51
2       1      0 149
3       0      1   9
4       0      0 191
# Estimación de los coeficientes de regresión. se coloca n por que la data viene de una tabla agrupada
Modelo1<-glm(Y_Cirro~X_Hepa,weight=n,family=binomial,data=Datos1)
summary(Modelo1)

Call:
glm(formula = Y_Cirro ~ X_Hepa, family = binomial, data = Datos1, 
    weights = n)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -0.2483     0.1093  -2.272   0.0231 *  
X_Hepa        1.9829     0.3777   5.250 1.52e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 554.52  on 3  degrees of freedom
Residual deviance: 516.86  on 2  degrees of freedom
AIC: 520.86

Number of Fisher Scoring iterations: 5

Intrepretación de los coeficientes: log-odds

Intercepto (β₀ = -0.2483): Cuando la variable X_Hepa vale 0 (es decir, en ausencia del antecedente de hepatitis), el log-odds de que una persona tenga cirrosis hepática es -0.2483. Esto corresponde a una probabilidad base de aproximadamente 0.438, bajo esta condición.

X_Hepa (β₁ = 1.9829): Si la persona tiene antecedentes de hepatitis, el log-odds de tener cirrosis hepática aumenta en 1.9829 unidades, lo que implica un aumento en la probabilidad, manteniendo constantes las demás variables

1.3 3. Hallar e interpretar los Odds ratios (OR)

# Cálculo de los Odds Ratios
exp(coef(Modelo1))
(Intercept)      X_Hepa 
  0.7801047   7.2639821 

Interpretacion de los odds-ratio:

  • Intercepto (OR = 0.7801): Cuando la variable X_Hepa vale 0 (el paciente no presenta antecendes de hepatitis), las odds de tener cirrosis hepática son aproximadamente 0.7801, lo que indica un nivel base moderado de probabilidad de cirrosis en estas condiciones. Esto corresponde a una probabilidad base de aproximadamente 0.7801 / (1 + 0.7801) ≈ 0.438, es decir, 43.8%.

  • X_Hepa (X1 = 7.2640): Si la persona tiene antecedentes de hepatitis, las odds de tener cirrosis hepática se multiplican por 7.2640 (es decir, aumentan un 626.40%), manteniendo constantes las demás variables.

Interpretación en términos de probabilidad:

  • La probabilidad estimada de tener cirrosis es de aproximadamente 43.8% para pacientes que no tuvieron hepatitis B y aumenta a aproximadamente 85.0% para quienes sí la tuvieron.

  • La probabilidad de tener cirrosis aumenta en un 94.1% en pacientes con hepatitis B comparado con quienes no la tuvieron.

  • 85/43.8 = 1.94 . es 0.94

  • Esto representa un aumento relativo cercano al 100%, es decir, la probabilidad de tener cirrosis casi se duplica en los pacientes que han tenido hepatitis B.

Cálculo de probabilidades

1.3.1 1. Pacientes que no tuvieron hepatitis B (X = 0):

\[ \eta = -0.2483 + 1.9829 \cdot 0 = -0.2483 \]

\[ P(Y = 1 \mid X = 0) = \frac{e^{-0.2483}}{1 + e^{-0.2483}} \approx \frac{0.7801}{1 + 0.7801} \approx 0.438 \]


1.3.2 2. Pacientes que sí tuvieron hepatitis B (X = 1):

\[ \eta = -0.2483 + 1.9829 \cdot 1 = 1.7346 \]

\[ P(Y = 1 \mid X = 1) = \frac{e^{1.7346}}{1 + e^{1.7346}} \approx \frac{5.66}{1 + 5.66} \approx 0.850 \]

Interpretación en términos de probabilidad:

  • La probabilidad estimada de tener cirrosis es de aproximadamente 43.8% para pacientes que no tuvieron hepatitis B y aumenta a aproximadamente 85.0% para quienes sí la tuvieron.

  • La probabilidad de tener cirrosis aumenta en un 94.1% en pacientes con hepatitis B comparado con quienes no la tuvieron.

  • Esto representa un aumento relativo cercano al 100%, es decir, la probabilidad de tener cirrosis casi se duplica en los pacientes que han tenido hepatitis B.

calculo del aumento relativo*

Tenemos:

  • Probabilidad sin hepatitis B: \(p_0 = 0.438\)
  • Probabilidad con hepatitis B: \(p_1 = 0.850\)

\[ \text{Aumento relativo} = \frac{p_1 - p_0}{p_0} = \frac{0.850 - 0.438}{0.438} = \frac{0.412}{0.438} \approx 0.941 \]

\[ 0.941 \times 100 = 94.1\% \]

1.4 4. Hallar intervalos de confianza del 95% para los coeficientes y los OR.

# IC para los coeficientes
NC=0.95
confint.default(Modelo1, level=NC)
                 2.5 %      97.5 %
(Intercept) -0.4625559 -0.03409838
X_Hepa       1.2426280  2.72322835

1.4.1 4.1 calculo manual IC: Coeficientes

Para \(\beta_1\):

\[ IC(\beta_1) = b_1 \pm Z_{1-\frac{\alpha}{2}} \cdot S_{b_1} = 1.983 \pm 1.96 \times 0.377 \implies (1.24, 2.72) \]

# Nivel de significancia
alpha <- 0.05

# Punto crítico para el intervalo de confianza (IC) al 95%
z <- qnorm(1 - alpha / 2)

# Parámetros del modelo
b1 <- 1.983
sb1 <- 0.377

# Cálculo del intervalo de confianza
ic_lower <- b1 - z * sb1
ic_upper <- b1 + z * sb1

# Resultado
c(ic_lower, ic_upper)
[1] 1.244094 2.721906

Interpretación

Con un nivel de confianza del 95%:

  • Intercepto: El coeficiente de regresión \(\beta_0\) está entre -0.463 y -0.034, indicando un efecto negativo significativo en el log-odds, ya que el intervalo no incluye cero.

  • X_Hepa: El coeficiente de regresión \(\beta_1\) está entre 1.243 y 2.723, indicando un efecto positivo significativo de la variable X_Hepa sobre el log-odds, ya que el intervalo no incluye cero.

# IC para los OR
NC=0.95
exp(confint.default(Modelo1, level=NC))
                2.5 %     97.5 %
(Intercept) 0.6296722  0.9664764
X_Hepa      3.4647068 15.2294089

1.4.2 4.2 calculo manual IC: OR

NC <- 0.95  # Nivel de confianza
alpha <- 1 - NC

z <- qnorm(1 - alpha / 2)  # Valor crítico para el nivel de confianza

b1 <- coef(Modelo1)[2]  # Asumiendo que el coeficiente de interés es el segundo
sb1 <- sqrt(diag(vcov(Modelo1)))[2]  # Error estándar del mismo coeficiente
ic_logit <- c(b1 - z * sb1, b1 + z * sb1)
ic_or <- exp(ic_logit)
ic_or
   X_Hepa    X_Hepa 
 3.464707 15.229409 

Interpretación:

  • Con un nivel de confianza del 95%, el odds ratio para el coeficiente \(\beta_1\) de la variable \(X_1\) está entre 3.46 y 15.23, lo que indica que un aumento en \(X_1\) se asocia con un incremento significativo en la probabilidad del evento. ya que el intervalo no incluye el uno

1.5 5. Pruebe la significación del modelo logístico binario. Use un alfa 5%.

Hipotesis

  • Ho: El Modelo de regresión logístico binario se ajusta a los datos
  • H1: El Modelo de regresión logístico binario No se ajusta a los datos
summary(Modelo1)

Call:
glm(formula = Y_Cirro ~ X_Hepa, family = binomial, data = Datos1, 
    weights = n)

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)  -0.2483     0.1093  -2.272   0.0231 *  
X_Hepa        1.9829     0.3777   5.250 1.52e-07 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 554.52  on 3  degrees of freedom
Residual deviance: 516.86  on 2  degrees of freedom
AIC: 520.86

Number of Fisher Scoring iterations: 5
# Prueba de significación del modelo de regresión
Alfa=0.05
#chi2 critico
Chi_Tab=qchisq(1-Alfa,Modelo1$df.residual); Chi_Tab
[1] 5.991465
# Prueba de Bondad de Ajuste (Goodness-of-Fit): 
#Objetivo: Verificar si el modelo actual se ajusta bien a los datos (sin sobre/subestimación). : Usa directamente la Residual Deviance (516.86) con sus gl residuales (2).
p_valor=1-pchisq(Modelo1$deviance,Modelo1$df.residual); p_valor
[1] 0

Conclusión

  • Dado que el p-valor ≈ 0 (p < 0.05), se rechaza H₀; el modelo logístico no se ajusta adecuadamente a los datos observados.

1.6 6. Calcule e interprete el Pseudo R2

# Cálculo del Coeficiente de determinación
R2= (1-Modelo1$deviance/Modelo1$null.deviance)*100; R2
[1] 6.79042

Interpretación:

  • El modelo de regresión logístico binario ajustado, explica un 6.8% para predecir un paciente con cirrosis en función de la hepatitis B. Este bajo porcentaje indica que el modelo tiene una capacidad explicativa pobre.

1.6.1 Interpretación cualitativa del pseudo R² (McFadden)

Valor de pseudo R² Calidad del ajuste del modelo Interpretación general
0.00 – 0.10 Muy bajo El modelo explica muy poca variabilidad. Poca capacidad predictiva.
0.10 – 0.20 Bajo Ajuste pobre. El modelo tiene información útil, pero limitada.
0.20 – 0.40 Moderado Ajuste aceptable. El modelo explica una proporción razonable de la variabilidad.
> 0.40 Bueno Ajuste fuerte. El modelo explica bien la variabilidad en los datos.

1.7 7. Prueba de significación de los coeficientes de regresión

  • H₀: β₁ = 0 (El coeficiente de la variable hepatitis B no es significativo)
  • H₁: β₁ ≠ 0 (El coeficiente de la variable hepatitis B es significativo)

Prueba estadistica

\[ Z_c = \frac{\hat{\beta}_1 - \beta_1}{S_{\hat{\beta}_1}} \]

  • \(\hat{\beta}_1\) es el valor estimado del coeficiente (en tu caso, 1.983).
  • \(\beta_1\) es el valor hipotético bajo la hipótesis nula (usualmente 0).
  • \(S_{\hat{\beta}_1}\) es el error estándar del coeficiente (en tu caso, 0.3777).
# Coeficiente estimado
b1 <- coef(Modelo1)[2]

# Error estándar
sb1 <- sqrt(diag(vcov(Modelo1)))[2]

# Valor hipotético bajo H0 (usualmente 0)
beta_0 <- 0

# Cálculo del estadístico Z con la resta explícita
Zc <- (b1 - beta_0) / sb1
Zc
  X_Hepa 
5.249854 
# Cálculo del p-valor (dos colas)
p_value <- 2 * (1 - pnorm(abs(Zc)))
cat("p-valor:", p_value)
p-valor: 1.522198e-07
#cat(sprintf("p-valor: %.8f\n", p_value))

Interpretación:

  • Con un nivel de significación de 0.05, se puede afirmar que la presencia hepatitis B permite explicar la existencia de cirrosis. La hepatitis B, es significativa la modelo

  • Todos los coeficientes, incluyendo el intercepto, son evaluados con la misma hipótesis nula estándar: que su valor es 0 (se le resta cero)

1.8 8. Utilizando el modelo estimado determine lo siguiente

# Estimación de valores predecidos (Probabilidades)

Xo=c(1,1); #La probabilida de tener cirrocis si  tiene hepatitis 
P_Xo=sum(Xo*coef(Modelo1))
P1=1/(1+exp(-(P_Xo))); P1
[1] 0.85
Xo=c(1,0); P_Xo=sum(Xo*coef(Modelo1)) #La probabilida de tener cirrocis si no tiene hepatitis 
P2=1/(1+exp(-(P_Xo))); P2
[1] 0.4382353

Interpretación:

1.8.1 8.1 Halle la probabilidad de que un paciente tenga cirrosis, sabiendo que ha tenido hepatitis B.

X_Hepa=c(1);

value_pred=predict(Modelo1,newdata = as.data.frame(X_Hepa))
#Probabilida de tener cirrocis cuando se tiene hepatitis
exp(value_pred)/(1+(exp(value_pred)))
   1 
0.85 

1.8.2 8.2 ¿Cuál es más probable que un paciente tenga cirrosis, debido a que ha tenido hepatitis B o no la ha tenido?.

Se comparan dos probabilidades obtenidas a partir del modelo de regresión logística:

  • \(P(Y = 1 \mid X = 1) = 0.850\): Probabilidad de tener cirrosis si el paciente ha tenido hepatitis B.

  • \(P(Y = 1 \mid X = 0) = 0.438\): Probabilidad de tener cirrosis si el paciente no ha tenido hepatitis B.

Conclusión

  • Es más probable que un paciente tenga cirrosis si ha tenido hepatitis B, ya que la probabilidad estimada en ese caso es significativamente mayor (0.850 frente a 0.438).

2 Aplicación 2 - Datos agrupados con categorias y conteos

Forma: conteos y fracasos

  • glm(cbind(éxitos, fracasos) ~ predictor, family=binomial)

Se ha realizado un estudio con la finalidad de establecer una relación entre la edad y la mortalidad por cardiopatía isquémica (CI) en pacientes diabéticos. Para el estudio se evaluó a 100 pacientes fallecidos, estableciéndose los rangos de edades y la causa del fallecimiento (CI: Cardiopatía isquémica u otra causa). Los datos se presentan en la siguiente tabla:

Edad Causa de muerte: Otra Causa de muerte: CI Total (n)
20–29 9 1 10
30–34 13 2 15
35–39 9 3 12
40–44 10 5 15
45–49 7 6 13
50–54 3 5 8
55–59 4 13 17
60–69 2 8 10
Total 57 43 100

2.1 1. Formule el MLG, ajustando los datos a una regresión logística binaria con función de enlace logit.

Variable dependiente:

  • \(Y =\) Número de muertos por cardiopatía isquémica
    (Y = 1: muerte por CI, Y = 0: otras causas)

Variable predictora:

  • \(X =\) Rango de edades (marca de clase)

2.2 Componente aleatorio:

\[ Y_i \sim \text{Binomial}(n_i, \pi_i), \quad \text{con: } \mu_i = \mathbb{E}(Y_i) = n_i \pi_i, \quad V(Y_i) = n_i \pi_i (1 - \pi_i) \quad \text{para } i = 1, 2, \dots, n \]

Dónde:
\[ \pi_i = P(\text{Muerte por CI}) \]


2.3 Componente sistemático (predictor lineal):

\[ \eta_i = X_i' \beta = \beta_0 + \beta_1 x_i \]


2.4 Función de enlace (logit):

\[ g(\mu_i) = \text{logit}(\pi_i) = \log\left(\frac{\pi_i}{1 - \pi_i}\right) = \eta_i \]


2.5 Modelo logit:

\[ \log\left(\frac{\pi_i}{1 - \pi_i}\right) = \beta_0 + \beta_1 x_i \]


2.6 Modelo logístico:

[ P(Y = 1) = _i = _

2.7 2. Halle e interprete los coeficientes estimados del modelo

Edad<-c(25,32,37,42,47,52,57,65) #marca de clase
CI<-c(1,2,3,5,6,5,13,8)
n<-c(10,15,12,15,13,8,17,10)
Datos2<-data.frame(CI=CI,Edad=Edad,n=n)
# Estimación de los coeficientes de regresión
Modelo2<-glm(cbind(CI,n-CI)~Edad,family=binomial(link=logit))
summary(Modelo2)

Call:
glm(formula = cbind(CI, n - CI) ~ Edad, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -5.02979    1.08306  -4.644 3.42e-06 ***
Edad         0.10471    0.02301   4.551 5.35e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 28.70152  on 7  degrees of freedom
Residual deviance:  0.55876  on 6  degrees of freedom
AIC: 25.696

Number of Fisher Scoring iterations: 4

2.8 📊 Modelo logístico estimado

\[ P(Y = 1) = \hat{\pi}_i = \frac{\exp(-5.029 + 0.105X)}{1 + \exp(-5.029 + 0.105X)} \]


2.9 🔢 Modelo logit estimado

\[ \text{logit}(\hat{\pi}_i) = \log\left(\frac{\hat{\pi}_i}{1 - \hat{\pi}_i}\right) = -5.029 + 0.105X \] Intrepretación de los coeficientes: log-odds

  • Intercepto (β₀ = -5.0298): Cuando la edad es 0 años, el log-odds de tener CI es -5.0298, lo que indica una probabilidad base muy baja de CI en estas condiciones.

  • Edad (β₁ = 0.1047): Por cada año adicional de edad, el log-odds de tener complicaciones isquémicas (CI) aumenta en 0.1047 unidades, lo que implica un aumento en la probabilidad, manteniendo constantes las demás variables.

2.10 3. Hallar e interpretar los Odds ratios (OR)

# Cálculo de los Odds Ratios
exp(coef(Modelo2))
(Intercept)        Edad 
0.006540202 1.110388795 

Intepretacion: OR

  • Intercepto (OR = 0.0066): Cuando la edad es 0 años, las odds de tener CI son aproximadamente 0.0066, lo que corresponde a una probabilidad aproximadamente de: 0.0065/1+0.0065 = 0.0065

  • Edad (X1 = 1.1104): Por cada año adicional de edad, las odds de tener CI se multiplican por 1.1104 (es decir, aumentan un 11.04%), manteniendo constantes las demás variables.

  • Para calcular el OR por cada 5 años, multiplicamos el coeficiente 0.105 por 5, lo que da 0.525, y luego calculamos e elevado a 0.525, que es aproximadamente 1.690; por lo tanto, por cada 5 años adicionales, las odds de morir por CI aumentan un 69% (no 11%).

  • Tener en consideracón No es correcto hacer: exp(0.105) × 5 porque el OR por unidad (un año) es e^(0.105), pero para 5 unidades (5 años) el OR es: e^(0.105 × 5) = e^(0.525) ≈ 1.690. Multiplicar el OR de 1 año por 5 no tiene sentido porque los OR se multiplican de forma exponencial, no lineal.

2.11 4. Hallar intervalos de confianza del 95% para los coeficientes y los OR

# IC para los coeficientes
NC=0.95
confint.default(Modelo2, level=NC)
                  2.5 %     97.5 %
(Intercept) -7.15253746 -2.9070369
Edad         0.05961165  0.1498088

Interpertación:

Con un nivel de confianza del 95%:

  • Intercepto: El coeficiente de regresión \(\beta_0\) está entre -7.15 y -2.91, indicando un efecto negativo significativo en el log-odds, ya que el intervalo no incluye cero.

  • Edad: El coeficiente de regresión \(\beta_1\) está entre 0.06 y 0.15, indicando un efecto positivo significativo de la variable Edad sobre el log-odds, ya que el intervalo no incluye cero.

# IC para OR
NC=0.95
exp(confint.default(Modelo2, level=NC))
                  2.5 %     97.5 %
(Intercept) 0.000782875 0.05463739
Edad        1.061424267 1.16161210

Interpertación:

  • Con un nivel de confianza del 95%, el odds ratio asociado a la Edad está entre 1.06 y 1.16, lo que indica que por cada año adicional, las odds de morir por complicaciones isquémicas aumentan entre un 6% y un 16%, siendo este efecto positivo y significativo.

2.12 5. Realice la prueba la significación del modelo logístico binario. Use un nivel de significación de 0.05.

Hipotesis

  • H0: El modelo de regresión logística se ajusta a los datos
  • H1: El modelo de regresión logística no se ajusta a los datos
summary(Modelo2)

Call:
glm(formula = cbind(CI, n - CI) ~ Edad, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -5.02979    1.08306  -4.644 3.42e-06 ***
Edad         0.10471    0.02301   4.551 5.35e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 28.70152  on 7  degrees of freedom
Residual deviance:  0.55876  on 6  degrees of freedom
AIC: 25.696

Number of Fisher Scoring iterations: 4

Decisión estadística:

# Prueba de significación del modelo de regresión
Alfa=0.05
Chi_Tab=qchisq(1-Alfa,Modelo2$df.residual); Chi_Tab
[1] 12.59159
p_valor=1-pchisq(Modelo2$deviance,Modelo2$df.residual); p_valor
[1] 0.9970483

Conclusión

  • Con un nivel de significación de 0.05 y un p-valor de 0.997, no se rechaza la hipótesis nula (H0), por lo que se concluye que el modelo de regresión logística binaria se ajusta adecuadamente a los datos.

2.13 6. Prueba de significación de los coeficientes de regresión

  • H₀: β₁ = 0 (El coeficiente de la variable Edad no es significativo)
  • H₁: β₁ ≠ 0 (El coeficiente de la variable Edad es significativo)
# Coeficiente estimado
b1 <- coef(Modelo2)[2]

# Error estándar
sb1 <- sqrt(diag(vcov(Modelo2)))[2]

# Valor hipotético bajo H0 (usualmente 0)
beta_0 <- 0

# Cálculo del estadístico Z con la resta explícita
Zc <- (b1 - beta_0) / sb1
Zc
   Edad 
4.55066 
# Cálculo del p-valor (dos colas)
p_value <- 2 * (1 - pnorm(abs(Zc)))
cat("p-valor:", p_value)
p-valor: 5.347778e-06
#cat(sprintf("p-valor: %.8f\n", p_value))

Conclusión

  • Con un nivel de significación de 0.05 y un p-valor de 5.35×10⁻⁶, se rechaza la hipótesis nula (H₀) que indica que la edad no tiene efecto sobre la probabilidad de muerte por CI. Por lo tanto, se concluye que la edad del paciente es una variable estadísticamente significativa en el modelo de regresión logística

2.14 7. Calcule e interprete el Pseudo R2

summary(Modelo2)

Call:
glm(formula = cbind(CI, n - CI) ~ Edad, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept) -5.02979    1.08306  -4.644 3.42e-06 ***
Edad         0.10471    0.02301   4.551 5.35e-06 ***
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 28.70152  on 7  degrees of freedom
Residual deviance:  0.55876  on 6  degrees of freedom
AIC: 25.696

Number of Fisher Scoring iterations: 4
R2= (1-Modelo2$deviance/Modelo2$null.deviance)*100; R2
[1] 98.05321
  • El modelo de regresión logístico binario ajustado explica un 98.1% de la probabilidad de muerte por CI en función de la edad, lo que indica una alta capacidad explicativa del modelo.

2.15 8. ¿Cuál es la probabilidad para una mortalidad a los 30 años?. Obtenga los valores estimados de las probabilidades (πi).

Xo=c(1,30); P_Xo=sum(Xo*coef(Modelo2))
P1=1/(1+exp(-(P_Xo))); P1
[1] 0.1314178

Conclusión

  • La probabilidad estimada de mortalidad por CI a los 30 años es de aproximadamente 0.13 según el modelo ajustado.
  • La probabilidad estimada de mortalidad por CI a los 30 años es de aproximadamente 13%.
# Estimación de los valores predecidos para cada observacion. (Probabilidades)
fitted(Modelo2)
         1          2          3          4          5          6          7 
0.08225981 0.15721996 0.23948427 0.34706671 0.47292480 0.60232073 0.71883605 
         8 
0.85524894 
round(fitted(Modelo2))
1 2 3 4 5 6 7 8 
0 0 0 0 0 1 1 1 

Interpretación:

  • Se observa que en los pacientes con diabetes, se incrementa la probabilidad de morir por CI cuando aumenta la edad.

3 Aplicación 3 - Datos desde CSV

En un estudio de mercado se desea investigar los principales factores que pueden influir para tener éxito en introducir un nuevo producto al mercado. Entonces, el objetivo es desarrollar un modelo que permita predecir si una empresa tendrá éxito o no. En el siguiente cuadro se presentan las variables.

Archivo de datos: MLGA_PT_Clase_05_Datos01.csv

Variable Descripción Valores Variables diseño
ÉXITO (Dependiente) Resultado del intento de introducir un nuevo producto en el mercado 0 = Fracaso
1 = Éxito
PUBLICIDAD Gastos en promoción y publicidad (miles soles) Dólares
GRA_NOVE Grado de novedad del producto 1 = Mejoras sustanciales
2 = Productos nuevos
1
0
TIPO Tipo de producto 1 = Consumo final
2 = Industrial
1
0
DPTO_MER Posee un Dpto. formal de investigación de mercado 1 = Sí
2 = No
1
0
INT_TEC Intensidad tecnológica del sector de actividad al que pertenece la empresa 1 = Baja
2 = Media
3 = Alta
1
0
0
0
1
0
PERSONAL Número de personal Número
#Lectura de datos:
Datos3 <- read.table("MLGA_PT_Clase_05_Datos01.csv", header=TRUE, sep=",")

# Si ya habías attachado Datos3 antes, lo detachamos para evitar conflictos
if ("Datos3" %in% search()) {
  detach("Datos3")
}

# Ahora attachamos el nuevo Datos3
attach(Datos3)
str(Datos3)
'data.frame':   156 obs. of  8 variables:
 $ Exito     : int  1 0 1 0 0 0 0 1 1 0 ...
 $ Publicidad: num  1.79 8.12 1.95 2.3 6.6 4.03 5.74 2.3 2.3 5.16 ...
 $ Gra_Nov   : int  1 0 1 0 0 0 0 1 0 0 ...
 $ Tipo      : int  0 0 0 1 0 0 0 0 0 0 ...
 $ Dpto_Mer  : int  0 0 0 0 0 0 0 0 0 0 ...
 $ Int_Tec1  : int  1 1 1 1 0 0 0 1 1 1 ...
 $ Int_Tec2  : int  0 0 1 0 1 1 1 0 0 0 ...
 $ Personal  : int  1 127 2 1 60 5 15 0 2 11 ...
sapply(Datos3, unique)
$Exito
[1] 1 0

$Publicidad
 [1] 1.79 8.12 1.95 2.30 6.60 4.03 5.74 5.16 3.53 4.52 2.48 3.22 3.74 3.04 3.00
[16] 5.84 4.25 3.69 4.01 6.09 2.77 3.40 2.71 4.65 4.61 3.91 3.14 4.09 5.54 3.09
[31] 3.50 3.66 5.99 6.25 3.47 2.40 3.61 2.56 3.64 2.20 4.32 1.61 4.56 4.47 3.18
[46] 2.64 4.38 3.87 3.26 3.81 2.08 4.34 2.89 4.94 5.08 4.50 3.33 3.30 3.37 4.60
[61] 3.89 3.43 5.01 4.22 4.93 5.02 3.56 5.23 4.96 4.70 3.58 5.14

$Gra_Nov
[1] 1 0

$Tipo
[1] 0 1

$Dpto_Mer
[1] 0 1

$Int_Tec1
[1] 1 0

$Int_Tec2
[1] 0 1

$Personal
 [1]   1 127   2  60   5  15   0  11   3  48   4   7  34  70  10   8   6  12  40
[20]  27   9  20  14  22
Modelo3<-glm(Exito~Publicidad+Gra_Nov+Tipo+Dpto_Mer+Int_Tec1+Int_Tec2+Personal,family=binomial(link=logit))
Warning: glm.fit: fitted probabilities numerically 0 or 1 occurred
summary(Modelo3)

Call:
glm(formula = Exito ~ Publicidad + Gra_Nov + Tipo + Dpto_Mer + 
    Int_Tec1 + Int_Tec2 + Personal, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   8.4977     1.8785   4.524 6.08e-06 ***
Publicidad   -2.0118     0.5006  -4.018 5.86e-05 ***
Gra_Nov       1.2226     0.5331   2.294  0.02182 *  
Tipo         -0.1468     0.7803  -0.188  0.85078    
Dpto_Mer      3.5744     1.3663   2.616  0.00889 ** 
Int_Tec1     -2.1649     0.8142  -2.659  0.00784 ** 
Int_Tec2     -0.7107     0.8498  -0.836  0.40301    
Personal     -0.4220     0.1494  -2.825  0.00472 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 211.91  on 155  degrees of freedom
Residual deviance: 104.25  on 148  degrees of freedom
AIC: 120.25

Number of Fisher Scoring iterations: 8

3.1 2. Halle e interprete los coeficientes estimados del modelo

Intrepretación de los coeficientes: log-odds

  • Intercepto (β₀ = 8.4977): Cuando todas las variables independientes valen 0, el log-odds del éxito es 8.4977, lo que indica un nivel base muy alto de probabilidad de éxito en estas condiciones.

  • Publicidad (β₁ = -2.0118): Por cada incremento de 1000 soles en el gasto en publicidad, el log-odds de éxito disminuye en 2.0118 unidades, lo que implica una disminución en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Gra_Nov (β₂ = 1.2226): Si el producto representa mejoras sustanciales (comparado con uno totalmente nuevo), el log-odds de éxito aumenta en 1.2226 unidades, lo que implica un aumento en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Tipo (β₃ = -0.1468): Si el producto es de consumo final (comparado con uno industrial), el log-odds de éxito disminuye en 0.1468 unidades, lo que implica una disminución en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Dpto_Mer (β₄ = 3.5744): Si la empresa cuenta con un departamento de marketing, el log-odds de éxito aumenta en 3.5744 unidades, lo que implica un aumento en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Int_Tec1 (β₅ = -2.1649): Si la empresa pertenece a un sector con intensidad tecnológica baja (comparado con alta), el log-odds de éxito disminuye en 2.1649 unidades, lo que implica una disminución en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Int_Tec2 (β₆ = -0.7107): Si la empresa pertenece a un sector con intensidad tecnológica media (comparado con alta), el log-odds de éxito disminuye en 0.7107 unidades, lo que implica una disminución en la probabilidad de éxito, manteniendo constantes las demás variables.

  • Personal (β₇ = -0.4220): Por cada unidad adicional en la variable “Personal”, el log-odds de éxito disminuye en 0.4220 unidades, lo que implica una disminución en la probabilidad de éxito, manteniendo constantes las demás variables.

3.2 3. Hallar e interpretar los Odds ratios (OR)

Intrepretación de los coeficientes: odds

# Cálculo de los Odds Ratios
exp(coef(Modelo3))
 (Intercept)   Publicidad      Gra_Nov         Tipo     Dpto_Mer     Int_Tec1 
4903.2986087    0.1337529    3.3960089    0.8634787   35.6735951    0.1147567 
    Int_Tec2     Personal 
   0.4913186    0.6557207 
  • Intercepto (OR = 4903.2986): Cuando todas las variables independientes valen cero, las odds de éxito son aproximadamente 4903.30, lo que indica un alto nivel base de probabilidad de éxito en estas condiciones. Esto corresponde a una probabilidad base de éxito de aproximadamente 4903.3 / (1 + 4903.3) ≈ 0.998 cuando todas las variables son cero.

  • Publicidad (X1 = 0.1338): Por cada unidad adicional de gasto en publicidad, las odds de éxito se multiplican por 0.1338 (es decir, disminuyen un 86.62%), manteniendo constantes las demás variables.

  • Gra_Nov (X2 = 3.3960): Si el producto representa mejoras sustanciales (vs. uno totalmente nuevo), las odds de éxito se multiplican por 3.3960 (es decir, aumentan un 239.60%), manteniendo constantes las demás variables.

  • Tipo (X3 = 0.8635): Si el producto es de consumo final (vs. industrial), las odds de éxito se multiplican por 0.8635 (es decir, disminuyen un 13.65%), manteniendo constantes las demás variables.

  • Dpto_Mer (X4 = 35.6736): Si la empresa cuenta con un departamento de marketing, las odds de éxito se multiplican por 35.6736 (es decir, aumentan un 3,467.36%), manteniendo constantes las demás variables.

  • Int_Tec1 (X5 = 0.1148): Si la empresa pertenece a un sector de baja intensidad tecnológica (vs. alta), las odds de éxito se multiplican por 0.1148 (es decir, disminuyen un 88.52%), manteniendo constantes las demás variables.

  • Int_Tec2 (X6 = 0.4913): Si la empresa pertenece a un sector de media intensidad tecnológica (vs. alta), las odds de éxito se multiplican por 0.4913 (es decir, disminuyen un 50.87%), manteniendo constantes las demás variables.

  • Personal (X7 = 0.6557): Por cada unidad adicional en ‘Personal’, las odds de éxito se multiplican por 0.6557 (es decir, disminuyen un 34.43%), manteniendo constantes las demás variables.

3.3 4. Hallar intervalos de confianza del 95% para los coeficientes y los RO

# IC para los coeficientes 
NC=0.95
confint.default(Modelo3, level=NC)
                 2.5 %     97.5 %
(Intercept)  4.8158827 12.1794442
Publicidad  -2.9929797 -1.0305423
Gra_Nov      0.1778139  2.2673879
Tipo        -1.6760905  1.3825183
Dpto_Mer     0.8964725  6.2523490
Int_Tec1    -3.7608114 -0.5690710
Int_Tec2    -2.3762774  0.9549523
Personal    -0.7147700 -0.1292708

Intepretación

Con un nivel de confianza del 95%:

  • Intercepto:
    El coeficiente de regresión \(\beta_0\) está entre 4.82 y 12.18, indicando un efecto positivo significativo en el log-odds, ya que el intervalo no incluye cero.

  • Publicidad:
    El coeficiente de regresión \(\beta_1\) está entre -2.99 y -1.03, indicando que el efecto de la variable Publicidad sobre el log-odds es negativo y significativo, ya que el intervalo no incluye cero.

  • Gra_Nov1:
    El coeficiente de regresión \(\beta_2\) está entre 0.18 y 2.27, indicando un efecto positivo significativo de la variable Gra_Nov1, ya que el intervalo no incluye cero.

  • Tipo1:
    El coeficiente de regresión \(\beta_3\) está entre -1.68 y 1.38, lo que sugiere que el efecto de la variable Tipo1 no es estadísticamente significativo, ya que el intervalo incluye el cero.

  • Dpto_Mer1:
    El coeficiente de regresión \(\beta_4\) está entre 0.90 y 6.25, indicando un efecto positivo significativo de la variable Dpto_Mer1, ya que el intervalo no incluye cero.

  • Int_Tec11:
    El coeficiente de regresión \(\beta_5\) está entre -3.76 y -0.57, indicando un efecto negativo significativo de la variable Int_Tec11, ya que el intervalo no incluye cero.

  • Int_Tec21:
    El coeficiente de regresión \(\beta_6\) está entre -2.38 y 0.95, lo que indica que el efecto de la variable Int_Tec21 no es estadísticamente significativo, ya que el intervalo incluye el cero.

  • Personal:
    El coeficiente de regresión \(\beta_7\) está entre -0.71 y -0.13, indicando un efecto negativo significativo de la variable Personal, ya que el intervalo no incluye cero.

# IC para los OR 
NC=0.95
exp(confint.default(Modelo3, level=NC))
                   2.5 %       97.5 %
(Intercept) 123.45573520 1.947446e+05
Publicidad    0.05013782 3.568134e-01
Gra_Nov       1.19460297 9.654150e+00
Tipo          0.18710404 3.984924e+00
Dpto_Mer      2.45094224 5.192311e+02
Int_Tec1      0.02326486 5.660510e-01
Int_Tec2      0.09289575 2.598547e+00
Personal      0.48930466 8.787360e-01

Interpretación

Con un nivel de confianza del 95%:

  • Intercepto: El OR para el intercepto está entre 123.46 y 194,744.6, indicando un nivel base muy alto de odds en estas condiciones.

  • Publicidad: El OR para la variable Publicidad está entre 0.05 y 0.36, lo que indica que un aumento en el gasto en publicidad se asocia con una disminución significativa en las odds del éxito, ya que el intervalo no incluye el uno.

  • Gra_Nov1: El OR para Gra_Nov1 está entre 1.19 y 9.65, indicando que cuando el producto representa mejoras sustanciales (vs. uno totalmente nuevo), las odds de éxito aumentan significativamente.

  • Tipo1: El OR para Tipo1 está entre 0.19 y 3.98, dado que el intervalo incluye el uno, no se puede afirmar que el efecto sea estadísticamente significativo.

  • Dpto_Mer1: El OR para Dpto_Mer1 está entre 2.45 y 519.23, indicando que contar con un departamento de marketing aumenta significativamente las odds de éxito.

  • Int_Tec11: El OR para Int_Tec11 está entre 0.02 y 0.57, lo que indica que pertenecer a un sector con baja intensidad tecnológica disminuye significativamente las odds de éxito.

  • Int_Tec21: El OR para Int_Tec21 está entre 0.09 y 2.60, como el intervalo incluye el uno, no se puede considerar estadísticamente significativo.

  • Personal: El OR para Personal está entre 0.49 y 0.88, indicando que por cada unidad adicional en personal, las odds de éxito disminuyen significativamente.

3.4 5. Realice la prueba bondad de ajuste. Use un nivel de significación de 0.05.

Hipotesis

  • Ho: El Modelo de regresión logístico se ajusta a los datos
  • H1: El Modelo de regresión logístico No se ajusta a los datos
summary(Modelo3)

Call:
glm(formula = Exito ~ Publicidad + Gra_Nov + Tipo + Dpto_Mer + 
    Int_Tec1 + Int_Tec2 + Personal, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   8.4977     1.8785   4.524 6.08e-06 ***
Publicidad   -2.0118     0.5006  -4.018 5.86e-05 ***
Gra_Nov       1.2226     0.5331   2.294  0.02182 *  
Tipo         -0.1468     0.7803  -0.188  0.85078    
Dpto_Mer      3.5744     1.3663   2.616  0.00889 ** 
Int_Tec1     -2.1649     0.8142  -2.659  0.00784 ** 
Int_Tec2     -0.7107     0.8498  -0.836  0.40301    
Personal     -0.4220     0.1494  -2.825  0.00472 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 211.91  on 155  degrees of freedom
Residual deviance: 104.25  on 148  degrees of freedom
AIC: 120.25

Number of Fisher Scoring iterations: 8

Decisión estadística:

# Prueba de significación del modelo de regresión
Alfa=0.05
Chi_Tab=qchisq(1-Alfa,Modelo3$df.residual); Chi_Tab
[1] 177.3897
p_valor=1-pchisq(Modelo3$deviance,Modelo3$df.residual); p_valor 
[1] 0.9975106

Conclusión

  • Con un nivel de significación de 0.05 y un p-valor de 0.9975, no se rechaza la hipótesis nula (H0), por lo que se concluye que el modelo de regresión logística binaria se ajusta adecuadamente a los datos.

3.5 6. Prueba de significación de los coeficientes de regresión

  • H₀: β₁ = 0 (El coeficiente de la variable Edad no es significativo)
  • H₁: β₁ ≠ 0 (El coeficiente de la variable Edad es significativo)
summary(Modelo3)

Call:
glm(formula = Exito ~ Publicidad + Gra_Nov + Tipo + Dpto_Mer + 
    Int_Tec1 + Int_Tec2 + Personal, family = binomial(link = logit))

Coefficients:
            Estimate Std. Error z value Pr(>|z|)    
(Intercept)   8.4977     1.8785   4.524 6.08e-06 ***
Publicidad   -2.0118     0.5006  -4.018 5.86e-05 ***
Gra_Nov       1.2226     0.5331   2.294  0.02182 *  
Tipo         -0.1468     0.7803  -0.188  0.85078    
Dpto_Mer      3.5744     1.3663   2.616  0.00889 ** 
Int_Tec1     -2.1649     0.8142  -2.659  0.00784 ** 
Int_Tec2     -0.7107     0.8498  -0.836  0.40301    
Personal     -0.4220     0.1494  -2.825  0.00472 ** 
---
Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1

(Dispersion parameter for binomial family taken to be 1)

    Null deviance: 211.91  on 155  degrees of freedom
Residual deviance: 104.25  on 148  degrees of freedom
AIC: 120.25

Number of Fisher Scoring iterations: 8

Calculo manual

# Coeficiente estimado
b1 <- coef(Modelo3)[2]

# Error estándar
sb1 <- sqrt(diag(vcov(Modelo3)))[2]

# Valor hipotético bajo H0 (usualmente 0)
beta_0 <- 0

# Cálculo del estadístico Z con la resta explícita
Zc <- (b1 - beta_0) / sb1
Zc
Publicidad 
 -4.018451 
# Cálculo del p-valor (dos colas)
p_value <- 2 * (1 - pnorm(abs(Zc)))
cat("p-valor:", p_value)
p-valor: 5.858206e-05
#cat(sprintf("p-valor: %.8f\n", p_value))

Conclusion

  • Con un nivel de significación de 0.05, todos los coeficientes son significativos, menos tipo e intensidad 2

3.6 7. Cálculo del coeficiente de determinación (Pseudo R2)

# Cálculo del Coeficiente de determinación
R2= (1-Modelo3$deviance/Modelo3$null.deviance)*100; R2
[1] 50.80438

Interpretación

  • El modelo de regresión logístico binario ajustado, explica un 50.8% para predecir el éxito de introducir un nuevo producto al mercado.

3.7 8 Predicción para nuevas empresas

-Publicidad : 4.5 -Gra_Nov : 1 -Tipo : 0 -Dpto_Mer : 1 -Int_Tec1 : 1 -Int_Tec2 : 0 -Personal : 15

Empresa Publicidad Grad_Nove Tipo I+D (Imasd) Selectg Personal
E1 4.5 Mejoras sustanciales Industrial Baja 15
E2 1.5 Productos nuevos Industrial No Media 10
E3 8.5 Productos nuevos Consumo final Alta 20
# Predicción para nuevas empresas
Xo=c(1,4.5,1,0,1,1,0,15); P_Xo=sum(Xo*coef(Modelo3)); P1=1/(1+exp(-(P_Xo))); P1 # 1 al inicio es el intercepto
[1] 0.01401523
Xo=c(1,1.5,0,0,0,0,1,10); P_Xo=sum(Xo*coef(Modelo3)); P2=1/(1+exp(-(P_Xo))); P2
[1] 0.6339397
Xo=c(1,8.5,0,1,1,0,0,20); P_Xo=sum(Xo*coef(Modelo3)); P3=1/(1+exp(-(P_Xo))); P3
[1] 1.221917e-06

Conclusion

  • Aplicando el punto de corte: Si π≥0.5, Y=1 (éxito); Si π<0.5, Y=0 (no éxito). Entonces, la empresa E2 tendrá éxito en introducir un nuevo producto al mercado con una probabilidad de 0.633, mientras las empresas E1 y E3 no tendrán éxito.

  • E2 tiene la mayor probabilidad de éxito (63.4%). Su perfil (industrial, productos nuevos, sin I+D, selectg media) es el más favorable según el modelo.

  • E1 tiene una probabilidad baja (1.4%), posiblemente afectada por su enfoque en mejoras sustanciales y baja selectg.

  • E3 presenta una probabilidad casi nula (0.0001%), a pesar de alta inversión en publicidad y personal; factores como el tipo “consumo final” y selectg alta podrían estar penalizando.