3.3 Selecciones

Para seleccionar elementos de un vector se usa el corchete []. Pero, a diferencia de lo que ocurre con las tablas, como los vectores son objetos unidimensionales, sin coma:

x <- x^2
x[1:3] 
x[c(1,3)]
x[x > 25] 
x[3:1] 
x[-(1:2)] 
x[-length(x)]

Nótese en el ejemplo anterior el uso (y el efecto) del signo menos y de las condiciones lógicas dentro de [].

Selecciona todos los elementos de un vector menos menos los dos últimos.

Implementa la función diff (las diferencias entre cada valor de un vector y el que lo precede) a mano. Nota: la función diff existe en R; pruébala en caso de duda.

Una propiedad muy importante del corchete es que permite, además de seleccionar, cambiar el contenido de los elementos seleccionados de un vector.

z <- 1:10 
z[z < 5] <- 100 
z
##  [1] 100 100 100 100   5   6   7   8   9  10

Reemplazar subselecciones es muy útil: permitirá, por ejemplo, cambiar las edades negativas por un valor con sentido, sustituir los nulos por un determinado valor por defecto, reemplazar los valores que excedan un tope por dicho tope, etc.

El nombre de las columnas de una tabla también es un vector. Por eso, para cambiar el nombre de una columna podemos hacer lo siguiente:

mi.iris <- iris   # una copia de iris
colnames(mi.iris)[5] <- "Especie"

Cambia (en una sola expresión) los nombres de las dos primeras columnas de mi.iris por su traducción al español.

Frecuentemente se quiere muestrear un vector, es decir, obtener una serie de elementos al azar dentro de dicho vector. Para ello se utiliza la función sample:

sample(x, 4) 
sample(x, 100)                  # ¡falla! 
sample(x, 100, replace = TRUE)  # manera correcta

La función sample trata el vector como una urna y a sus elementos como bolas contenidas en ella que va extrayendo al azar. Obviamente, es incapaz de extraer más elementos de los que contiene la urna. Pero existe el la opción de que el muestreo se realice con reemplazamiento, i.e., de modo que cada vez que sample extraiga una bola, la reintroduzca en la urna.

Muestrea iris, es decir, extrae (p.e., 30) filas al azar de dicha tabla. Pista: recuerda que ordenar era seleccionar ordenadamente; de igual manera, en una tabla, muestrear será…

En una provincia la población activa es de un millón de personas. El 10% de ellas está en el paro. Periódicamente el INE hace una encuesta sobre 1000 personas para estimar la tasa de paro. Pero esta encuesta, por estar basada en 1000 personas, está sujeta a error. Puedes tratar de medir ese error de la siguiente manera: crea un vector de longitud 1M con cien mil valores iguales a 1 y el resto, a 0. Extrae una muestra de tamaño 1000 y calcula la proporción de unos. ¿Está cerca del 10%?

Repite el ejercicio anterior varias veces. ¿Cómo varían las estimaciones? ¿Qué pasa si encuestas a 10000 personas en lugar de a 1000? ¿Y si encuestas a 100?

Lee la parte relevante de ?replicate. ¿Para qué sirve esta función? ¿Puede ser útil para analizar el caso propuesto en los ejemplos anteriores? Nota: la página de ayuda de la función anterior documenta varias funciones relacionadas, pero puedes ignorar por el momento todo lo que no se refiera a la función en cuestión.

El muestreo de vectores es fundamental en diversos ámbitos. Por ejemplo, a la hora de realizar los llamados tests A/B14 y determinar qué observaciones van al grupo A y cuáles al B.

Parte iris en dos partes iguales (75 observaciones cada uno) con las filas elegidas al azar (¡y complementarias!).

Ejecuta mean(sample(iris\(Sepal.Length, replace = T))</code> varias veces. Comprueba que obtienes números que se parecen a la media de <code>iris\)Sepal.Lenght. Nota: esto es el fundamento de una técnica estadística muy poderosa, el bootstrap, para estimar cómo puede variar una media (i.e., estimar la varianza de una media).