1. Introducción a R

1.1. El proyecto R y el programa

  • En el proyecto R se puede conseguir el programa, y conocer todo lo que le rodea.
  • Instala y ejecuta “R” en el equipo.
  • R Console: terminal donde programar y obtener resultados.
  • Recomendaciones:
    • Comparte el escritorio entre la consola de R y el navegador de internet con este documento.
    • La interfaz RStudio es muy conveniente, aunque aquí no la vamos a explicar.
  • Menú Archivo de la consola de R:
    • Cambiar dir...: establece la ruta para interactuar con ficheros.
    • Guardar área de trabajo: crea fichero con sesión de R (para continuación).
    • Cargar área de trabajo: carga fichero con sesión de R guardada.
  • En RStudio está dentro del menú Session.

1.2. El lenguaje de programación R

  • Como lenguaje, tiene constantes, variables, funciones, etc. y es de tipo “orientado a objetos”.
  • Una variable se define con un nombre, y se le asigna un valor igualándola a una constante (o a otra variable ya definida).
  • Las funciones que devuelven texto, lo hacen por la ventana “R Console”.
  • Las funciones que devuelven figuras, lo hacen por la ventana “R Graphics”.
  • Las funciones que piden ayuda abren el navegador de internet con la ayuda solicitada.
  • Los comentarios a partir de la almohadilla (#).
  • La función q() cierra la consola con la opción de guardar la sesión de R en un archivo, que se puede abrir posteriormente para continuar.
  • Ejemplo: copia y pega el siguente bloque en la consola de R:
# línea de comentario empieza por almohadilla
5 # la constante numérica 5
demo(graphics) # función 'demo()' ejecuta demos de librerías
help(demo) # función 'help()' devuelve ayuda
load(url('https://goo.gl/uDzU8v')) # función 'load()' carga sesión de R
ls() # función 'ls()' lista las variables definidas en la sesión 
q() # cierra R, pero te permite guardar sesión para reanudar. ¡Cancela!

1.3. R como calculadora de constantes numéricas

  • +, -, *, /, ^, … operaciones matemáticas
  • sqrt(), log(), exp(), sin(), abs(), … otras funciones matemáticas
  • Ejemplo: copia y pega el siguente bloque en la consola de R
5+3 # suma
5-3 # resta
5*3 # producto
5/3 # cociente
5/0 # sorpresa: R maneja el infinito
0/0 # sorpresa: R maneja las indeterminaciones (NaN, Not a Number)
5^3 # potencia
sqrt(5) # raíz cuadrada
exp(5) # el número "e" elevado a (función exponencial)
log(5) # logaritmo neperiano
log10(5) # logartimo en base 10
pi # el número "pi" está definido
sin(pi/2) # la función seno (ángulo en radianes)
factorial(5) # el factorial, 5!
choose(5,3) # número combinatorio (5 sobre 3)

EJERCICIO 1: Calcula los valores numéricos aproximados de \(\displaystyle{\frac{0.3 \cdot 0.15}{0.3 \cdot 0.15 + 0.2 \cdot 0.8 + 0.5 \cdot 0.12}}\), \(\displaystyle{\frac{5^6}{6!} \mathrm{e}^{-5}}\) y \(\displaystyle{\binom{20}{7} 0.4^7 0.6^{13}}\).

  • Sol.: \(0.1698113\), \(0.1462228\) y \(0.1658823\).

FIN EJERCICIO 1

2. Variable tipo vector

2.1 Creación de vectores

  • La función c() concatena constantes (y vectores) en un vector.
  • La función : crea un vector de números consecutivos.
  • Ejemplo: copia y pega el siguente bloque en la consola de R:
# Vectores de constantes numéricas
v1 = 5
v2 = 1:10
v3 = c(v1, v2, pi, -5, 0, 1/3)
v1
v2
v3
# Vectores de constantes tipo texto
# Ojo: siempre entrecomilladas, o parecerán nombres de variables
v4 = 'a'
v5 = c('b','c','d')
v6 = c(v4, v5, v5, v4, 'hola')
v4
v5
v6
# Vectores de constantes lógicas
# Ojo: sólo TRUE y FALSE
v7 = TRUE
v8 = c(TRUE,FALSE,FALSE)
v9 = c(v7, v8)
v7
v8
v9

2.2 Llamadas a funciones en R

  • Las funciones constan de un nombre seguido de paréntesis que encierran a ninguno, o uno o más argumentos separados por comas. A veces aparece el argumento ... (puntos suspensivos), que indica una cantidad indeterminada de argumentos.
  • Ejemplo:
# Función 'sample()' simula lanzamientos aleatorios de un dado abstracto
# Argumentos:
#   x: número de caras del dado
#   size: número de lanzamientos
#   replace: ¿se puede repetir resultado?
#   prob: probabilidad de cada cara (todas iguales si vale NULL)
sample(x=6, size=100, replace=TRUE, prob=NULL) # llamada completa 
sample(6, 100, TRUE, NULL) # llamada sin nombres de argumento
sample(TRUE, 6, NULL, 100) # llamada errando el orden de los argumentos
sample(100, 6, TRUE, NULL) # otra llamada errando el orden de los argumentos
sample(replace=TRUE, x=6, prob=NULL, size=100) # llamada ok 

2.3 Algunas funciones y operaciones importantes con vectores

Primeras funciones importantes de R:

  • ls() sin argumentos, da el vector de nombres de variables definidas.
  • a:b crea vector de enteros consecutivos, de a a b.
  • c(...) da un vector con los argumentos ... concatenados.
  • length(x) da la longitud del vector argumento x.
  • sum(...) SUMa las componentes de los argumentos.
  • prod(...) PRODucto de las componentes de los argumentos.
  • sort(x) da el vector argumento x reordenado de manera creciente.
  • sort(x,decreasing=TRUE) lo mismo (pero decreciente).
  • min(...) da el valor MÍNimo de los argumentos.
  • max(...) da el valor MÁXimo de los argumentos.
  • which(x) da el vector de “posiciones” donde x es TRUE. El argumento suele ser una comparación.

Las siguientes funciones/operadores actúan componente por componente, devolviendo otro vector de igual tamaño:

  • +, -, *, /, ^, … operaciones matemáticas

  • sqrt(), log(), exp(), sin(), abs(), … otras funciones matemáticas

  • <, ==, >, <=, >=, != operadores de comparación

  • &, |, xor(), ! operadores lógicos (and, or, or exclusivo, not)

  • Ejemplo: copia y pega el siguente bloque en la consola de R

ls()
1:10
10:1
v3
length(v3)
sum(v3)
prod(v3)
sort(v3)
sort(v3, decreasing=TRUE)
sqrt(v3)
v3 < 3
which(v3<3)
v3 == 5
which(v3==5)

EJERCICIO 2: Realiza las siguientes sumas:

  1. \(1 + 2 + 3 + \cdots + 1000\)
    • Sol.: \(500500\)
  2. \(1 + 2 + 4 + 8 + 16 + \cdots + 1024\)
    • Sol.: \(2047\)

FIN EJERCICIO 2

EJERCICIO 3: El vector grupo representa el grupo al que pertenece una serie de alumnos.

  1. Visualízalo en pantalla
    • Sol.: -
  2. ¿Cuántas componentes tiene?
    • Sol.: \(192\)
  3. ¿En qué posiciones del vector está la letra ‘A’?
    • Sol.: \(2, 8, 17, 21, 28, 84, 101, 108, 111, 115, 123, 136, 190, 192\)

FIN EJERCICIO 3

EJERCICIO 4: El vector nota representa la nota de un examen, de los mismos alumnos cuyo grupo se ha guardado en el vector grupo, y en el mismo orden.

  1. Visualízalo en pantalla
    • Sol.: -
  2. ¿Cuántas componentes tiene?
    • Sol.: \(192\)
  3. ¿Cuánto suman todas las notas?
    • Sol.: \(962\)
  4. ¿Cuál es la media aritmética de todas las notas?
    • Sol.: \(5.0104167\)
  5. ¿En qué posiciones están las notas mayores de \(7.0\)?
    • Sol.: \(81, 103, 120, 151\)
  6. Visualiza las notas ordenadas de menor a mayor
    • Sol.: -
  7. Visualiza las notas ordenadas de mayor a menor
    • Sol.: -
  8. ¿Cuál ha sido la nota máxima?
    • Sol.: \(7.7\)
  9. ¿En qué posición del vector está esa nota máxima?
    • Sol.: \(120\)

FIN EJERCICIO 4

3. Subvectores

v3
v3[2] # la segunda componente
v3[-2] # todo menos la segunda componente
v3[1:3] # la 1a, 2a y 3a comp.
v3[ c(2,5) ] # la 2a y la 5a componente ( ojo a la c() necesaria )
v3[ c(TRUE,TRUE,FALSE)] # 1a y 2a sí, 3a no, etc.
v3[ v3<4 ] # las comp. que cumplen la condición v3<4 (los TRUEs)
v3[ v3>1 & v3<4 ] # las comp. que cumplen  v3>1 y v3<4

# Utilidad: elegir parte de una muestra

# Suma los 3 primeros datos de v3
v3[1:3] # da los 3 primeros datos de v3
sum(v3[1:3]) # ahora los suma 
# ¿Cuántos datos de v3 son menores que 4?
v3[ v3<4 ] # da los datos de v3 que cumplen v3<4
length(v3[ v3<4 ]) # ahora los cuenta
# ¿Cuántos alumnos son del grupo A?
grupo[ grupo=='A' ] # da los datos del grupo A 
length(grupo[ grupo=='A' ]) # ahora los cuenta
# ¿Cuál ha sido la máxima nota del grupo A?
nota[ grupo=='A' ] # da las notas del grupo A
max(nota[ grupo=='A' ]) # ahora da la máxima
# ¿Cuántos alumnos del A tienen menos de 3 en la nota?
nota[ grupo=='A' & nota<3 ] # da las notas de los del grupo A y con menos de un 3
length(nota[ grupo=='A' & nota<3 ]) # ahora los cuenta

EJERCICIO 5: A partir de los vectores grupo y nota definidos:

  1. Visualiza las notas de los 10 primeros alumnos
    • Sol.: -
  2. Suma las notas de los 10 primeros alumnos del vector
    • Sol.: \(51.8\)
  3. ¿Cuántos alumnos hay del grupo ‘C’?
    • Sol.: \(39\).
  4. Suma las notas de los alumnos del grupo ‘A’
    • Sol.: \(63.6\).
  5. ¿Cuántos alumnos han aprobado?
    • Sol.: \(102\).
  6. ¿Cuántos alumnos del grupo ‘B’ han aprobado?
    • Sol.: \(12\)
  7. ¿Qué porcentaje de alumnos del grupo ‘C’ han aprobado?
    • Sol.: \(58.974359\)
  8. ¿Cuáles han sido las notas máxima y mínima del grupo ‘D’?
    • Sol.: 6.8 y 2.5. respectivamente.
  9. ¿De qué grupos son la máxima y mínima notas de toda la muestra?
    • Sol.: \(E\) y \(B\) respectivamente.
  10. Nota media de alumnos de los grupos ‘A’ y ‘B’, reunidos, teniendo en cuenta sólo a los que han aprobado.
    • Sol.: \(5.825\).

FIN EJERCICIO 5

nota2 = nota
nota
nota2
nota2[ nota < 5 ] = 'Suspenso'
nota2
nota2[ nota >= 5 ] = 'Aprobado'
nota2 

4. Estadística descriptiva de una variable con R

4.1 La muestra

  • Los datos a analizar deben estar almacenados en una variable de tipo vector.
  • Llamaremos x al vector con los datos de la muestra.
  • Pero puede tener cualquier nombre, o estar indexado con el operador corchete para usar parte de un vector.

4.2 Argumentos especiales de las funciones gráficas

  • Las funciones gráficas de R tienen argumentos comunes para especificar:
    • Título superior: main. Igualar a una cadena de texto.
    • Título inferior: sub. Igualar a una cadena de texto.
    • Etiqueta eje X: xlab. Igualar a una cadena de texto.
    • Etiqueta eje Y: ylab. Igualar a una cadena de texto.
    • Color o colores: col. Igualar a un número o nombre de colores (o un vector de números o nombres de colores). Para conocer los nombres de colores escribe colors() en la consola.
    • Forma del punto: pch. Igualar a un número entre 1 y 25. Sólo cuando la figura dibuje puntos.
  • Ejemplo: copia y pega el siguente bloque en la consola de R
plot(x=1:25, y=1:25, main='Puntos: formas y colores',
     sub='Cada punto una forma y un color', 
     xlab='Número de punto y color',
     ylab='Etiqueta eje Y', col=1:25, pch=1:25)

4.3 Estadísticas de datos cualitativos

Suponemos que x es la variable que contiene los datos.

4.3.1 Tabla de frecuencias:

  • Absolutas: table(x)
  • Relativas: table(x)/length(x)
  • Porcentajes: table(x)/length(x) * 100

4.3.2 Gráficas:

  • Diagrama de barras: barplot(height=table(x))
  • Diagrama de sectores (tarta): pie(x=table(x))

EJERCICIO 6: Escribe la tabla de frecuencias absolutas y relativas de la variable grupo (para saber cuántos datos hay de cada grupo), y haz un diagrama de barras y otro de sectores.

  • Sol.:
## grupo
##  A  B  C  D  E 
## 14 23 39 54 62
## grupo
##          A          B          C          D          E 
## 0.07291667 0.11979167 0.20312500 0.28125000 0.32291667

FIN EJERCICIO 6

4.4 Estadísticas de datos cuantitativos

Suponemos que x es la variable que contiene los datos:

4.4.1 Tabla de frecuencias:

  • Primero hay que “cortar” la recta en intervalos, y luego se pide la tabla de frecuencias de los intervalos.
  • table(cut(x, breaks))
    • x los datos
    • breaks el número de intervalos, o el vector con los extremos sucesivos
  • Ejemplo: copia y pega el siguente bloque en la consola de R
nota # los datos
table(nota) # ¡no es muy útil!
table( cut(nota, breaks=c(0,5,7.5,9,10) ) # agrupamos en intervalos

4.4.2 Estadísticos:

  • Media: mean(x)
  • Mediana: median(x)
  • Mínimo: min(x)
  • Máximo: max(x)
  • Cuantil de orden \(p\): quantile(x, prob=\(p\)) (p.ej. percentil 45 = cuantil de orden 0.45)
  • Recorrido: hay que calcularlo con su definición (max(x)-min(x)).
  • Recorrido intercuartílico: IQR(x)
  • Cuasivarianza: var(x)
  • Cuasidesviación típica: sd(x)
  • Varianza: ¡No está programada! Se puede conseguir con la operación var(x)*(length(x)-1)/length(x)
  • Desviación típica: ¡No está programada! Se puede conseguir con la operación sd(x)*sqrt((length(x)-1)/length(x))
  • Coeficiente de variación: ¡No está programado! Se puede conseguir una versión “cuasi” con la operación sd(x)/abs(mean(x)), y la versión “sin cuasi” con la operación (sd(x)*sqrt((length(x)-1)/length(x)))/abs(mean(x)).

4.4.3 Gráficos

  • Diagrama de puntos: stripchart(x) (para pocos datos)
  • Histograma: hist(x, breaks, ...)
    • x los datos
    • breaks el número de intervalos, o el vector con los extremos sucesivos
  • Diagrama de caja: boxplot(...) (se pueden poner varias muestras para comparar)

EJERCICIO 7: Escribe la tabla de frecuencias absolutas y relativas de la variable nota donde los intervalos correspondan a números enteros, es decir, \((0,1]\), \((1,2]\), \((2,3]\),…, \((9,10]\) . Dibuja el histograma con esa misma partición en intervalos. Calcula la nota media y la cuasidesviación típica, así como la mínima y máxima.

  • Sol.: Media = \(5.0104167\), cuasidesviación típica = \(1.0702037\), mínima = \(1.7\) y máxima = \(7.7\).
## 
##  (0,1]  (1,2]  (2,3]  (3,4]  (4,5]  (5,6]  (6,7]  (7,8]  (8,9] (9,10] 
##      0      1      7     27     64     64     25      4      0      0
## 
##       (0,1]       (1,2]       (2,3]       (3,4]       (4,5]       (5,6] 
## 0.000000000 0.005208333 0.036458333 0.140625000 0.333333333 0.333333333 
##       (6,7]       (7,8]       (8,9]      (9,10] 
## 0.130208333 0.020833333 0.000000000 0.000000000

FIN EJERCICIO 7

EJERCICIO 8: Calcula la nota media y la cuasidesviación típica de cada grupo.

  • Sol.: A = \(4.5428571\) y \(0.7313994\); B = \(5.1217391\) y \(1.185502\); C = \(5.2282051\) y \(1.0174656\); D = \(4.7796296\) y \(1.0347508\); E = \(5.1387097\) y \(1.1140467\).

FIN EJERCICIO 8

EJERCICIO 9: Calcula el percentil 66 de las notas de todos los alumnos, y también de los alumnos del grupo C.

  • Sol.: \(5.5\) y \(5.808\).

FIN EJERCICIO 9

EJERCICIO 10: Dibuja los diagramas de caja de las notas de cada grupo, para comparar el nivel de los grupos.

  • Sol.:

FIN EJERCICIO 10

5. Ejercicios “extra” de entrenamiento

EJERCICIO 11: Los siguientes vectores contienen datos sobre una muestra de coches americanos. Cada vector representa:

de modo que el primer datos de cada vector es del mismo coche, y así sucesivamente. Realiza las siguientes tareas de análisis de datos:

  1. ¿Cuántos coches hay en la muestra?
    • Sol.: \(32\).
  2. ¿Cuántos de los coches son automáticos?
    • Sol.: \(13\).
  3. Escribe la tabla de frecuencias del tipo de coche. ¿Qué tipo es más abundante en la muestra?
    • Sol.: \(Autom=13;Manual=19\). Es más abundante el Manual.
  4. Calcula la media aritmética y la cuasidesviación típica de la eficiencia de los coches automáticos, y de los manuales, por separado. ¿Qué tipo es más eficiente?
    • Sol.: \(24.3923077\) y \(6.1665038\), para los automáticos, y \(17.1473684\) y \(3.8339664\), para los manuales. El más eficiente es el Automático, por tener la media más alta.
  5. Dibuja un diagrama de sectores que informa sobre el número de cilindros de los coches de la muestra.
    • Sol.: -
  6. Calcula la media de la potencia de los coches automáticos de 8 cilindros.
    • Sol.: \(299.5\) CV.
  7. Calcula la media de tiempos, en recorrer el cuarto de milla, para los coches manuales de \(4\) marchas delanteras.
    • Sol.: \(20.025\) seg.
  8. ¿Qué modelo de coche tiene la mayor cilindrada de la muestra? Escribe los cinco modelos de mayor cilindrada.
    • Sol.: Cadillac Fleetwood es el de mayor cilindrada, y los otros son, Hornet Sportabout, Duster 360, Lincoln Continental, Chrysler Imperial, Pontiac Firebird.
  9. Calcula la media de cilindrada por cilindro (no por motor) de toda la muestra de cilindros de todos los coches.
    • Sol.: \(35.0286458\) pulgadas cúbicas.

FIN EJERCICIO 11

EJERCICIO 12: Si la variable conc recoge la concentración de plomo (en ppm) en el aire de cierta zona durante un día completo (1 muestreo cada 5 minutos):

  1. ¿Cuántas observaciones se han recogido?
    • Sol.: \(288\).
  2. ¿Cuál ha sido la concentración máxima?
    • Sol.: \(47.34\) ppm.
  3. ¿En cuántos de los muestreos se ha superado la concentración de \(40.0\) ppm?
    • Sol.: \(61\).
  4. ¿Cuál ha sido la concentración media del día?
    • Sol.: \(24.0722917\) ppm.
  5. ¿Cuáles fueron las 10 mediciones más bajas del día?
    • Sol.: \(0.93, 1.07, 1.77, 2.03, 2.58, 2.73, 2.75, 2.88, 2.88, 2.91\).
  6. Si la primera medida fue a las 00:00, ¿a qué hora del día se alcanzó la concentración máxima?
    • Sol.: A las 11:45.

FIN EJERCICIO 12

RESUMEN FINAL

  • Vector: x
  • Operaciones numéricas: +, -, *, /, ^, …
  • Operaciones numéricas: sqrt(x), log(x), exp(x), log10(x), sin(x), abs(x), factorial(x), …
  • Constantes lógicas: TRUE, FALSE
  • Crear vectores:
    • Concatenando constantes u otros vectores: p.ej. c(5, 4, -3, 1), c(v1, 7, v2)
    • Números consecutivos: p.ej. 1:10
  • Funciones importantes sobre un vector dado:
    • Cantidad de datos: length(x)
    • Suma de los datos: sum(x)
    • Ordenar los datos: sort(x) (de menor a mayor)
    • Valores mínimo / máximo: min(x), max(x)
  • Operadores lógicos: &, |, !, xor()
  • Comparaciones: <, ==, >, <=, >=, !=
  • Subvectores: “corchete” [ ]
    • Por posiciones: p.ej. x[ c(1,3,5,7) ] (se queda con datos de posiciones 1, 3, 5 y 7)
    • Por condiciones: p.ej. x[ x>5 & x<9 ] (se queda con datos mayores que 5 y menores que 9, se pueden combinar condiciones)
  • Estadística 1 variable:
    • Variable cualitativa (o discreta con pocas categorías)
      • Tabla de frecuencias absolutas / relativas: table(x), table(x)/length(x)
      • Diagrama de barras / sectores: barplot(table(x)), pie(table(x))
    • Variable cuantitativa (continua o discreta con muchas categorías)
      • Tabla de frecuencias absolutas / relativas: table(cut(x, breaks)), table(cut(x, breaks))/length(cut(x, breaks)) donde breaks marca los intervalos
      • Media aritmética: mean(x)
      • Mediana: median(x)
      • Mínimo: min(x)
      • Máximo: max(x)
      • Cuantil de orden \(p\): quantile(x, prob=\(p\)) (p.ej. percentil 45 = cuantil de orden 0.45)
      • Recorrido o rango: hay que calcularlo con su definición (max(x)-min(x)).
      • Recorrido o rango intercuartílico: IQR(x)
      • Cuasivarianza: var(x)
      • Cuasidesviación típica: sd(x)
      • Varianza: var(x)*(length(x)-1)/length(x)
      • Desviación típica: sd(x)*sqrt((length(x)-1)/length(x))
      • Coeficiente de variación: versión “cuasi” sd(x)/abs(mean(x)), versión “sin cuasi” (sd(x)*sqrt((length(x)-1)/length(x)))/abs(mean(x)).
      • Diagrama de puntos: stripchart(x) (para pocos datos)
      • Histograma: hist(x, breaks) con breaks el número de intervalos, o el vector con los extremos sucesivos de los intervalos
      • Diagrama de caja: boxplot(x) (o para varias cajas, p.ej. boxplot(x1, x2, x3))