martes, 19 de agosto de 2014

Modelo de Framingham: Cálculo de riesgo cardiovascular.

En este post veremos cómo aplicar a un modelo concreto la formulación estándar de Excel y conseguir un valor. En concreto trataré de dar respuesta a la pregunta presentado por un lector, para lo cual, me he basado en la descripción del modelo colgada en la página de la Asociación de la Sociedad española de Hipertensión (ver):
...necesito calcular el riesgo cardiovascular de acuerdo a la escala de Framingham de una lista de datos de excel, pero no tengo ni idea de como armar la formula...


Desde luego, no pretende ser esta explicación, un estudio del modelo de Framingham, si no tan solo una aplicación práctica de cómo nos puede ayudar Excel a obtener ciertos valores...

Lo primero para entender el modelo de Framingham que utiliza el valor del colesterol total es conocer las variables que entrarán en juego:
1- SEXO,
2- la EDAD en años,
3- el COLESTEROL sérico en mg/dl,
4- fracción de colesterol ligado a lipoproteínas de alta densidad HDL,
5- PRESION SISTOLICA,
6- DIABETES (No-Sí), 
7- FUMADOR (No-Sí).


la fórmula que determina la probabilidad de evento cardiovascular a los 10 años según este modelo de Framingham es:
=1 - S B
siendo
S= constante función de supervivencia base a 10 años (para hombre o mujer)
B=EXP(L-G)
L=bE1 x EDAD + bE2 x EDAD2 + bC + bH + bT + bD + bF
G= función evaluada para los valores medios de las variables en el estudio (diferente para hombres o mujeres)


Veamos los diferentes parámetros/tablas plasmados en nuestra hoja de cálculo:



Fundamental para automatizar al máximo las diferentes formulaciones (sobre todo del cálculo de los parámetros), es la creación de los siguientes Nombres definidos:
B_Edad =CalculoFraminghan!$C$2:$E$4
B_Colesterol =CalculoFraminghan!$A$5:$E$10
B_HDL =CalculoFraminghan!$A$11:$E$16
B_Tension =CalculoFraminghan!$A$17:$E$23
B_Diabetes =CalculoFraminghan!$C$24:$E$26
B_Fumador =CalculoFraminghan!$C$27:$E$29

G_hombre =CalculoFraminghan!$D$31
G_Mujer =CalculoFraminghan!$E$31
S_Hombre =CalculoFraminghan!$D$33
S_Mujer =CalculoFraminghan!$E$33

rango =INDIRECTO("B_"&CalculoFraminghan!$K39)
Prima =INDIRECTO(DIRECCION(FILA(rango);COLUMNA(rango))&":"&DIRECCION(FILA(rango);COLUMNA(rango)+COLUMNAS(rango)-1))
PosCol =COINCIDIR(CalculoFraminghan!$H$10;Prima;0)

De especial interés los últimos nombres (rango, Prima y PosCol), ya que con estos automatizamos la búsqueda de los parámetros en el origen...
Con 'rango' construimos y nos referimos al rango previamente nombrado ('B_Edad', 'B_colesterol', 'B_HDL', 'B_Tension', 'B_Diabetes' y 'B_Fumador').
Con 'Prima' obtenemos el rango de celdas correspondiente a la primera fila de cada rango anterior.
Y finalmente con 'PosCol' conseguimos la posición de la columna, dentro de los rangos comentados, según el Sexo planteado en el ejercicio (celda H10).


La función general aplicada, para conseguir los coeficientes b, es la conocida BUSCARV, que la hacemos trabajar con nuestros rangos-nombres definidos.
Se ven en la imagen anterior, a modo de ejemplo, en la celda M10:
=BUSCARV(K10;rango;PosCol;1)
y en la celda M14:
=BUSCARV(H14;rango;PosCol;1)

Notemos que estamos empleando en todo caso la búsqueda aproximada!!! (cuarto argumento 1 o VERDADERO)... básico para obtener valores dentro de rangos.

El cálculo final responde a las fórmulas indicadas al inicio del post, en la celda H22 obtenemos el valor de L:
=(M10*H11)+(M11*H11^2)+M12+M13+M14+M15+M16
en H23 el valor de B:
=EXP(H22-M18)
y por último en H24 el valor o riesgo cardiovascular:
=1-M19^H23


Vemos un pequeño vídeo del funcionamiento:

Modelo de Framingham: Cálculo de riesgo cardiovascular.

11 comentarios:

  1. Pregunta: ¿Cual es la diferencia en la fórmula entre los parámetros de edad bE1 y bE2?

    ResponderEliminar
    Respuestas
    1. Hola Arévalo,
      si te fijas en la ecuación
      L=bE1 x EDAD + bE2 x EDAD2 + bC + bH + bT + bD + bF

      son dos parámetros que la componen respecto a la EDAD.
      Saludos

      Eliminar
  2. Buenas tardes. Muchas gracias por la información. Lo mio es un poco más comlejo. Estoy calculando framinghan para un grupo de 200 personas y que aparezca en la misma tabla, podrían ayudarme por favor?

    ResponderEliminar
    Respuestas
    1. Hola Jeadran,
      solo soy especialista en el uso de Excel.. por lo que entiendo de este modelo es que trabaja sobre resultados medios de una población o muestra de datos..
      asi que si trabajas sobre 200 personas tendrías que obtener los valores medios de esas 200 personas...
      Y a partir de ahí aplicar las fórmulas descritas.
      Todo salvo mejor opinión.
      Saludos

      Eliminar
  3. Hola, ¿Esta plantilla se puede descargar?.

    ResponderEliminar
    Respuestas
    1. Hola!
      lo siento... ya no dispongo del fichero.
      Trata de seguir las indicaciones y replicar el ejemplo.

      Saludos

      Eliminar
  4. hola me puedes colaborar con los porcentajes de cada variable?
    ya que estoy desarrollando una aplicacion y no dispongo de estos valores

    ResponderEliminar
    Respuestas
    1. Hola Kamilo,
      lo siento, solo dispongo de la info expuesta
      Saludos y suerte

      Eliminar
  5. Estimado, Cuales serían las medidas para decir por ejemplo :

    Entre un 10 y 30 % es Riesgo medio, o Mediano , Alto.

    Saludos y gracias por el cálculo, lejos el mejor lugar explicado, lo pasé a JavaScript y me sirvió.

    Saludos

    ResponderEliminar
    Respuestas
    1. Hola panchosaurin,
      siento no poder ayudarte, ya que las medidas las tome de un manual que me encontré y desconozco su significado exacto...
      yo solo lo utilicé para poner un ejemplo de uso aplicado de fórmulas y funciones de Excel
      :(
      Saludos y suerte!!

      Eliminar
    2. Estudié harto sobre el tema y llegué a lo que necesitaba, copio parte del algoritmo que estoy realizando donde desde 5% genero el margen de bajo. if(Porcentaje < 5){
      $("#RieCarVas").val('Bajo');
      console.log('Riego Bajo');
      }
      if(6 < Porcentaje && Porcentaje < 10){
      $("#RieCarVas").val('Ligero');
      console.log('Riego Ligero');
      }
      if(11 < Porcentaje && Porcentaje < 28){
      $("#RieCarVas").val('Medio');
      console.log('Riego Medio');
      }
      if(29 < Porcentaje && Porcentaje < 39){
      $("#RieCarVas").val('Alto');
      console.log('Riego Alto');
      }
      if(39 < Porcentaje && Porcentaje < 99){
      $("#RieCarVas").val('Muy Alto');
      console.log('Riego Muy Alto');
      }



      Gracias por la Guía, Saludos !

      Eliminar

Nota: solo los miembros de este blog pueden publicar comentarios.