#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
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
Para construir el intervalo tenemos los siguientes supuestos:
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}\)
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
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
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
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
Para realizar los contrastesde hipótesis tenemos los siguientes supuestos:
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}\)
normalidad
## P.value
## chol 8.141394e-01
## age 6.826013e-01
## thalach 5.067671e-01
## trestbps 1.338957e-01
## oldpeak 7.627854e-05
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
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
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
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:
\(thalach_i = \beta_0 + \beta_1 \times oldpeak_i + \varepsilon_i\)
\(thalach_i = \beta_0 + \beta_1 \times age_i + \varepsilon_i\)
Para construir un modelo de regresión lineal simple, se asumen como verdaderas las siguientes propociciones:
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")
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)
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")
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)