#Para leer desde INTERNET ENFERMEDADES CORAZON
corazon <- read.csv(url("https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data"),header=FALSE,sep=",",na.strings = '?')

#RENOMBRAR LAS COLUMNAS
names(corazon) <- c( "age", "sex", "cp", "trestbps", "chol","fbs", "restecg","thalach",
                     "exang", "oldpeak","slope", "ca", "thal", "num")
numericas <- c(1,4,5,8,10)

head(corazon[,numericas])
##   age trestbps chol thalach oldpeak
## 1  63      145  233     150     2.3
## 2  67      160  286     108     1.5
## 3  67      120  229     129     2.6
## 4  37      130  250     187     3.5
## 5  41      130  204     172     1.4
## 6  56      120  236     178     0.8

Selección de la muestra de tamaño n = 28

set.seed(8)

muestra <- corazon[sample(nrow(corazon),28,replace = F),]

alpha <- 0.05

head(muestra)
##     age sex cp trestbps chol fbs restecg thalach exang oldpeak slope ca thal
## 183  42   1  1      148  244   0       2     178     0     0.8     1  2    3
## 226  34   0  2      118  210   0       0     192     0     0.7     1  0    3
## 79   48   1  2      130  245   0       2     180     0     0.2     2  0    3
## 12   56   0  2      140  294   0       2     153     0     1.3     2  0    3
## 119  63   1  4      130  330   1       2     132     1     1.8     1  3    7
## 170  45   0  2      112  160   0       0     138     0     0.0     2  0    3
##     num
## 183   0
## 226   0
## 79    0
## 12    0
## 119   3
## 170   0

Intervalos de confianza

Intervalos de confianza de la muestra

Para construir el intervalo tenemos los siguientes supuestos:

  • Varianza poblacional \(\sigma^2\) desconocida
  • Tamaño de la muestra pequeño \(n < 30\)
  • Población Normal

Prueba de Normalidad de los datos

Se procede a probar el supuesto de la normalidad de los datos por medio de la prueba de Shapiro en cada una de las variables numéricas.

\(H_{0j}: X_j\) se distribuye normalmente \(V.S.H_{1j}: ¬H_{0j}\)

Variables

normalidad <- data.frame(P.value = sort(apply(muestra[,numericas],2,function(x) shapiro.test(x)$p.value),decreasing = T))
normalidad
##               P.value
## chol     8.141394e-01
## age      6.826013e-01
## thalach  5.067671e-01
## trestbps 1.338957e-01
## oldpeak  7.627854e-05

Intervalos de Confianza para la varianza de chol:

A continuación se presenta un intervalo bilateral con el 95% de confianza para la varianza de la variable chol, como se detalla a continuación.

\(\frac{(n-1)s^2}{\chi^2_{n-1,1-\alpha/2}} \leq\sigma^2 \leq \frac{(n-1)s^2}{\chi^2_{n-1,\alpha/2}}\)

Con un nivel de confianza del 95%, se espera que la varianza del chol se encuentre entre 1650.46 y 4891.84. Además, se encontró que la varianza estimada para esta variable es de 2640.40.

stests::var.test(muestra$chol,conf.level = 1-alpha)
## 
##  X-squared test for variance
## 
## data:  muestra$chol
## X-squared = 71291, df = 27, p-value < 2.2e-16
## alternative hypothesis: true variance is not equal to 1
## 95 percent confidence interval:
##  1650.458 4891.844
## sample estimates:
## variance of x 
##      2640.397

Intervalos de Confianza para la media de chol:

A continuación se presenta un intervalo bilateral con el 95% de confianza para la media de la variable chol, como se detalla a continuación.

\(\bar{x} - T_{n-1,\alpha/2}\frac{s}{\sqrt{n}} \leq\mu \leq \bar{x} + T_{n-1,\alpha/2}\frac{s}{\sqrt{n}}\)

Con un nivel de confianza del 95%, se espera que la media del chol se encuentre entre 212.289 y 252.139. Además, se encontró que la media estimada para esta variable es de 232.214.

t.test(muestra$chol,conf.level = 1-alpha)
## 
##  One Sample t-test
## 
## data:  muestra$chol
## t = 23.913, df = 27, p-value < 2.2e-16
## alternative hypothesis: true mean is not equal to 0
## 95 percent confidence interval:
##  212.2893 252.1392
## sample estimates:
## mean of x 
##  232.2143

Intervalos de Confianza para la varianza de age:

A continuación se presenta un intervalo bilateral con el 95% de confianza para la varianza de la variable age, como se detalla a continuación.

\(\frac{(n-1)s^2}{\chi^2_{n-1,1-\alpha/2}} \leq\sigma^2 \leq \frac{(n-1)s^2}{\chi^2_{n-1,\alpha/2}}\)

Con un nivel de confianza del 95%, se espera que la varianza del age se encuentre entre 50.862 y 150.752. Además, se encontró que la varianza estimada para esta variable es de 81.369.

stests::var.test(muestra$age,conf.level = 1-alpha)
## 
##  X-squared test for variance
## 
## data:  muestra$age
## X-squared = 2197, df = 27, p-value < 2.2e-16
## alternative hypothesis: true variance is not equal to 1
## 95 percent confidence interval:
##   50.86212 150.75184
## sample estimates:
## variance of x 
##      81.36905

Pruebas de hipótesis para la muestra

Para realizar los contrastesde hipótesis tenemos los siguientes supuestos:

Prueba de Normalidad de los datos

Se procede a probar el supuesto de la normalidad de los datos por medio de la prueba de Shapiro en cada una de las variables numéricas.

\(H_{0j}: X_j\) se distribuye normalmente \(V.S.H_{1j}: ¬H_{0j}\)

Variables

normalidad
##               P.value
## chol     8.141394e-01
## age      6.826013e-01
## thalach  5.067671e-01
## trestbps 1.338957e-01
## oldpeak  7.627854e-05

Prueba de hipótesis para la media de thalach:

A continuación se presenta el siguiente contraste de hipótesis para la media de la variable thalach. Se pueba con un valor cercano a la media muestral, como se detalla a continuación.

\(H_0: \mu = \mu_0\) V.S.\(H_1: \mu \neq \mu_0\)

Con \((1-\alpha)\) % de confianza, se rechaza \(H_0\) en favor de \(H_1\) si:

\(T^* = \left| \frac{\hat{\mu}-\mu}{s_{\hat{\mu}}} \right| > T_{n-1,\alpha/2}\)

Con un valor p cercano a 0, se concluye que la media poblacional del thalach es diferente de 175. Adicionalmente, se encontró que la media estimada para esta variable es de 157.429.

t.test(muestra$thalach, mu=175)
## 
##  One Sample t-test
## 
## data:  muestra$thalach
## t = -4.8807, df = 27, p-value = 4.197e-05
## alternative hypothesis: true mean is not equal to 175
## 95 percent confidence interval:
##  150.0416 164.8156
## sample estimates:
## mean of x 
##  157.4286

Prueba de hipótesis para la razón de varianzas de thalach:

Se selecciona a la variable sex para agrupar los datos y tener dos muestras independientes, con el fin de comparar las varianzas entre los grupos.

A continuación se presenta el siguiente contraste de hipótesis para determinar si la varianza de la variable thalach es igual en el age 1 que en el 0. Se define el contraste a continuación:

\(H_0: \sigma^2_1 = \sigma^2_0\) V.S.\(H_1: \sigma^2_1 \neq \sigma^2_0\)

Con \((1-\alpha)\) % de confianza, se rechaza \(H_0\) en favor de \(H_1\) si:

\(F^* = \frac{s_1^2}{s_0^2} > F_{n_1-1,n_0-1,\alpha}\)

Con un valor p de 0.2602, se concluye que la varianza de thalach es igaul en el grupo 1 que en el grupo 0. Adicionalmente, se encontró que la estimación para este ratio es de 2.0233. Con este resultado se puede proceder a una adecuada prueba de diferencia de medias para esta variable.

var.test(muestra$thalach[muestra$sex==1],
         muestra$thalach[muestra$sex==0],
         conf.level = 1-alpha)
## 
##  F test to compare two variances
## 
## data:  muestra$thalach[muestra$sex == 1] and muestra$thalach[muestra$sex == 0]
## F = 2.0233, num df = 16, denom df = 10, p-value = 0.2602
## alternative hypothesis: true ratio of variances is not equal to 1
## 95 percent confidence interval:
##  0.5786995 6.0418756
## sample estimates:
## ratio of variances 
##           2.023291

Prueba de hipótesis para la diferencia de medias de thalach:

A continuación se presenta el siguiente contraste de hipótesis para determinar si la media de la variable thalach es igual en el sex 1 que en el 0. Se define el contraste a continuación:

\(H_0: \mu_1 = \mu_0\) V.S.\(H_1: \mu_1 \neq \mu_0\)

Con \((1-\alpha)\) % de confianza, se rechaza \(H_0\) en favor de \(H_1\) si:

\(T^* = \left|\frac{(\hat{\mu_1} - \hat{\mu_0})-(\mu_1 - \mu_0)}{S_p\sqrt{\frac{1}{n_1}+\frac{1}{n_0}}} \right | > T_{v,\alpha/2}\)

Donde: \(v=n_1+n_0-2\) \(S_p^2 = \frac{(n_1-1)s_1^2 + (n_0-1)s_0^2}{n_1+n_0-2}\)

Con un valor p de 0.484, se concluye que la media poblacional del thalach en la sex 1 no es diferente a la de la sex 0. Además, se encontró que la estimación para estos parámetros es de 155.353 y 160.636, respectivamente.

t.test(muestra$thalach[muestra$sex==1],
         muestra$thalach[muestra$sex==0],
         conf.level = 1-alpha,var.equal = T)
## 
##  Two Sample t-test
## 
## data:  muestra$thalach[muestra$sex == 1] and muestra$thalach[muestra$sex == 0]
## t = -0.71011, df = 26, p-value = 0.484
## alternative hypothesis: true difference in means is not equal to 0
## 95 percent confidence interval:
##  -20.57709  10.01025
## sample estimates:
## mean of x mean of y 
##  155.3529  160.6364

Modelo de Regresión Lineal

Se procede a construir una matriz de varianzas y covarianzas, para determinar las mejores relaciones lineales y escoger las variables de los modelos

library(corrplot)
correlacion <- cor(muestra[,numericas])
correlacion
##                 age   trestbps       chol     thalach    oldpeak
## age       1.0000000 0.40706438  0.1982605 -0.50273109  0.2376861
## trestbps  0.4070644 1.00000000  0.1831463  0.05163316  0.1399624
## chol      0.1982605 0.18314633  1.0000000 -0.02764130 -0.1502321
## thalach  -0.5027311 0.05163316 -0.0276413  1.00000000 -0.5124690
## oldpeak   0.2376861 0.13996236 -0.1502321 -0.51246903  1.0000000
corrplot(correlacion,type = "upper")

De esta manera se realizarán los siguientes modelos:

Para construir un modelo de regresión lineal simple, se asumen como verdaderas las siguientes propociciones:

Primer modelo

El primer modelo es capaz de explicar el 26.26% de la variable thalach en función de la variable oldpeak, así que es un modelo regularmente bueno. Con un valor p de 0.0053 en la prueba T, se concluye que el valor de la pendiente es significativo. Por último, cuando el valor de la variable oldpeak es igual a 0, se espera que la variable thalach tome el valor de 165.12, y cuando aumenta en una unidad, esta última disminuye en 11.217 unidades, en promedio.

library(ggplot2)
modelo_1 <- lm(thalach~oldpeak,data=muestra)
summary(modelo_1)
## 
## Call:
## lm(formula = thalach ~ oldpeak, data = muestra)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -36.565 -11.775   1.361  10.238  34.732 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  165.120      4.039  40.881   <2e-16 ***
## oldpeak      -11.217      3.686  -3.043   0.0053 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.67 on 26 degrees of freedom
## Multiple R-squared:  0.2626, Adjusted R-squared:  0.2343 
## F-statistic:  9.26 on 1 and 26 DF,  p-value: 0.0053
ggplot(muestra,aes(oldpeak,thalach))+
  geom_smooth(method = lm,color="red")+
  geom_jitter(color="blue")+
  labs(title = "Modelo 1")

Supuestos

La prueba de Shapiro - Wilks refleja que los errores se distribuyen normalmente y la gráfica de los errores muestra un comportamiento aleatorio, es decir que son independientes, así que sí se cumplen los supuestos del modelo.

residuos1 <- residuals(modelo_1)
shapiro.test(residuos1)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos1
## W = 0.99158, p-value = 0.9976
par(mfrow=c(1,1))
qqnorm(residuos1,xlab = "Cuantiles Teóricos",
       ylab = "Cuantiles de la Muestra",main = "Gráfico Q-Q plot Normal")
qqline(residuos1)

par(mfrow=c(2,2))
plot(modelo_1)

Segundo modelo

El segundo modelo es capaz de explicar el 25.27% de la variabilidad total de los datos, así que es un modelo regularmente bueno. Con un valor p de 0.0064 en la prueba T, se concluye que el valor de la pendiente es significativo. Por último, cuando el valor de la variable age es igual a 0, se espera que la variable thalach tome el valor de 211.01, y cuando aumenta en una unidad, esta última disminuye en 1.062 unidades, en promedio.

modelo_2 <- lm(thalach~age,data=muestra)
summary(modelo_2)
## 
## Call:
## lm(formula = thalach ~ age, data = muestra)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -46.551  -8.221   1.788  11.989  23.696 
## 
## Coefficients:
##             Estimate Std. Error t value Pr(>|t|)    
## (Intercept)  211.008     18.344  11.503 1.06e-11 ***
## age           -1.062      0.358  -2.965   0.0064 ** 
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 16.78 on 26 degrees of freedom
## Multiple R-squared:  0.2527, Adjusted R-squared:  0.224 
## F-statistic: 8.794 on 1 and 26 DF,  p-value: 0.0064
ggplot(muestra,aes(age,thalach))+
  geom_smooth(method = lm,color="red")+
  geom_jitter(color="blue")+
  labs(title = "Modelo 2")

Supuestos

La prueba de Shapiro - Wilks refleja que los errores se distribuyen normalmente y la gráfica de los errores muestra un comportamiento aleatorio, es decir que son independientes, así que sí se cumplen los supuestos del modelo.

residuos2 <- residuals(modelo_2)
shapiro.test(residuos2)
## 
##  Shapiro-Wilk normality test
## 
## data:  residuos2
## W = 0.94075, p-value = 0.1155
par(mfrow=c(1,1))
qqnorm(residuos2,xlab = "Cuantiles Teóricos",
       ylab = "Cuantiles de la Muestra",main = "Gráfico Q-Q plot Normal")
qqline(residuos2)

par(mfrow=c(2,2))
plot(modelo_2)