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:
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.
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)
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
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.
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)
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