Santiago Humberto Londoño Restrepo
March 16, 2016
Los factors son vectores que permiten gestionar adecuadamente variables cualitativas o categóricas, ya sea para test estadísticos o para graficación. Saberlos utilizar nos proporcionará herramientas valiosas para un adecuado análisis.
Existen dos tipos de variables cualitativas:
Las variables cualitativas Nominales son aquellas que asumen valores representados por palabras, los cuales no pueden ser jerarquizados u ordenados. Un ejemplo es la variable Género, está asume dos valores, Femenino y Masculino. Note que esos valores no se pueden ordenar, es decir sería un error asumir que Femenino es mayor o mejor que Masculino.
Las variables cualitativas Ordinales son similares a las nominales, excepeto en que sus valores se pueden jerarquizar u ordenar. Un ejemplo es el nivel educativo, la cual asume diversos valores, Ninguno, Primaria, Secundaria, Técnica y tecnología, Pregrado, Posgrado. Note que esos valores tienen un orden ya que Primaria indica mayores conocimientos académicos que Ninguno.
Un factor se crea con la función factor(); dentro del parentesis debes colocar el vector que usted desea transformar como factor.
Ejercicio
Cree un vector que contenga el género de 5 individuos diferentes, llamelo vector_genero e imprimalo, ¿qué tipo de datos esta almacenando el vector vector_genero? ¿Qué nombre le darias a un vector que contienen datos de tipo character?
Luego asigne al vector_genero_factor el vector_genero transformado a factor ¿Qué tipo de vector sería el vector_genero_factor?
Finalmente, ¿observas alguna diferencia entre los dos vectores cuando los imprimes?
El tipo de datos qué estan almacenandos en vector_genero son de tipo character. De esa manera se dice que vector_genero es un vector de tipo character. Un vector que tienen almacenados datos de tipo númerico se le conoce como vector númerico. Y lo mismo para los vectores que almacenan los otros tipos de datos.
Verifica el tipo o clase de un vector con la función class().
#Se crea el vector
vector_genero <- c("Masculino", "Femenino", "Femenino", "Masculino", "Masculino")
#Se imprime el vector
vector_genero## [1] "Masculino" "Femenino" "Femenino" "Masculino" "Masculino"
#Se averigua el tipo de vector utilizando la función class()
class(vector_genero)## [1] "character"
#Se crea el vector_genero_factor
vector_genero_factor <- factor(vector_genero)
#vector_genero_factor
vector_genero_factor## [1] Masculino Femenino Femenino Masculino Masculino
## Levels: Femenino Masculino
#Se averigua el tipo de vector para vector_genero_factor
class(vector_genero_factor)## [1] "factor"
Todas las variables de tipo character se recomienda transformarlas a tipo factor.
Para el caso de una variable de tipo nominal entonces sólo se utiliza la función factor sobre el vector que contiene los valores de la variable nominal
Ejemplo
animales <- c("Jaguar", "Serpiente", "León", "Aguila")
animales_factor <- factor(animales)
animales_factor## [1] Jaguar Serpiente León Aguila
## Levels: Aguila Jaguar León Serpiente
Para el caso de una variable de tipo ordinal se utiliza la función factor como en el ejemplo anterior y paraleleamente se utilian diversos argumentos de la función factor
¿Qué son los argumentos de una función? Son los parámetros con los que el usuario puede modificar el comportamiento de una función. Por ejemplo, la calculadora de tu celular la podemos ver como una función que tiene muchos argumentos, por ejemplo tienen el argumento de los números para que tu eligas el o los que necesites, otro argumento son las operaciones aritméticas (suma, resta, división, etc) las cuáles el usuario modifica según sus necesidades. En R las funciones por lo general tienen más de un argumento. Puedes averiguar la cantidad de argumentos de una función con el signo de interrogación ? o con la funcion args(). Veamos cómo se utilizan esas dos opciones para averiguar los argmentos de la función factor()
#Con el signo interrogación
?factor## starting httpd help server ...
## done
#Con la función args()
args(factor)## function (x = character(), levels, labels = levels, exclude = NA,
## ordered = is.ordered(x), nmax = NA)
## NULL
No te preocupes si no entiendes nada de lo anterior. Si es muy importante que entiendas la utilidad de los argumentos y cómo utilizar, concretamente, los argumentos de la función factor() que hoy te enseñaré.
Cómo veníamos diciendo, para crear una variable de tipo ordinal debemos modificar algunos de los argumentos de la función factor(). Para crear variables cualitativas de tipo ordinal sólo se deben modificar los argumentos: levels y ordered.
El argumento levels indica los valores que asume la variable. El argumento ordered permite ordenar o jerarquizar esos valores.
¡Veamos todo esto en acción!
temp <- c("Alta","Media", "Baja", "Baja", "Media")
temp## [1] "Alta" "Media" "Baja" "Baja" "Media"
temp_factor <- factor(temp,
levels = c("Baja", "Media", "Alta"),
ordered = TRUE)
temp_factor## [1] Alta Media Baja Baja Media
## Levels: Baja < Media < Alta
Suponga que usted tiene un vector con las notas o calificaciones de 5 estudiantes de tercero de primaria, además tenga en cuenta que en ese colegio sólo se utilizan tres calificaciones: Insuficiente, Bueno, Excelente.
notas_vector <- c(“Excelente”,“Insuficiente”,“Insuficiente”, “Bueno”, “Insuficiente”)
y le piden que haga lo siguiente: transforme el vector notas_vector en un vector de tipo factor de tal manera que represente una variable cualitativa de tipo ordinal.
notas_vector <- c("Excelente","Insuficiente","Insuficiente", "Bueno", "Insuficiente")
#Imprimo
notas_vector## [1] "Excelente" "Insuficiente" "Insuficiente" "Bueno"
## [5] "Insuficiente"
#Verifico tipo de vector
class(notas_vector)## [1] "character"
#Realizo la transformación solicitada
notas_vector <- factor(notas_vector,
levels = c("Insuficiente", "Bueno", "Excelente"),
ordered = TRUE)
#Imprimo
notas_vector## [1] Excelente Insuficiente Insuficiente Bueno Insuficiente
## Levels: Insuficiente < Bueno < Excelente
#Verifico tipo de vector
class(notas_vector)## [1] "ordered" "factor"
Una función muy agradable que utilizaras en cualquier análisis estadísitico es summary(). Esta te dará un descripción general de cualquier variable. Dentro del parentesis simplemente debes colocar la variable a la cual deseas realizar una descripción general.
Observa con tus propios ojos cómo funciona:
notas_vector_num <- c(3.5, 2.3, 3.9, 4.3, 1.7)
notas_vector_character <- c("Excelente","Insuficiente","Insuficiente", "Bueno", "Insuficiente")
notas_vector_factor <- factor(notas_vector,
levels = c("Insuficiente", "Bueno", "Excelente"),
ordered = TRUE)
summary(notas_vector_num)## Min. 1st Qu. Median Mean 3rd Qu. Max.
## 1.70 2.30 3.50 3.14 3.90 4.30
summary(notas_vector_character)## Length Class Mode
## 5 character character
summary(notas_vector_factor)## Insuficiente Bueno Excelente
## 3 1 1
Cuando un vector es de tipo factor y sus elementos estan ordenados (variable cualitativa de tipo ordinal) significa que puedes realizar comparaciones, como en el caso de los vectores de tipo númerico.
Analiza los siguientes códigos
notas_vector_num <- c(3.5, 2.3, 3.9, 4.3, 1.7)
notas_vector_num[1] > notas_vector_num[5]## [1] TRUE
notas_vector_factor <- factor(c("Excelente","Insuficiente","Insuficiente", "Bueno", "Insuficiente"),
levels = c("Insuficiente", "Bueno", "Excelente"),
ordered = TRUE)
notas_vector_factor[4] < notas_vector_factor[3]## [1] FALSE
notas_vector_character <- factor(c("Excelente","Insuficiente","Insuficiente", "Bueno", "Insuficiente"))
notas_vector_character[1] > notas_vector_character[5]## Warning in Ops.factor(notas_vector_character[1],
## notas_vector_character[5]): '>' not meaningful for factors
## [1] NA
Teniendo en cuenta el siguiente vector
Escriba el código que utilizaría para responder las siguientes preguntas:
¿El estudiante número 3 obtuvo una nota superior al obtenido por el estudiante número 2?
¿Calcule el porcentaje de estudiantes que obtuvieron Excelente, el porcentaje que obtuvo Bueno y el porcentaje que obtuvo Insuficiente? Asigne esos porcentajes a un vector denominado porcentajes e imprimalo.
#primero transformar el vector notas en un vector de tipo factor de tal manera que represente una variable cualitativa ordinal
notas_vector <- c("Excelente","Insuficiente","Insuficiente", "Bueno", "Insuficiente")
notas_vector <- factor(notas_vector,
levels = c("Insuficiente", "Bueno", "Excelente"),
ordered = TRUE)
notas_vector## [1] Excelente Insuficiente Insuficiente Bueno Insuficiente
## Levels: Insuficiente < Bueno < Excelente
#Respuesta pregunta 2
porcentaje <- summary(notas_vector)/length(notas_vector)
porcentaje## Insuficiente Bueno Excelente
## 0.6 0.2 0.2