Capítulo 5 Introducción a las prácticas de informática.

5.1 Programas y lenguajes.

Existen varias opciones. R es la opción elegida, por estar ganando fama en los últimos años y ser de código abierto, frente a otras ocpiones previas que requieres de licencias al ser de código privativo.

R está orientado a la estadística en general, aunque su uso el epidemiología y bioestadística es cada vez más frecuente.

5.2 Sobre R

R es un lenguaje de programación oreintado a objectos. Es de código abierto, código que, al igual que la documentación y más información, está disponible en la página web oficial.

5.3 Familarizándose con la CLI de R.

  • Operadores habituales de otros lenguajes.
    • El boolean se indíca con mayúsculas (con indicar la primera letra basta).
    • Índice empieza a contar desde 1.
    • as.integer() convierte variables a tipo número.
    • Módulo se indica con doble *: %%
    • Y la división de int con %/%
  • Asignación de variables con <-.
  • Las variables se pueden obtener con la función ls().
  • Para eliminar varaibles del entorno, se usa la función rm().
str <- "This is a text var"
num <- 23*3+log(10)*2^(-2)-sqrt(3)
bool <- T
numerized_bool <- as.integer(bool)

# Log data
cat('str: ', str, '\n')
## str:  This is a text var
cat('num: ', num, '\n')
## num:  67.8436
cat('bool: ', bool, '\n')
## bool:  TRUE
cat('numerized_bool: ', numerized_bool, '\n')
## numerized_bool:  1

5.4 Vectores

  • El array de 1d se llama vector, se crea con la función c().
  • Se le puede asignar una etiqueta a cada valor con names()
  • Se puede operar con números directamente.
  • SUmar dos vectores x,y suma los valores de x_i y_i.
v01 <- c(1,2,3,4,5)
names(v01) <- c("a", "b", "c", "d", "e")

cat('v01: ', v01, '\n')
## v01:  1 2 3 4 5

5.5 Rcmdr, la interfaz gráfica para R.

5.5.1 Basic installation

Install with install.packages() and load with library().

install.packages("Rcmdr")
library("Rcmdr") # and load 

5.5.2 Creating a dataset

Usando la interfaz. Se pude crear, export y guardar como archivo .RData.

También se puede cargar bases de datos y editarlos.

5.6 Archivos de la práctica 01:

  • Framingham heart studio via Campus virtual
  • Base de datos propia con 15 filas y columnas sexo, edad, peso y altura.

Es últil un pequeño script de python para hacer esto:

from random import randrange
import os

os.chdir('C:/some/path/')

with open('data.txt', 'w+') as f:
  i = 0
  f.write("sexo,edad,peso,altura")
  while i<15:
    f.write(f'{"hombre" if randrange(2) < 1 else "mujer"},{randrange(18,40)},{randrange(65,90),randrange(160,195)}')
    i+=1

5.7 Deberes.

5.7.1 Diapositiva 51

El número de días necesarios por 10 pacientes para recuperarse de 10 infecciones de iguales características han sido: 21, 32, 15, 59, 60, 61, 64, 60, 71, y 80 días. Calcula la media, mediana, moda, varianza y desviación típica.

slide51<-c(21, 32, 60, 15, 59, 61, 64, 60, 
71, 80)

median(slide51) # median
## [1] 60
mean(slide51)   # mean
## [1] 52.3
var(slide51)    # variance
## [1] 475.1222
sd(slide51)     # standard deviation
## [1] 21.7973

Para calcular la moda, al no haber una función nativa en R:

mode <- function(x) {
   # Copy x_i
   x_i <- unique(x)
   # Count all the matches of d with an x_i
   tab <- tabulate(match(x, x_i))
   # Return the highest
   x_i[which.max(tab)]
}

mode(slide51)
## [1] 60

Los precios de una analítica en 10 laboratorios de análisis clínicos de una ciudad son: 25, 25, 26, 24, 30, 25, 29, 28, 26, y 27 Euros. Halla la media, moda, mediana, y representar el diagrama de barras y el diagrama de caja.

slide51 <- c(25, 25, 26, 24, 30, 25, 29, 28, 26, 27)

median(slide51) # median
## [1] 26
mean(slide51)   # mean
## [1] 26.5
var(slide51)    # variance
## [1] 3.833333
sd(slide51)     # standard deviation
## [1] 1.95789
mode(slide51)   # mode
## [1] 25

Las gráficas correspondientes:

barplot(slide51, main="Precio de pruebas en diferentes laboratorios", ylab="Precio €")

boxplot(slide51, main="Precio de pruebas en diferente laboratorios", ylab="Precio €")

5.8 Diapositiva 52

Teniendo en cuenta los siguientes datos de la tensión arterial sistólica (TAS) en una muestra de 70 enfermos de corazón:

  • Calcula el valor de los percentiles: 18, 40, 60.

  • Calcula el porcentaje de individuos con una TAS mayor que 160.

  • Calcula el Rango Percentil de 145 e indica qué significa.

  • Q1

slide52<-rep(110, times=1)
slide52<-append(slide52, rep(115, times=4), 1)
slide52<-append(slide52, rep(120, times=10), 1)
slide52<-append(slide52, rep(125, times=7), 1)
slide52<-append(slide52, rep(130, times=10), 1)
slide52<-append(slide52, rep(135, times=5), 1)
slide52<-append(slide52, rep(140, times=7), 1)
slide52<-append(slide52, rep(143, times=1), 1)
slide52<-append(slide52, rep(145, times=3), 1)
slide52<-append(slide52, rep(150, times=5), 1)
slide52<-append(slide52, rep(160, times=4), 1)
slide52<-append(slide52, rep(165, times=3), 1)
slide52<-append(slide52, rep(170, times=5), 1)
slide52<-append(slide52, rep(175, times=2), 1)
slide52<-append(slide52, rep(180, times=2), 1)
slide52<-append(slide52, rep(185, times=1), 1)

quantile(slide52, c(.18, .4, .6))
## 18% 40% 60% 
## 120 130 140
# Based on https://stackoverflow.com/a/11149234/11688263
cbind( Freq=table(slide52), Cumul=cumsum(table(slide52)), relative=prop.table(table(slide52)), FrecCumu=cumsum(prop.table(table(slide52))))
##     Freq Cumul   relative   FrecCumu
## 110    1     1 0.01428571 0.01428571
## 115    4     5 0.05714286 0.07142857
## 120   10    15 0.14285714 0.21428571
## 125    7    22 0.10000000 0.31428571
## 130   10    32 0.14285714 0.45714286
## 135    5    37 0.07142857 0.52857143
## 140    7    44 0.10000000 0.62857143
## 143    1    45 0.01428571 0.64285714
## 145    3    48 0.04285714 0.68571429
## 150    5    53 0.07142857 0.75714286
## 160    4    57 0.05714286 0.81428571
## 165    3    60 0.04285714 0.85714286
## 170    5    65 0.07142857 0.92857143
## 175    2    67 0.02857143 0.95714286
## 180    2    69 0.02857143 0.98571429
## 185    1    70 0.01428571 1.00000000

Limpiamos el cuarto:

rm(list = ls()) 
# dev.off()
cat("\014")