Presentamos una breve descripción de los integrantes del grupo.
knitr::include_graphics('andre.jpg')
…
Me llamo Andrea Conde, tengo 21 años, estoy cursando el séptimo semestre de Ingeniería Matemática. Me gusta la investigación operativa pues sus aplicaciones en tiempo real son extraordinarias y dado que su objetivo principal es optimizar lo considero como un arte. Mi motivación más grande es mi familia, por ellos sigo luchando y dando todo de mi para poder graduarme.
knitr::include_graphics('Nataly.jpg')
…
Mi nombre es Nataly Cuichán, nací el 21 de junio de 1995 en la ciudad de Riobamba. Actualmente vivo en Quito y cruzo sexto semestre de Ingeniería Matemática en la Escuela Politécnica Nacional. Mi pasión es la matemática y sus aplicaciones, la idea de modelar, predecir y disminuir la probabilidad de cometer errores.
knitr::include_graphics('alexandra.jpg')
…
Soy Alexandra Maigua, nací el 6 de junio de 1996 en la ciudad de Quito.Estudio Ingenieía Matemática en la Escuela Politécnica Nacional. Elegí esta carrera por mi gusto a la matématica y el amplio ámbito laboral que esta ofrece.Mi objetivo es culminar mis estudios, la motivación para cumplirlo mi familia.
knitr::include_graphics('Cristian.png')
…
Soy Cristian Solórzano, nací el 4 de junio de 1995 en la ciudad de Quito. Siempre he vivido en Quito, con la excepción de que vivía por un año en el extranjero; curso sexto semestre de Ingeniería Matemática en la Escuela Politécnica Nacional. Mi pasión son las matemáticas, además tengo algunos hobbies como la natación y siempre estoy enfocado en desarrollarme tanto personal como profesionalmente.
knitr::include_graphics('andres.jpeg')
…
Soy Andrés Vinueza, cumpli 22 años el 20 de marzo. Estudio en la EPN Ingeniería Matemática, octavo semestre de mi carrera.Siempre me gustó la matemática, desde pequeño tuve curiosidad de como se obtenian los teoremas, hasta que pude aprender eso en esta carrera. También me gusta mucho programar.En el futuro me gustaría especializarme en estadística matemática y procesos estocásticos, por otro lado también trabajar en el área de la docencia, sería muy interesante y gratificante.
Las librerías a utilizar son:
library(readr)
library(ggplot2)
library(corrplot)
library(mlbench)
library(Amelia)
library(plotly)
library(reshape2)
library(caret)
library(caTools)
library(dplyr)
library(kableExtra)
library(PMCMR)
Presentamos la base de datos Pacientes
kable_styling(kable(pacientes),bootstrap_options = "striped", full_width = T, position = "center")
PACIENTE | EDAD | COLESTEROL | IMC | TAD | GENERO |
---|---|---|---|---|---|
1 | 42 | 292 | 31.64 | 97 | Hombre |
2 | 64 | 235 | 30.80 | 90 | Hombre |
3 | 47 | 200 | 25.61 | 80 | Hombre |
4 | 56 | 200 | 26.17 | 75 | Mujer |
5 | 54 | 300 | 31.96 | 100 | Hombre |
6 | 48 | 215 | 23.18 | 67 | Hombre |
7 | 57 | 216 | 21.19 | 82 | Mujer |
8 | 52 | 254 | 26.95 | 70 | Hombre |
9 | 67 | 310 | 24.26 | 105 | Hombre |
10 | 46 | 237 | 21.87 | 70 | Mujer |
11 | 58 | 220 | 25.61 | 70 | Hombre |
12 | 62 | 233 | 27.92 | 75 | Mujer |
13 | 49 | 240 | 27.73 | 90 | Hombre |
14 | 56 | 295 | 22.49 | 95 | Hombre |
15 | 63 | 310 | 25.47 | 95 | Hombre |
16 | 64 | 268 | 30.04 | 90 | Mujer |
17 | 67 | 243 | 23.88 | 85 | Mujer |
18 | 49 | 239 | 21.99 | 75 | Mujer |
19 | 53 | 198 | 26.93 | 75 | Mujer |
20 | 59 | 218 | 25.47 | 85 | Hombre |
21 | 65 | 215 | 24.09 | 70 | Hombre |
22 | 67 | 254 | 28.65 | 105 | Hombre |
23 | 49 | 218 | 25.71 | 85 | Hombre |
24 | 53 | 221 | 25.33 | 80 | Mujer |
25 | 57 | 237 | 25.42 | 90 | Mujer |
26 | 47 | 244 | 23.99 | 85 | Mujer |
27 | 58 | 223 | 25.20 | 70 | Mujer |
28 | 48 | 198 | 25.81 | 85 | Mujer |
29 | 51 | 234 | 26.93 | 80 | Hombre |
30 | 49 | 175 | 27.77 | 80 | Hombre |
31 | 68 | 230 | 30.85 | 70 | Mujer |
32 | 58 | 248 | 21.61 | 75 | Mujer |
33 | 54 | 218 | 26.30 | 95 | Mujer |
34 | 59 | 285 | 31.44 | 100 | Hombre |
35 | 45 | 253 | 25.00 | 75 | Hombre |
36 | 53 | 187 | 23.31 | 80 | Hombre |
37 | 43 | 208 | 27.15 | 65 | Hombre |
38 | 57 | 246 | 21.09 | 80 | Hombre |
39 | 64 | 275 | 22.53 | 95 | Hombre |
40 | 43 | 218 | 19.83 | 75 | Hombre |
41 | 47 | 231 | 26.17 | 75 | Hombre |
42 | 58 | 200 | 25.95 | 90 | Hombre |
43 | 58 | 214 | 26.30 | 75 | Mujer |
44 | 48 | 230 | 24.89 | 70 | Mujer |
45 | 62 | 280 | 26.89 | 100 | Mujer |
46 | 54 | 198 | 21.09 | 65 | Hombre |
47 | 67 | 285 | 31.11 | 95 | Hombre |
48 | 68 | 201 | 21.60 | 80 | Hombre |
49 | 55 | 206 | 19.78 | 65 | Mujer |
50 | 50 | 223 | 22.99 | 75 | Mujer |
51 | 53 | 290 | 32.32 | 95 | Mujer |
52 | 63 | 315 | 31.14 | 100 | Mujer |
53 | 60 | 220 | 28.89 | 80 | Mujer |
54 | 46 | 230 | 20.55 | 75 | Hombre |
55 | 45 | 175 | 22.49 | 70 | Hombre |
56 | 53 | 213 | 22.53 | 70 | Mujer |
57 | 59 | 220 | 20.82 | 65 | Hombre |
58 | 62 | 287 | 32.32 | 95 | Hombre |
59 | 60 | 290 | 33.91 | 90 | Hombre |
60 | 62 | 209 | 20.76 | 75 | Hombre |
61 | 58 | 290 | 31.35 | 80 | Hombre |
62 | 57 | 260 | 31.14 | 95 | Hombre |
63 | 49 | 202 | 20.76 | 80 | Mujer |
64 | 61 | 214 | 19.59 | 90 | Mujer |
65 | 52 | 231 | 20.08 | 75 | Mujer |
66 | 59 | 280 | 31.60 | 100 | Hombre |
67 | 50 | 220 | 25.34 | 70 | Hombre |
68 | 46 | 233 | 22.86 | 75 | Hombre |
69 | 44 | 215 | 19.53 | 70 | Hombre |
70 | 60 | 202 | 19.10 | 65 | Mujer |
Esta base contiene información de una muestra de 70 pacientes con cinco caracteristícas representadas por las siguientes variables de tipo numéricas: edad, colesterol, Indice de masa corporal (IMC), tensión arterial diastólica (TAD) y por las variables de tipo caracter: paciente y género.
str(pacientes)
## Classes 'tbl_df', 'tbl' and 'data.frame': 70 obs. of 6 variables:
## $ PACIENTE : chr "1" "2" "3" "4" ...
## $ EDAD : num 42 64 47 56 54 48 57 52 67 46 ...
## $ COLESTEROL: num 292 235 200 200 300 215 216 254 310 237 ...
## $ IMC : num 31.6 30.8 25.6 26.2 32 ...
## $ TAD : num 97 90 80 75 100 67 82 70 105 70 ...
## $ GENERO : chr "Hombre" "Hombre" "Hombre" "Mujer" ...
Para realizar una Regresión Lineal y un análisis Anova, tratamos la base de datos de la siguiente forma:
Con esto hemos depurado nuestra base teniendo el siguiente resultado:
pacientes<-as.data.frame(pacientes)
pacientes$GENERO<-as.factor(pacientes$GENERO)
View(pacientes)
El resumen estructural :
str(pacientes)
## 'data.frame': 70 obs. of 6 variables:
## $ PACIENTE : chr "1" "2" "3" "4" ...
## $ EDAD : num 42 64 47 56 54 48 57 52 67 46 ...
## $ COLESTEROL: num 292 235 200 200 300 215 216 254 310 237 ...
## $ IMC : num 31.6 30.8 25.6 26.2 32 ...
## $ TAD : num 97 90 80 75 100 67 82 70 105 70 ...
## $ GENERO : Factor w/ 2 levels "Hombre","Mujer": 1 1 1 2 1 1 2 1 1 2 ...
El resumen estadístico :
summary(pacientes)
## PACIENTE EDAD COLESTEROL IMC
## Length:70 Min. :42.00 Min. :175.0 Min. :19.10
## Class :character 1st Qu.:49.00 1st Qu.:214.2 1st Qu.:22.49
## Mode :character Median :56.00 Median :230.0 Median :25.45
## Mean :55.24 Mean :236.8 Mean :25.47
## 3rd Qu.:60.00 3rd Qu.:254.0 3rd Qu.:27.76
## Max. :68.00 Max. :315.0 Max. :33.91
## TAD GENERO
## Min. : 65.00 Hombre:41
## 1st Qu.: 75.00 Mujer :29
## Median : 80.00
## Mean : 81.66
## 3rd Qu.: 90.00
## Max. :105.00
En la siguiente gráfica podemos notar que no existe valores pérdidos
missmap(pacientes ,col=c('yellow','grey'),y.at=1,y.labels='',legend=TRUE)
grafico1<- ggplot(data = pacientes, aes(x=GENERO, y=TAD))
grafico1+
geom_bar(stat="identity", fill=heat.colors(nrow(pacientes)))+
labs(title="DIAGRAMA DE BARRAS",subtitle="TAD POR GENERO")+
scale_fill_manual(values=c('black','lightgray'))
Con este diagrama de barras, podemos notar que de los pacientes analizados, la mayoría de ellos son hombres.
Tabla de frecuencia de la variable genero:
##
## Hombre Mujer
## 41 29
Que efectivamente concuerda con lo mencionado en el gráfico anterior.
Diagramas de caja de la variable continua: IMC
boxplot(pacientes$IMC ~pacientes$GENERO, col = c("light blue", " pink"),ylab = "I.M.C",xlab="Paciente")
Diagramas de caja de la variable continua: TAD
boxplot(pacientes$TAD, col='5', main="TAD")
Para la variable TAD, dado que si se tiene una tensión mayor a 90 mm HG esta es considerada alta, con el diagrama de caja se puede notar que el 25% de los pacientes tienen una presión alta, y entre estos datos hay una gran dispersión pues hay gente que tiene una presión muy alta superior a 100.
par(mfrow=c(1,1)) #CREA UNA PANTALLA DE UNA FILA Y UNA COLUMNA PARA GREAFICAR
hist(pacientes$EDAD,breaks=seq(40.5,70.5,by=5),xaxt='n', xlab='Edad', ylab='Frecuencia', col='grey',main="Histograma Edad de los Pacientes")
axis(side=1, at=seq(40.5,70.5,by=5), labels=seq(40.5,70.5,by=5))
Existe mayor frecuencia de pacientes con edad entre 55 y 60 años. En este intervalo de edad es donde mayor es el riesgo de sufrir problemas del corazón.
boxplot(pacientes$IMC, col='3', main="IMC")
Obtenemos algo muy parecido al gráfico de TAD, ya que el 25% de pacientes que tiene un alto IMC, presentan una gran dispersión por sus valores muy altos. Por otra parte, existe menos cantidad de pacientes con alto IMC que en la variable TAD pues la mediana se encuentra casi en el centro de la caja.
boxplot(pacientes$COLESTEROL , col='22',main="COLESTEROL")
En la variable colesterol tenemos un comportamiento “normal”. A diferencia de las otras variables la gente con colesterol alto no tiene mucha dispersión.
Además tenemos un valor atípico, que corresponde a un paciente con el colesterol más alto. Se recomienda realizar un análisis especial a este paciente.
Representación de la correlación entre las variables:edad, colesterol,IMC,TAD.
pacientesReg$PACIENTE<- as.numeric(pacientesReg$PACIENTE)
corrplot(cor(select(pacientesReg,- c(PACIENTE,GENERO) )))
Del gráfico presentado podemos observar que la varieble TAD con:
El gráfico revela que las densidades máximas de TAD están entre 70 y 80.
graf<-ggplotly(pacientes %>%
ggplot(aes(TAD)) +
stat_density() +
theme_bw())
Veamos el efecto de las variables en la base de datos pacientes en TAD.
pacientesReg %>%
select(c(EDAD, COLESTEROL,IMC,TAD)) %>%
melt(id.vars = "TAD") %>%
ggplot(aes(x = value, y = TAD, colour = variable)) +
geom_point(alpha = 0.7) +
stat_smooth(aes(colour = "Tendencia")) +
facet_wrap(~variable, scales = "free", ncol = 2) +
labs(x = "Valor de la Variable", y = "Promedio TAD") +
theme_minimal()
Los resultados del gráfico anterior están en correlación con el corrplot.
Estudiaremos el efecto que tiene el Índice de masa corporal sobre hombres y mujeres.
knitr::include_graphics('colesterol.jpg')
…
Para ello generamos dos variables: hombres y mujeres.
str(pacientes)
## 'data.frame': 70 obs. of 6 variables:
## $ PACIENTE : chr "1" "2" "3" "4" ...
## $ EDAD : num 42 64 47 56 54 48 57 52 67 46 ...
## $ COLESTEROL: num 292 235 200 200 300 215 216 254 310 237 ...
## $ IMC : num 31.6 30.8 25.6 26.2 32 ...
## $ TAD : num 97 90 80 75 100 67 82 70 105 70 ...
## $ GENERO : Factor w/ 2 levels "Hombre","Mujer": 1 1 1 2 1 1 2 1 1 2 ...
colesterolh<<-pacientes$IMC[which(pacientes$GENERO=="Hombre")]
colesterolm<<-pacientes$IMC[which(pacientes$GENERO=="Mujer")]
colesterol<-c(colesterolh,colesterolm)
genero<-as.factor(c(rep("Hombre",each=length(colesterolh)),rep("Mujer",each=length(colesterolm))))
base<-data.frame(genero,colesterol)
str(base)
## 'data.frame': 70 obs. of 2 variables:
## $ genero : Factor w/ 2 levels "Hombre","Mujer": 1 1 1 1 1 1 1 1 1 1 ...
## $ colesterol: num 31.6 30.8 25.6 32 23.2 ...
Creamos una nuevo data frame llamado base, en este se guarda la variable categórica para el análisis ANOVA.
colesterol<-c(colesterolh,colesterolm)
genero<-as.factor(c(rep("Hombre",each=41),rep("Mujer",each=29)))
base<-data.frame(genero,colesterol)
View(base)
str(base)
## 'data.frame': 70 obs. of 2 variables:
## $ genero : Factor w/ 2 levels "Hombre","Mujer": 1 1 1 1 1 1 1 1 1 1 ...
## $ colesterol: num 31.6 30.8 25.6 32 23.2 ...
Presentamos el diagrama de caja :
boxplot(colesterol ~genero, col = c(" light blue", "pink"),ylab = "I.M.C",xlab="Pacientes")
Con la siguiente función podemos mostrar los valores atípicos.
atipicos<-function(x)
{
N <- length(x)
UM <- sum(is.na(x))
n <- N - UM
x <- x[!(is.na(x) > 0)]
LQ1 <- (n + 1)/4
LQ3 <- (3 * (n + 1))/4
Sort <- sort(x)
V1 <- floor(LQ1)
V2 <- floor(LQ3)
V3 <- V1 + 1
V4 <- V2 + 1
Q1 <- round(Sort[V1] + (LQ1 - V1) * (Sort[V3] - Sort[V1]),
3)
Q3 <- round(Sort[V2] + (LQ3 - V2) * (Sort[V4] - Sort[V2]),
3)
IQR <- round(Q3 - Q1, 3)
l.out <- x[x < (Q1 - 1.5 * IQR)]
r.out <- x[x > (Q3 + 1.5 * IQR)]
outliers <- c(l.out, r.out)
return(outliers)
}
Valores atípicos en hombres
atipicos(colesterolh)
## numeric(0)
Valores atípicos en mujeres
atipicos(colesterolm)
## numeric(0)
La siguiente tabla muestra la media de los niveles: hombre, mujer.
round(tapply(colesterol,genero,mean),3)
## Hombre Mujer
## 25.933 24.819
Partimos del siguiente contraste: \[H_0: \mu_1=\mu_2\\H_a:\mu_1\neq\mu_2\]. Donde \(\mu_1:\) Media de los hombres, \(\mu_2:\) Media de las mujeres
Presentamos la tabla ANOVA:
pct= aov( lm( colesterol ~genero) )
pct
## Call:
## aov(formula = lm(colesterol ~ genero))
##
## Terms:
## genero Residuals
## Sum of Squares 21.0739 1030.8135
## Deg. of Freedom 1 68
##
## Residual standard error: 3.893459
## Estimated effects may be unbalanced
Pedimos un resumen de la tabla ANOVA
summary(pct)
## Df Sum Sq Mean Sq F value Pr(>F)
## genero 1 21.1 21.07 1.39 0.242
## Residuals 68 1030.8 15.16
El valor crítico de F
round(summary(pct)[[1]][1,4],3)
## [1] 1.39
Los grados de libertad del factor:
round(summary(pct)[[1]][1,1],3)
## [1] 1
Los grados de libertad del residuo:
round(summary(pct)[[1]][2,1],3)
## [1] 68
El valor de P
round(summary(pct)[[1]][1,5],3)
## [1] 0.242
Bajo la Ho el estadístico de contraste F se distribuye con una F de Fisher \(F_{(I-1), (n-I)}\) grados de libertad donde I es el número de grupos que disponemos y n el tamaño total de la muestra. Así obtenemos el cuantil buscado:
round(qf(0.05, 2-1, length(colesterol)-2, lower.tail = F),3)
## [1] 3.982
Dado que los valor crítico de F es menor que el valor del estadístico no rechazamos la hipótesis nula , es decir la media del índice de masa corporal en hombres y mujeres son iguales.
Otra forma de constatar dicha aseveración es usar la prueba de Tukey:
intervalos = TukeyHSD(pct)
intervalos
## Tukey multiple comparisons of means
## 95% family-wise confidence level
##
## Fit: aov(formula = lm(colesterol ~ genero))
##
## $genero
## diff lwr upr p adj
## Mujer-Hombre -1.11386 -2.998979 0.7712581 0.2424821
Dado que p adj es mayor a 0.05, determinamos que el grupo es estadisticamente igual en media, ya que el grupo Mujer -Hombre al contener al cero prueba lo afirmado con un \(95\%\) de confianza, como se notamos en el gráfico siguiente:
plot(intervalos)
Ahora procedemos con el valor para la estimación de la varianza común de los datos, que tiene un valor de:
s<-round(summary(pct)[[1]][2,3],0)
s
## [1] 15
La tabla siguiente muestra los intervalos de confianza para los dos grupos:
valor_t <- pt(0.05/2,70-2)
sp <- sqrt(s)
media_h <- mean(colesterol[genero =="Hombre"])
ee_h <- valor_t * (sp/ sqrt(length(colesterolh)))
media_m <- mean(colesterol[genero=="Mujer"])
ee_m<- valor_t * (sp/ sqrt(length(colesterolm)))
limite_inferior<-c(round(media_h-ee_h,3),round(media_m-ee_m,3))
limite_superior<-c(round(media_h+ee_h,3),round(media_m+ee_m,3))
a<-data.frame(limite_inferior,limite_superior)
row.names(a)<-c("Hombre","Mujer")
a
## limite_inferior limite_superior
## Hombre 25.625 26.242
## Mujer 24.453 25.186
Para obtener resultados confiables mediante el ANOVA, analizaremos los residuos. Estos deben cumplir tres supuestos: independencia, homocedasticidad y normalidad.
plot(pct$residuals)
Los residuos son idependientes pues no existen patrones obvios en el gráfico y se notan dispersos.
Para analizar la normalidad de los residuos nos ayudaremos de gráficos y descriptivos, con los que determinaremos si basta se verifica en los grupos descritos (hombres y mujeres):
summary(pct$residuals)
## Min. 1st Qu. Median Mean 3rd Qu. Max.
## -6.4032 -3.1753 -0.2732 0.0000 2.1007 7.9768
boxplot(pct$residuals, col="gray")
hist(pct$residuals,main="Histograma de los residuales",xlab="Residuos",ylab="Frecuencia", col="gray")
qqnorm(pct$residuals)
qqline(pct$residuals)
El test de Shapiro-Wilk indica que tenemos evidencia suficiente para aceptar la hipótesis nula (normalidad de los residuos).
shapiro.test(pct$residuals)
##
## Shapiro-Wilk normality test
##
## data: pct$residuals
## W = 0.95669, p-value = 0.0165
Por los gráficos presentados y apoyados en el test de Shapiro-Wilk determinamos que los residuos son normales, de media cero.
Los gráficos y descriptivos nos ayudaran a determinar si se verifica la igualdad de varianzas en los grupos:
boxplot(pct$residuals~genero, col = c("light blue", "pink"))
Podemos apreciar que la dispersión de los datos en el grupo Hombre y en el grupo Mujer es similar, y lo evidenciamos en la siguente tabla:
desviaciones <- tapply(pct$residuals, genero, sd)
round(desviaciones,3)
## Hombre Mujer
## 4.042 3.672
Para obtener una orientación sobre la homocedasticidad, comparamos la desviación máxima con la mínima:
round(max(desviaciones) / min(desviaciones),3)
## [1] 1.101
Para verificar la homocedasticidad usaremos la prueba de Bartlett, este estadístico sigue \(\chi^2_{\alpha,I-1}\) grados de libertad.
bartlett.test(pct$residuals ~ genero)
##
## Bartlett test of homogeneity of variances
##
## data: pct$residuals by genero
## Bartlett's K-squared = 0.2953, df = 1, p-value = 0.5868
El valor crítico es:
bartlett.test(pct$residuals ~ genero)[1]
## $statistic
## Bartlett's K-squared
## 0.2953031
El valor teórico:
qchisq(0.05, 2-1, lower.tail = F)
## [1] 3.841459
Dado que 0.29 < 3.84, concluimos que hay presencia de homocedasticidad, es decir, las varianzas son iguales entre hombres y mujeres.
Ya que es importante que estos supuestos se cumplan para obtener resultados confiables en el análisis ANOVA, podemos concluir que hay evidencia estadísticamente significativa de igualdad en media del IMC para hombres y mujeres.
Para comprobar los resultados ya obtenidos, continuamos con la prueba no parametrica Kruskal-Wallis:
Realizamos la prueba de Kruskal-Wallis bajo el siguiente contraste:
\[ H_0: \sigma_1=\sigma_2\\ H_a:\sigma_1\neq\sigma_2\]
kruskal.test(colesterol, genero)
##
## Kruskal-Wallis rank sum test
##
## data: colesterol and genero
## Kruskal-Wallis chi-squared = 1.2165, df = 1, p-value = 0.2701
Bajo la Ho el estadístico de contraste del test de Kruskal-Wallis se distribuye como una Chi-cuadrado \(\chi_{(I-1)}\) grados de libertad (donde I es el número de grupos que disponemos). Así obtenemos el cuantil buscado:
round(qchisq(0.05, 2-1, lower.tail = F),3)
## [1] 3.841
Dado que el valor de contraste es menor que el valor del estadístico no rechazamos la hipótesis inicial, es decir los valores del estadístico > 3.841 estarán incluidos en la región de rechazo. En nuestro caso 1.2165 es menor que el valor crítico obtenido.
Si transformaramos los datos de la variable respuesta, utilizando logaritmos y después aplicaramos el test de KrusKal-Wallis al logaritmo del IMC, ¿variarian los resultados del test estadístico?
kruskal.test(log(colesterol), genero)
##
## Kruskal-Wallis rank sum test
##
## data: log(colesterol) and genero
## Kruskal-Wallis chi-squared = 1.2165, df = 1, p-value = 0.2701
Los resultados son exactamente los mismos. No se producen variaciones porque el test de Kruskal-Wallis trabaja sobre rangos, es decir, sobre ordenaciones de los valores de la variable en cada uno de los grupos. Aunque realicemos una transformación logarítmica, el orden entre los valores de la variable se mantiene y por lo tanto la transformación no afecta a los resultados del test.
set.seed(123)
split <- sample.split(pacientes,SplitRatio =0.75)
train <- subset(pacientes,split==TRUE)
test <- subset(pacientes,split==FALSE)
Procedemos a construir nuestro modelo teniendo en cuenta que EDAD,IMC,COLESTEROL Y GENERO son posibles influyentes en la variable objetivo (TAD); luego de analizar los resultados anteriores con un nivel de confianza de 0.9, obtenemos lo siguiente:
modelo <- lm(TAD ~ COLESTEROL+IMC+EDAD, data = train)
summary(modelo)
##
## Call:
## lm(formula = TAD ~ COLESTEROL + IMC + EDAD, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -16.1825 -7.1278 -0.0631 6.2906 16.3836
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 14.02851 12.73157 1.102 0.2766
## COLESTEROL 0.17416 0.03967 4.390 7.24e-05 ***
## IMC 0.62838 0.37114 1.693 0.0977 .
## EDAD 0.18693 0.18145 1.030 0.3087
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.196 on 43 degrees of freedom
## Multiple R-squared: 0.4717, Adjusted R-squared: 0.4348
## F-statistic: 12.8 on 3 and 43 DF, p-value: 4.13e-06
El valor Pr(>|t|) indica si la variable es estadisticamente significativa para el modelo, mientras más pequeña sea la probabilidad más significativa es la variable. Asi tenemos una lista de variables que podemos extraer del modelo pero no debemos quitarlas todas en conjunto, si no una a una desde la menos significativa, debido a que nos puede generar un efecto en el resto de variables.
Así, procedemos a quitar la variable EDAD pues es la menos estadisticamente significativa del modelo.Entonces:
modelo <- lm(TAD ~ COLESTEROL+IMC, data = train)
summary(modelo)
##
## Call:
## lm(formula = TAD ~ COLESTEROL + IMC, data = train)
##
## Residuals:
## Min 1Q Median 3Q Max
## -15.6583 -6.4140 -0.0572 6.7623 16.3962
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 21.74564 10.30178 2.111 0.0405 *
## COLESTEROL 0.18454 0.03839 4.807 1.82e-05 ***
## IMC 0.63222 0.37138 1.702 0.0957 .
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 8.201 on 44 degrees of freedom
## Multiple R-squared: 0.4586, Adjusted R-squared: 0.434
## F-statistic: 18.64 on 2 and 44 DF, p-value: 1.371e-06
Podemos visualizar nuestro modelo de regresión lineal trazando los residuos. La diferencia entre el valor observado de la variable dependiente y el valor predicho se denomina residual.
res <- residuals(modelo)
par(mfrow=c(1,1)) #CREA UNA PANTALLA DE UNA FILA Y UNA COLUMNA PARA GRAFICAR
hist(res,breaks=seq(-19.5,20.5,by=5),xaxt='n', xlab='Residuos', ylab='Frecuencia', col='skyblue',main="Histograma Residuos")
axis(side=1, at=seq(-19.5,20.5,by=5), labels=seq(-19.5,20.5,by=5))
plot(modelo)
res <- as.data.frame(res)
a<-c()
for(i in 1:length(res[,1])){
a[i]=res[i,]
}
shapiro.test(as.numeric(a))
##
## Shapiro-Wilk normality test
##
## data: as.numeric(a)
## W = 0.97478, p-value = 0.3975
Como en la variable res tenemos solo 47 datos usaremos la prueba de Shapiro Wilk. Obtenemos que p-valor es mayor a 0.05, por lo tanto se acepta que los residuos (res) son normales.
Probemos nuestro modelo prediciendo en nuestro conjunto de datos de prueba.
test$predicted.TAD <- predict(modelo,test)
pl1 <-test %>%
ggplot(aes(TAD,predicted.TAD)) +
geom_point(alpha=0.5) +
stat_smooth(aes(colour='black')) +
xlab('Valor Actual de TAD') +
ylab('Valor Predicho de la variable TAD')+
theme_bw()
ggplotly(pl1)
usando Root Mean Square Error, una medida estandarizada de cuán lejos estábamos con nuestros valores predichos.
error <- test$TAD-test$predicted.TAD
rmse <- sqrt(mean(error)^2)
Nuestro modelo tiene un rmse de 0.3434974.
library(PMCMR)
posthoc.kruskal.nemenyi.test(colesterol, genero, method = "Chisq")
##
## Pairwise comparisons using Tukey and Kramer (Nemenyi) test
## with Tukey-Dist approximation for independent samples
##
## data: colesterol and genero
##
## Hombre
## Mujer 0.27
##
## P value adjustment method: none
\[TAD=21.75+0.63\,IMC+0.18\,COLESTEROL+\mu\]
Este modelo tiene \(R^2=0.4586\), por lo que el logra describir un \(45.86\%\) de la variable \(TAD\).
Se ha obtenido un buen modelo que se ajusta adecuadamente a los datos reales, pero cabe notar que según investigaciones la Tensión Arterial también es causada por el estrés, consumo de sal, alcohol y nicotina; además mucho tiene que ver la herencia genética de la persona. Para un mejor modelo se recomienda analizar dichas variables, aunque la herencia y el estrés son muy difíciles de obtener y de cuantificar.