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
arrayde 1d se llamavector, se crea con la funciónc(). - 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.6 Archivos de la práctica 01:
- Framingham heart studio via Campus virtual
- Base de datos propia con 15 filas y columnas
sexo,edad,pesoyaltura.
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+=15.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")