Práctica 1 Fundamentos de Minería de Datos y Big Data

En esta práctica nos preguntamos qué nivel de colesterol aumenta la probabilidad de que suframos una enfermedad coronaria. Para ello, tenemos una base de datos obtenida del repositorio de “machine learning” de UCLA: https://archive.ics.uci.edu/dataset/45/heart+disease. Puedes consultar qué variables contiene y los posibles valores que pueden tomar. Como verás, tiene “missing values”. Perio vayamos por partes:

Ejercicio 1

Busca las variables con valores omitidos y trata de imputar un valor usando alguna de las técnicas aprendidas en clase.

Ejercicio 2

1.- Discute si los valores de las variables parecen razonables (lo que desconozcas lo tendrás que buscar), y cómo de representativa es la muestra disponible.

2.-Analiza de manera descriptiva/visual qué dicen los datos sobre la relación entre tener una enfermedad coronaria y el nivel de colesterol.

Ejercicio 3

Como habrás visto, dicha relación no parece muy clara . Aunque es bien sabido el impacto del colesterol en la salud cardiaca. ¿Ocultan algo los datos? ¿Qué crees que puede estar pasando?

Ejercicio 4

Nuestra sospecha es que la edad es un factor “confusor”. Para ello, escribe un script en R que obtenga el coeficiente de la regresión logística que predice probabilidad de enfermedad cardiaca frente a nivel de colesterol para distintos grupos de edad. Como la muestra no es grande, recomendamos hacer una ventana de edades (empezamos con toda la muestra y vamos eliminando el más joven a cada paso). Haz un gráfico y analiza a partir de qué edad el modelo detecta una relación que no contradice la evidencia médica. Piensa, entonces, si este modelo se puede generalizar a la población o debería hacerse específico para una subpoblación

Pista: se muestra un posible script del que se han omitido algunas indicaciones

```{r, eval=F, echo=T}

coef<-vector() #almacena los distintos coeficientes age_v<-seq(?,?,?) #genera una secuencia de edades

for (i in 1:length(age_v)) {

heart_sub<-subset(?,age>age_v[i]) #elige la submuestra correspondiente model <- glm( target ~chol, data = ?, family = binomial) #estima el logit coef[i]<-model$coefficients[?] #almacena el coeficiente

}

plot(age_v,coef) #realiza el gráfico


## Ejercicio 5

Vuelve a pensar tus respuestas dadas en el ejercicio 2 y en el ejercicio 3.

Para los grupos de edad donde el modelo detecta que el colesterol tiene un efecto negativo, haz un gráfico que muestre la probabilidad de enfermedad cardiaca condicionado al nivel de colesterol.

**Pista: se muestra un posible script del que se han omitido algunas indicaciones**

```{r, eval=FALSE}
age_v2<-seq(?,65,1) #se introduce una secuencia de edades
cholesterol<-seq(?,?,1) #se introduce una secuencia de valores de coloesterol
pred<-matrix(0,length(age_v2),length(cholesterol))#se crea una matriz para almacenar las prediicciones
data_chol<-data.frame(chol=cholesterol) # se crea el vector como input para predecir
for (i in 1:length(age_v2))
{
  
  heart_sub<-subset(?,age>age_v2[i]) 
  model <- glm( target ~chol, data = ?, family = binomial)
  pred[i,]<-predict(model,newdata=?, type="response")
}

row.names(pred)<-age_v2
colnames(pred)<-cholesterol
col_set <- rainbow(nrow(pred))

matplot(t(pred), x = seq(?,?,1),type = "b",main="Probability of heart disease at different ages",
        ylab="Probabiilty", xlab="cholesterol",col=col_set)

legend("bottomleft", inset=0.01, legend=age_v2, col=col_set,pch=15:19,
       bg= ("white"), horiz=F)

Ejercicio 6

Se suele incidir en que niveles de azúcar altos y de tensión arterial son factores de riesgo para tener enfermedad cardiaca. Discute el impacto del nivel de azúcar y de tensión arterial sobre la probabilidad de enfermedad cardiaca, así como tratar de ver la interacción de estas con el colesterol y la edad de los individuos.

Pista: se muestra un posible script para visualizar las interacciones

```{r, eval=FALSE}

#crea una variable “age_q” que divida a los individuos por grupos de edades como te parezca interesante

sugar_heart<- as.factor(ifelse(heart\(fbs==1&heart\)target==1, ‘HighSugar_Heart1’, ifelse(heart\(fbs==1&heart\)targe==0’HighSugar_Heart0’, ifelse(heart\(fbs==0&heart\)target==1, ‘LowSugar_Heart1’, ‘LowSugar_Heart0’))))

heart<-data.frame(heart,sugar_heart)

interaction.plot(x.factor = heart\(age_q, trace.factor = heart\)sugar_heart, response = heart$chol, fun = mean ,xlab=“Age”, ylab=“cholesterol”, trace.label=“Sugar and Heart Disease”, col=c(“green”,“red”,“blue”,“black”), lty=4, lwd=2.5 )

```

Ejercicio 7

Estima y discute el modelo de regresión logística que crees más lógico tras lo aprendido anteriormente. ¿Cómo has incluido las interacciones? ¿Qué grupos de individuos podrían dar lugar a predicciones contraintuitivas?