Práctica 2: Estadística Descriptiva

Author

Aritz Adin

Published

16/10/2024

Descripción

En esta práctica vamos a trabajar con el fichero de datos Diabetes.

  • El fichero de datos contiene 19 variables medidas sobre 403 pacientes. Estos pacientes forman parte de un estudio con 1046 sujetos diseñado para investigar la prevalencia de la de obesidad, diabetes, y otros factores de riesgo cardiovasculares para Afroamericanos en Virginia, EEUU.

  • Según Dr John Hong, Diabetes Mellitus Tipo II está asociada con la obesidad. El índice cintura-cadera puede ser un predictor en diabetes y enfermedades de corazón.

  • Diabetes Mellitus Tipo II está también asociada con hipertensión y ambos pueden ser parte del “Síndrome X”.

  • Los 403 sujetos del estudio son aquellos a los que se les hizo un seguimiento de diabetes. La hemoglobina glicosilada \(>7.0\) se toma normalmente como diagnóstico positivo de diabetes.

El fichero puede descargarse de la web http://biostat.mc.vanderbilt.edu/wiki/Main/DataSets

Para más información ver el paper

Willems JP, Saunders JT, DE Hunt, JB Schorling. Prevalence of coronary heart disease risk factors among rural blacks: A community-based study. Southern Medical Journal 90:814-820; 1997. https://europepmc.org/abstract/med/9258308

Variables

Estas son las variables que contiene el fichero (se han eliminado alguna del fichero original y se han reemplazado algunos valores perdidos):

Variable Descripción
id Subject ID
chol Total Cholesterol (mg/dL)
stab.glu Stabilized Glucose (mg/dL)
hdl High Density Lipoprotein (mg/dL)
ratio Cholesterol / HDL ratio
glyhb Glycolsolated Hemoglobin (%)
location Buckingham or Louisa
age Age of patient (years)
gender Male or Female
height Height (inches)
weight Weight (pounds)
frame Body frame size (small, medium, large)
bp.1s First Systolic Blood Pressure (mmHg)
pb.1d First Diastolic Blood Pressure (mmHg)
waist Waistline (inches)
hip Hip measurement (inches)

1. Estadística descriptiva univariante

1.1. Descarga el fichero diabetes

diabetes <- read.table("diabetes.txt", header=TRUE, sep="", dec=".", stringsAsFactors=TRUE)
head(diabetes)
    id chol stab.glu hdl ratio glyhb   location age gender height weight  frame
1 1000  203       82  56   3.6  4.31 Buckingham  46 female     62    121 medium
2 1001  165       97  24   6.9  4.44 Buckingham  29 female     64    218  large
3 1002  228       92  37   6.2  4.64 Buckingham  58 female     61    256  large
4 1003   78       93  12   6.5  4.63 Buckingham  67   male     67    119  large
5 1005  249       90  28   8.9  7.72 Buckingham  64   male     68    183 medium
6 1008  248       94  69   3.6  4.81 Buckingham  34   male     71    190  large
  bp.1s bp.1d waist hip
1   118    59    29  38
2   112    68    46  48
3   190    92    49  57
4   110    50    33  38
5   138    80    44  41
6   132    86    36  42

1.2 ¿Cuántas variables tiene el fichero diabetes?

dim(diabetes)
[1] 403  16

1.3 ¿De qué tipo es cada variable?

str(diabetes)
'data.frame':   403 obs. of  16 variables:
 $ id      : int  1000 1001 1002 1003 1005 1008 1011 1015 1016 1022 ...
 $ chol    : num  203 165 228 78 249 248 195 227 177 263 ...
 $ stab.glu: int  82 97 92 93 90 94 92 75 87 89 ...
 $ hdl     : num  56 24 37 12 28 69 41 44 49 40 ...
 $ ratio   : num  3.6 6.9 6.2 6.5 8.9 ...
 $ glyhb   : num  4.31 4.44 4.64 4.63 7.72 ...
 $ location: Factor w/ 2 levels "Buckingham","Louisa": 1 1 1 1 1 1 1 1 1 1 ...
 $ age     : int  46 29 58 67 64 34 30 37 45 55 ...
 $ gender  : Factor w/ 2 levels "female","male": 1 1 1 2 2 2 2 2 2 1 ...
 $ height  : num  62 64 61 67 68 71 69 59 69 63 ...
 $ weight  : num  121 218 256 119 183 190 191 170 166 202 ...
 $ frame   : Factor w/ 3 levels "large","medium",..: 2 1 1 1 2 1 2 2 1 3 ...
 $ bp.1s   : num  118 112 190 110 138 ...
 $ bp.1d   : num  59 68 92 50 80 ...
 $ waist   : num  29 46 49 33 44 36 46 34 34 45 ...
 $ hip     : num  38 48 57 38 41 42 49 39 40 50 ...

1.4 ¿Cuántas categorías tiene la variable frame?

levels(diabetes$frame)
[1] "large"  "medium" "small" 

1.5 Obtén una tabla de frecuencias absolutas y relativas para la variable frame.

table(diabetes$frame)

 large medium  small 
   103    196    104 
table(diabetes$frame)/nrow(diabetes)

    large    medium     small 
0.2555831 0.4863524 0.2580645 

1.6 Realiza una representación gráfica adecuada para la variable frame. ¿Qué información obtienes?

X <- table(diabetes$frame)

# Diagrama de barras
barplot(X, xlab="Frame", ylab="Frecuencias abs.", col=topo.colors(3))
legend("topright", legend=levels(diabetes$frame), fill=topo.colors(3))

# Diagrama de sectores
pie(X, labels=names(X), col=topo.colors(3))
legend("topleft", legend=levels(diabetes$frame), fill=topo.colors(3))

1.7 Calcula la moda de la variable frame. ¿Qué significa?

1.8 ¿Qué representaciones gráficas te parecen adecuadas para la variable chol?

1.9 Realiza un histograma y un diagrama de cajas de la variable chol. ¿Qué información obtienes de ellos?

par(mfrow=c(1,2),pty="s")

hist(diabetes$chol, nclass="scott", col="cyan", main="Histograma", xlab="Colesterol")

boxplot(diabetes$chol, col="pink", main="Diagrama de caja", xlab="Colesterol")

1.10 A la vista del diagrama de cajas y del histograma de la variable chol, qué puedes decir acerca de su simetría? ¿Qué crees que será mayor, la media o la mediana?

1.11 Calcula el coeficiente de asimetría, la media y la mediana de la variable chol.

summary(diabetes$chol)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   78.0   179.0   204.0   207.8   230.0   443.0 
library(PASWR2)
Cargando paquete requerido: lattice
Cargando paquete requerido: ggplot2
eda(diabetes$chol)

Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
 403.000    0.000   78.000  179.000  207.846  204.000  205.903  230.000 
     Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
 443.000   44.390 1970.494    2.211   51.000  365.000    2.558    0.924 
SW p-val 
   0.000 

1.12 Calcula el mínimo, el máximo, los cuartiles y la desviación típica de la variable chol. ¿Entre qué valores se encuentra el 25% de las personas con el colesterol más alto? ¿Y el 75% de las personas con el colesterol más bajo? ¿Qué puedes decir acerca de la dispersión de la variable?¿ Dónde hay más dispersión, en el 25% de las personas con mayor colesterol o en el 25% de las personas con colesterol más bajo?

1.13 Calcula el coeficiente de curtosis de la variable chol. ¿Qué indica?

1.14 Según el diagrama de cajas, ¿existe alguna observación atípica? ¿Alguna de ellas es un valor extremo?

b <- boxplot(diabetes$chol)

b$out
[1]  78 443 318 347 342 404 307 337 322
## Para calcular valores extremos, debemos tipificar la variable ##
z.chol <- (diabetes$chol-mean(diabetes$chol))/sd(diabetes$chol)

pos <- which(z.chol< -3 | z.chol>3)
diabetes$chol[pos]
[1] 443 347 342 404

1.15 ¿Cuántos hombres y cuántas mujeres hay en la muestra?

table(diabetes$gender)

female   male 
   234    169 

1.16 ¿Cuántas personas residen en Buckingham? ¿Cuántas en Louisa?

table(diabetes$location)

Buckingham     Louisa 
       200        203 

1.17 ¿Puedes calcular la media y la mediana de la variable location?

1.18 Realiza un diagrama de cajas de la variable chol según las categorías de la variable frame.

boxplot(chol~frame, col=cm.colors(3), data=diabetes)

1.19 Realiza un diagrama de cajas de la variable chol según las categorías de la frame y la variable gender.

boxplot(chol~frame+gender, col=cm.colors(3), data=diabetes)

1.20 Calcula la media, mediana, la desviación típica y los cuartiles de la variable chol según las categorías de la variable frame?

tapply(diabetes$chol, diabetes$frame, summary)
$large
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
   78.0   181.5   206.0   208.0   231.5   347.0 

$medium
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  115.0   181.0   206.5   213.2   239.2   443.0 

$small
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  118.0   169.5   196.0   197.6   219.2   307.0 
tapply(diabetes$chol, diabetes$frame, sd)
   large   medium    small 
43.25211 46.87484 38.95477 

1.21 Realiza un histograma de la variable chol según las categorías de la variable frame y la variable gender.

histogram( ~ chol | frame*gender, xlab="Colesterol", type="density", data=diabetes)

1.22 Calcula la media, la mediana, los cuartiles y la desviación típica de la variable glyhb. Explica cómo está de dispersa utilizando el histograma, el diagrama de cajas, los cuartiles y la desviación típica.

eda(diabetes$glyhb)

Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
 403.000    0.000    2.680    4.390    5.590    4.870    5.313    5.590 
     Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
  16.110    2.206    4.867    0.110    1.200   13.430    5.252    2.266 
SW p-val 
   0.000 
par(mfrow=c(1,2),pty="s")
hist(diabetes$glyhb, nclass="scott", col="cyan")
boxplot(diabetes$glyhb, col="pink")

1.23 Compara la dispersión de las variables chol y glyhb. ¿Qué variable tiene la desviación típica más alta? ¿Puedes concluir que aquella variable con la desviación típica más alta es la más dispersa? ¿Por qué? ¿Qué medida crees que es la más adecuada?

eda(diabetes$chol)

Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
 403.000    0.000   78.000  179.000  207.846  204.000  205.903  230.000 
     Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
 443.000   44.390 1970.494    2.211   51.000  365.000    2.558    0.924 
SW p-val 
   0.000 
eda(diabetes$glyhb)

Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
 403.000    0.000    2.680    4.390    5.590    4.870    5.313    5.590 
     Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
  16.110    2.206    4.867    0.110    1.200   13.430    5.252    2.266 
SW p-val 
   0.000 
CV.col <- sd(diabetes$chol)/mean(diabetes$chol)
CV.col
[1] 0.213573
CV.glyhb <- sd(diabetes$glyhb)/mean(diabetes$glyhb)
CV.glyhb
[1] 0.394656

1.24 Considera la variable chol por sexo. Selecciona el hombre y la mujer con mayor nivel de colesterol. ¿Cuál de los dos destaca más en comparación a la media de su grupo?

pos <- which(diabetes$gender=="male")
chol.male <- diabetes[pos,"chol"]

pos <- which(diabetes$gender=="female")
chol.female <- diabetes[pos,"chol"]

x <- max(chol.male)
x
[1] 404
y <- max(chol.female)
y
[1] 443
x.tipif <- (x-mean(chol.male))/sd(chol.male)
x.tipif
[1] 4.340132
y.tipif <- (y-mean(chol.female))/sd(chol.female)
y.tipif
[1] 5.36182

1.25 Crea una nueva variable denominada ratioWH definida como el cociente de la variable waist y la variable hip (waist/hip)

diabetes$ratioWH <- diabetes$waist/diabetes$hip

1.26 Dibuja un histograma y un diagrama de cajas de la variable ratioWH.

par(mfrow=c(1,2),pty="s")
hist(diabetes$ratioWH,nclass="scott",col="cyan")
boxplot(diabetes$ratioWH,col="pink")

1.27 Calcula el mínimo, el máximo, los cuartiles y la desviación típica de la variable ratioWH. ¿Entre qué valores se encuentra el 25% de los valores más altos? ¿Y el 75% de los valores más bajos?

eda(diabetes$ratioWH)

Size (n)  Missing  Minimum   1st Qu     Mean   Median   TrMean   3rd Qu 
 403.000    0.000    0.682    0.830    0.881    0.881    0.879    0.925 
     Max    Stdev      Var  SE Mean   I.Q.R.    Range Kurtosis Skewness 
   1.143    0.072    0.005    0.004    0.095    0.461    0.644    0.383 
SW p-val 
   0.002 
summary(diabetes$ratioWH)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
 0.6818  0.8298  0.8806  0.8809  0.9250  1.1429 

2. Tablas de doble entrada

2.1 ¿Cuántos hombres y cuántas mujeres hay en la localización Buckingham? ¿Cuántos en Louisa?

2.2 ¿Qué porcentaje de personas en la muestra tienen un body frame small y además son de Buckingham?

2.3 Dibuja un diagrama de barras donde representes las frecuencias de la variable location para cada una de las categorías de la variable frame?

2.4 Forma una tabla de doble entrada cruzando las variables gender y frame. ¿Cuántas mujeres tienen un body frame medium?

Y <- table(diabetes$gender,diabetes$frame)
Y  
        
         large medium small
  female    42    123    69
  male      61     73    35

2.5 Qué porcentaje de hombres tienen un body frame large?

prop.table(Y)
        
              large     medium      small
  female 0.10421836 0.30521092 0.17121588
  male   0.15136476 0.18114144 0.08684864
prop.table(Y,1)
        
             large    medium     small
  female 0.1794872 0.5256410 0.2948718
  male   0.3609467 0.4319527 0.2071006

3. Covarianza y correlación

3.1 Realiza un diagrama de dispersión de las variables weight y waist. ¿Crees que existe relación lineal entre ambas variables? Calcula la covarianza y el coeficiente de correlación lineal.

plot(diabetes$weight,diabetes$waist)
abline(lm(waist ~ weight, data=diabetes), col="red")

cov(diabetes$weight,diabetes$waist)
[1] 194.8847
cor(diabetes$weight,diabetes$waist)
[1] 0.8463617

3.2 Realiza un diagrama de dispersión de las variables chol y weight. ¿Crees que existe relación lineal entre ambas variables? Calcula la covarianza y el coeficiente de correlación lineal.

plot(diabetes$weight, diabetes$chol)
abline(lm(chol ~ weight, data=diabetes), col="red")

cov(diabetes$chol,diabetes$weight)
[1] 118.4692
cor(diabetes$chol,diabetes$weight)
[1] 0.06623929

3.3 Selecciona las personas del condado de Buckingham y realiza un diagrama de dispersión de las variables waist y hip. ¿Crees que existe relación lineal entre ambas variables? Calcula la covarianza y el coeficiente de correlación lineal.

pos <- which(diabetes$location=="Buckingham")
diabetes.B <- diabetes[pos,]

plot(diabetes.B$waist,diabetes.B$hip)
abline(lm(hip ~ waist, data=diabetes.B), col="red")

cov(diabetes.B$waist,diabetes.B$hip)
[1] 32.66462
cor(diabetes.B$waist,diabetes.B$hip)
[1] 0.854653

3.4 Selecciona las mujeres con body frame medium y realiza un diagrama de dispersión de las variables bp.1s y age. ¿Crees que existe relación lineal entre ambas variables? Calcula la covarianza y el coeficiente de correlación lineal.

pos <- which(diabetes$gender=="female" & diabetes$frame =="medium")
datos <- diabetes[pos,]

plot(datos$age,datos$bp.1s)
abline(lm(bp.1s ~ age, data=diabetes.B), col="red")

cov(datos$bp.1s,datos$age)
[1] 237.8738
cor(datos$bp.1s,datos$age)
[1] 0.5473436

A fancy way of visualizing correlation a matrix

library(corrplot)
corrplot 0.94 loaded
diabetes.X <- diabetes[,c("chol","stab.glu","hdl","glyhb","age","height","weight","bp.1s","bp.1d","waist","hip")]
cor.matrix <- cor(diabetes.X)

corrplot(cor.matrix, method="circle", type="upper")

corrplot(cor.matrix, method="number", type="upper")

EJERCICIOS: Para resolver en clase

Cruza las variables gender y frame y responde a las siguientes preguntas

  • ¿Cuántas mujeres tienen body frame large?
  • ¿Qué porcentaje de mujeres tienen body frame large?
  • ¿Cuál es el porcentaje de hombres con body frame small?
  • ¿Qué porcentaje de pacientes con body frame medium son hombres?

EJERCICIOS A ENTREGAR

Una Organización de Salud busca identificar qué factores de los pacientes están más asociados con la remisión del cáncer de pulmón tras el tratamiento, en el marco de un estudio más amplio sobre los resultados del tratamiento y la calidad de vida de los pacientes con esta enfermedad.

El archivo patients.txt contiene las siguientes variables medidas sobre un conjunto de datos de 8.525 pacientes.

  • remission: response variable (0=no, 1=yes)

  • Age: age of the patient (in years)

  • IL6: Interleukin-6 concentration in blood (pg/ml)

  • CRP: C-reactive protein concentration in blood (mg/dl)

  • LengthofStay: duration of a patient’s hospital stay (in weeks)

  • CancerStage: lung cancer stage (I, II, III or IV)

  • Smoking: is the patient a smoker? (1=never, 2=former, 3=current)

  • ID.hospital: ID of the hospital

patients <- read.table(file="patients.txt", header=T, stringsAsFactors=T)

head(patients)
  remission Age    IL6   CRP LengthofStay CancerStage Smoking ID.hospital
1         0  65  3.699 8.086            6          II  former           1
2         0  54  2.627 0.803            6          II  former           1
3         0  53 13.896 4.034            5          II   never           1
4         0  41  3.008 2.126            5           I  former           1
5         0  47  3.891 1.349            6          II   never           1
6         0  52  1.418 2.195            5           I   never           1

En primer lugar, selecciona los pacientes asociados a tu código de hospital (ID.hospital) e indica cuántos pacientes pertenecen a dicho hospital.

Por ejemplo:

pos <- which(patients$ID.hospital=="1")
datos <- patients[pos,]

str(datos)
'data.frame':   252 obs. of  8 variables:
 $ remission   : int  0 0 0 0 0 0 0 0 0 0 ...
 $ Age         : int  65 54 53 41 47 52 54 47 54 51 ...
 $ IL6         : num  3.7 2.63 13.9 3.01 3.89 ...
 $ CRP         : num  8.086 0.803 4.034 2.126 1.349 ...
 $ LengthofStay: int  6 6 5 5 6 5 4 5 6 7 ...
 $ CancerStage : Factor w/ 4 levels "I","II","III",..: 2 2 2 1 2 1 2 2 2 2 ...
 $ Smoking     : Factor w/ 3 levels "current","former",..: 2 2 3 2 3 3 1 2 2 3 ...
 $ ID.hospital : int  1 1 1 1 1 1 1 1 1 1 ...

El hospital “1” contiene 252 pacientes.

1) Realiza un histograma y un diagrama de cajas de la variable IL6. ¿Qué puedes decir acerca de la simetría y la dispersión de la variable?

2) Calcula la media, mediana, cuartiles, desviación típica, coeficientes de asimetría y de curtosis, y los coeficientes de variación. Indica sus unidades e interpreta los estadísticos (en aquellos casos que sea posible).

3) Dibuja un histograma y un diagrama de cajas en función de la variable CancerStage. Interpreta los gráficos obtenidos.

4) Realiza un diagrama de dispersión de las variables IL6 y CRP. ¿Crees que existe relación lineal entre ellas? Calcula e interpreta la covarianza y el coeficiente de correlación lineal (indica sus unidades).

5) Selecciona el paciente fumador (never) y ex-fumador (former) con valores más bajos en la variable CRP. ¿Cuál de los dos pacientes destaca más en comparación a la media de su grupo? Justifica la respuesta.