El objetivo de esta primera práctica es que nos comencemos a familiarizar con la manera de trabajar de R y con las principales características de su sintaxis.Seguiremos los pasos siguientes:

  • Vamos a crear un proyecto nuevo.
  • Importaremos a R un fichero de texto con datos.
  • Usaremos algunos comandos para obtener algunas medidas y gráficos descripitivos elementales.
  • Veremos cómo se puede programar una función muy sencilla.

Crear un proyecto

Lo primero que vamos a hacer es crear un proyecto llamado introduccionR en una nueva carpeta. Para ello vamos al menú File y a la opción New project. Elegimos a continuación las opciones New directory y New project. En el cuadro de diálogo resultante elegimos la carpeta a la que va a corresponder nuestro proyecto. El nombre de la carpeta se corresponde con el nombre del proyecto.

Si todo ha ido bien, en la parte superior derecha de la pantalla veremos un icono que indica que el proyecto está abierto. En el desplegable que se abre en este icono podemos probar a cerrar el proyecto y volverlo a abrir.

La idea es que creemos un proyecto diferente para cada trabajo que llevemos a cabo con R.

Cargar unos datos

Vamos a crear un script, es decir, un fichero de texto con código de R. Estos ficheros se nombran con la extensión .R. Para ello vamos al menú File y a la opción New file y después R script. Veremos que se abre el editor de texto. A partir de este momento escribiremos el código en este editor en lugar de en la consola. Así podremos guardarlo y volverlo a ejecutar o modificarlo en otro momento. Para ejecutar código podemos marcarlo y pulsar el botón Run.

Para cargar los datos ejecutamos las siguientes líneas (no importa si de momento no se entiende la sintaxis):

notas <- read.table('http://verso.mat.uam.es/~joser.berrendero/datos/notas.txt', sep = ' ', dec = ',', header=TRUE)

# A partir de R 4.0.0 la variables carácter no son factores por defecto
notas$tipo <- as.factor(notas$tipo)

En la ventana del entorno de trabajo veremos que se ha creado un objeto llamado notas con tres variables llamadas tipo, nota09 y nota10. La Comunidad de Madrid evalúa anualmente a los alumnos de sexto de primaria de todos los colegios sobre varias materias. Los datos que hemos cargado corresponden a las notas medias obtenidas por 1222 colegios en los años 2009 y 2010 (fuente: diario El País) junto con el tipo de colegio (concertado, privado o público). Podemos ver las primeras filas del fichero de la siguiente forma:

head(notas)
tipo nota09 nota10
concertado 9.34 8.520
publico 9.24 5.960
concertado 9.17 5.460
privado 9.14 7.925
publico 9.09 6.400
publico 9.06 7.940

(Fuente de los datos: diario El País)

Medidas descriptivas elementales

Dentro de este fichero cada variable se identifica usando la sintaxis fichero$variable. Por ejemplo, las medias de las notas de 2009 y 2010 se obtienen con los comandos:

mean(notas$nota09)
## [1] 6.604877
mean(notas$nota10)
## [1] 5.439943

Las desviaciones típicas de las notas de 2009 y 2010 se obtienen con los comandos:

sd(notas$nota09)
## [1] 1.032083
sd(notas$nota10)
## [1] 1.195158

El comando summary permite calcular algunas medidas descriptivas elementales de todas las variables del fichero simultáneamente:

summary(notas)
##          tipo         nota09          nota10      
##  concertado:392   Min.   :2.170   Min.   : 0.000  
##  privado   : 98   1st Qu.:5.970   1st Qu.: 4.810  
##  publico   :732   Median :6.685   Median : 5.497  
##                   Mean   :6.605   Mean   : 5.440  
##                   3rd Qu.:7.350   3rd Qu.: 6.250  
##                   Max.   :9.340   Max.   :10.530

Algunos gráficos

En primer vemos cómo representar un histograma de las notas de 2009:

hist(notas$nota09)

La distribución es bastante simétrica aunque muestra una ligera asimetría a la izquierda.

Para comparar conjuntos de datos los diagramas de cajas son útiles que los histogramas. Por ejemplo, para comparar las notas de 2009 con las de 2010:

boxplot(notas$nota09, notas$nota10)

Vemos que en 2010 las notas tienden a ser más bajas. También podemos comparar las notas de 2010 para cada tipo de colegio. Aunque las diferencias no son muy grandes, los centros privados tienden a tener notas más altas que los concertados, y éstos más altas que los públicos:

boxplot(notas$nota10 ~ notas$tipo)

Es interesante el uso de la tilde de la ñ en el código anterior.

Para estudiar si hay relación entre las notas de los dos años podemos representar la correspondiente nube de puntos:

plot(notas$nota09, notas$nota10)

Se observa una relación positiva moderada. Numéricamente, esta relación se puede cuantificar mediante la covarianza y la correlación:

cov(notas$nota09, notas$nota10)
## [1] 0.650412
cor(notas$nota09, notas$nota10)
## [1] 0.5272887

El valor de la correlación es moderadamente positivo, tal y como habíamos observado al mirar la nube de puntos.

Otras operaciones matemáticas

Además de para analizar datos, R se puede usar para llevar a cabo todo tipo de representaciones gráficas y cálculos matemáticos. Por ejemplo, la función \(cos (x^2)\) se puede representar (entre 0 y \(2\pi\)) mediante:

curve(cos(x^2), 0, 2 * pi)

La integral de la función anterior entre 0 y \(\pi\) se calcula con:

integrate(function(x) cos(x^2), 0, pi)
## 0.5656935 with absolute error < 9.5e-06

Para representar la función de densidad de una variable aleatoria normal de media \(\mu=3\) y desviación típica \(\sigma=1\) escribimos:

curve(dnorm(x, mean = 3, sd = 1), -1, 7)

Hemos usado el comando dnorm, con los argumentos adecuados, para evaluar la función de densidad normal. Si lo que queremos es generar 1000 números aleatorios que sigan esta distribución y después representar el correspondiente histograma:

x <- rnorm(1000, mean = 3, sd = 1)
hist(x)

Una función muy sencilla

Podemos escribir también nuestras propias funciones. En este apartado vamos a ver un ejemplo muy simple. Se trata de escribir una función (llamada suma) que calcula la suma de dos números. Escribimos:

suma <- function(x, y){
  resultado <- x+y
  return(resultado)
}

Una vez escrito el código en el script, lo ejecutamos para cargar la función en el área de trabajo. Una vez cargada la podemos usar como cualquier otro comando de R:

suma(2, 3)
## [1] 5