En esta sesión vamos a trabajar en los siguientes objetivos de aprendizaje:
En este script vamos a trabajar con la misma base de datos utilizada en el artículo: “Machine learning in medicine: Performance calculation of dementia prediction by support vector machines (SVM)”, publicado en 2019 por Gopi Battineni, Nalini Chintalapudi, y Francesco Amenta. Quienes usan la base de datos pública llamada OASIS-2.
El artículo y repositorios se pueden consultar en:La base de datos en cuestión, tiene información clínica, socio-demográfica, datos de rendimiento cognitivo y datos longitudinales de imagen cerebral por resonancia magnética de 150 participantes diestros; con, o sin demencia, con edades entre 60 y 96 años. Las variables contenidas en la base de datos (OASIS-2) son:
NOTA: para abrir un chunk de R el atajo es: ctrl + alt + i
Para eachar un ojo a mi base de datos puedo usar el comando View()
❓
RETO: ¿Cuántas variables y cuantos registro tenemos?
RETO: ¿Cuántos NAs tengo?
En nuestro ejemplo tenemos una base de datos tabular, o conjunto de datos tabulares. Aquí la información se estructura de la siguiente manera, en cada renglón tenemos un caso u observación, y en cada columna registramos los datos de una, y solo una variable.
En términos generales, la escala de medición en la cual están registrados los datos de cada variable, para cada sujeto, nos indican el tipo de valor o dato que tengo registrado.
Las escalas de medición nos permiten organizar los datos en orden jerárquico, a continuación vamos a describirlas desde la más “simple” a la más “completa”.
Fuentes:
Corresponde al nivel de medición “más débil”, aquí usamos símbolos para identificar los grupos a los que pertencen nuestras observaciones. Por ejemplo, registremos el color favorito de quienes asisten a este taller.
En esta escala solo podemos aplicar los operadores matemáticos \(=\) y \(\neq\); además podemos agrupar y calcular la moda.
Si en una escala categórica, resulta que, podemos organizar las categorías de acuerdo a una jerarquía dictada por el operador \(>\), entonces tenemos una escala ordinal. Un ejemplo muy común es la escala likert.
Si a cada persona le pedimos que nos diga qué tanto le gusta el chocolate, de acuerdo a las siguientes opciones: 3 = me gusta mucho, 2 = me gusta poco, 1 = no me gusta. Entonces tenemos una escala de intervalo.
En esta escala podemos aplicar los operadores \(>\) y \(<\) para ordenar las respuestas. También podemos calcular la mediana.
😱
IMPORANTE: ¿Podemos estar segurxs que, la distancia entre “me gusta poco” a “me gusta mucho”, es igual entre todxs nuetrxs sujetos?
RETO: responde a la pregunta anterior…
Si, en una escala ordinal, resulta que, podemos conocer el intervalo (i.e., distancia) entre categorías. En este caso tendremos una escala de intervalo. Importante: en esta escala, el punto cero y la unidad de medidas son arbitrarios. El ejemplo más común que tenemos es la temperatura medida en grados fahrenheit o en grados celcius; el cero es arbitrario y tenemos dos unidades de medida. No obstante, ambas escalas tienen la misma cantidad y la misma clase de información.
NOTA: la razón entre dos intervalos es independiente de la unidad de medida y del punto cero, pero, el cero y la unidad de medida son arbitrarios. Entonces, unidades diferentes arrojarán razones diferentes.
A diferencia de las escalas anteriores, en la escala de intervalo, sí podemos aplicar los operadores matemáticos \(+\) y \(-\). Y ya podemos calcular la media aritmética.
data.frame(Sujetos_ID=c(1:4),
Temperatura_corporal_celciuls = c(36.5, 37.2, 38.0, 37.1),
Temperatura_corporal_fahrenheit = c(97.7, 98.96, 100.4, 98.78)
)
Si una escala de intervalo tiene un punto cero absoluto o verdadero, entonces tendremos una escala de razón, porque, la razón (ratio) entre dos puntos, es independiente de la unidad de medida.
Un buen ejemplo es la medición de la masa, sin importar si medimos en kilogramos o en libras, existe un zero verdadero o absoluto. Y la razón entre dos pesos es la misma, sin importar que lo midamos en kilogramos o en libras.
En otras palabras, las razones (ratios) entre dos valores serán iguales pese que se hayan medido en unidades diferentes. A datos medidos en esta escala le podemos aplicar la media arítmética y también la geométrica.
data.frame(Sujetos_ID=c(1:4),
Peso_kgs = c(62.5, 78.4, 60.1, 82.4),
Peso_lbs = c(137.79, 172.84, 132.5, 181.66)
)
En la “medida” de los posible, siempre nos gustaría tener una escala de razón.
RETO: ¿Estas son las únicas escalas de medición?
Fuente: https://bookdown.org/chescosalgado/intro_r/tipos-y-estructuras-de-datos-en-r.html
Normalmente tenemos los siguientes tipos de datos
Tipo de dato | Descripción |
---|---|
Numeric | Números decimales |
Integer | Números enteros |
Character | Cadenas de texto |
Complex | Números complejos |
Logical | Valor verdadero o falso |
Factor | Agrupación por categorías y niveles |
Y, la pregunta del millón es:
¿Qué formato o tipo de datos deben tener cada una de las escalas de medición descritas anteriormente
ACTIVIDAD: Completa el tipo de datos
RETO: ¿Cómo podemos diferenciar el tipo de datos de una variable en una escala ordinal en comparación con una variable de razón que solamente tenga números enteros?
Ahora, con ayuda de la función str() revisaremos qué formato o tipo de datos tiene cada una de nuestras variables.
## 'data.frame': 373 obs. of 15 variables:
## $ Subject.ID: chr "OAS2_0001" "OAS2_0001" "OAS2_0002" "OAS2_0002" ...
## $ MRI.ID : chr "OAS2_0001_MR1" "OAS2_0001_MR2" "OAS2_0002_MR1" "OAS2_0002_MR2" ...
## $ Group : chr "Nondemented" "Nondemented" "Demented" "Demented" ...
## $ Visit : int 1 2 1 2 3 1 2 1 2 3 ...
## $ MR.Delay : int 0 457 0 560 1895 0 538 0 1010 1603 ...
## $ M.F : chr "M" "M" "M" "M" ...
## $ Hand : chr "R" "R" "R" "R" ...
## $ Age : int 87 88 75 76 80 88 90 80 83 85 ...
## $ EDUC : int 14 14 12 12 12 18 18 12 12 12 ...
## $ SES : int 2 2 NA NA NA 3 3 4 4 4 ...
## $ MMSE : int 27 30 23 28 22 28 27 28 29 30 ...
## $ CDR : num 0 0 0.5 0.5 0.5 0 0 0 0.5 0 ...
## $ eTIV : num 1987 2004 1678 1738 1698 ...
## $ nWBV : num 0.696 0.681 0.736 0.713 0.701 ...
## $ ASF : num 0.883 0.876 1.046 1.01 1.034 ...
ACTIVIDAD: Revisa que, cada variable esté declarada en el formato o tipo de datos adecuado.
RETO: Si el tipo de los datos no es el adecuado para algunas variables, entonces formatea al tipo correcto.
TIP: Consulta la descripción de cada variable en la Introducción.
TIP: Recuerda verificar que tus variables tienen declarado el tipo de datos correcto.
A continuación, hagamos una exploración visual inicial a nuestra base de datos. Este paso es indispensable para identificar errores o corroborar que nuestra base de datos corresponde a lo esperado.
## Cargando paquete requerido: ggplot2
## Registered S3 method overwritten by 'GGally':
## method from
## +.gg ggplot2
ggpairs(data = bd.demencia[,c(3,8)],
aes(color=Group,
alpha=0.6),
title = "Exploración inicial Demencia dataset")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
ggsave("Exploracion_inicial_demencia.png",
plot = last_plot(),
device = png,
width = 30,
height = 20,
units = c("cm"),
dpi = 300)
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.