Saltar al contenido principal
LibreTexts Español

3.3: Colores, Nombres y Sexos - Datos Nominal

  • Page ID
    150011
  • \( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \) \( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)\(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\) \(\newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\) \( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\) \( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\) \( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\) \( \newcommand{\Span}{\mathrm{span}}\)\(\newcommand{\AA}{\unicode[.8,0]{x212B}}\)

    Los datos nominales o categóricos, a diferencia de los clasificados, son imposibles de ordenar o alinear. Están aún más lejos de los números. Por ejemplo, si asignamos valores numéricos a machos y hembras (digamos, “1” y “2”), no implicaría que un sexo es de alguna manera “más grande” que el otro. Un valor intermedio (como “1.5”) también es difícil de imaginar. En consecuencia, los índices nominales pueden etiquetarse con cualquier letra, palabra o carácter especial, no importa.

    Los métodos numéricos regulares simplemente no son aplicables a los datos nominales. Hay, sin embargo, formas de evitar. El más simple es contar, calcular frecuencias para cada nivel de variable nominal. Estos recuentos, y otras medidas derivadas, son más fáciles de analizar.

    Vectores de caracteres

    R tiene varias formas de almacenar datos nominales. Primero es un vector de carácter (textual):

    Código\(\PageIndex{1}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    is.character(sex)
    is.vector(sex)
    str(sex)

    (Tenga en cuenta la función str () nuevamente. Se debe usar cada vez que se trata de nuevos objetos!)

    Por cierto, para ingresar cadenas de caracteres manualmente, es más fácil comenzar con algo como aa <- c (“" "”), luego insertar comas y espacios: aa <- c (“”, “”) y finalmente insertar valores: aa <- c (“b”, “c”).

    Otra opción es ingresar scan (what="char”) y luego escribir caracteres sin comillas y comas; al final, ingresa cadena vacía.

    Supongamos que el sexo vectorial registra sexos de empleados en una pequeña firma. Así es como R muestra su contenido:

    Código\(\PageIndex{2}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex

    Para seleccionar elementos del vector, utilice corchetes:

    Código\(\PageIndex{3}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex[2:3]

    ¡Sí, los corchetes son el comando! Se utilizan para indexar vectores y otros objetos R. Para probarlo, ¿correr?” [”. Otra forma de comprobarlo es con backticks que permiten usar llamadas no triviales que de otra manera son ilegales:

    Código\(\PageIndex{4}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    `[`(sex, 2:3)

    Las funciones inteligentes orientadas a objetos en R pueden “entender” algo sobre el sexo del objeto:

    Código\(\PageIndex{5}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    table(sex)

    La tabla de comandos () cuenta elementos de cada tipo y genera la tabla, que es una de las pocas formas numéricas de trabajar con datos nominales (la siguiente sección habla más sobre los recuentos).

    Factores

    Pero plot () no podría hacer nada con el vector de caracteres (compruébalo tú mismo). Para trazar los datos nominales, debemos informar primero a R que este vector tiene que ser tratado como factor:

    Código\(\PageIndex{6}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    sex.f

    Ahora plot () “verá” qué hacer. Contará invisiblemente los elementos y dibujará una gráfica de barras (Figura\(\PageIndex{1}\)):

    Código\(\PageIndex{7}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    plot(sex.f)

    Ocurrió porque el vector de caracteres se transformó en un objeto de un tipo específico de datos categóricos, un factor con dos niveles:

    Código\(\PageIndex{8}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    is.factor(sex.f)
    is.character(sex.f)
    str(sex.f)
    levels(sex.f)
    Screen Shot 2019-01-07 a las 3.45.59 PM.png
    Figura\(\PageIndex{1}\) Así es como plot () traza un factor.

    Código\(\PageIndex{9}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    nlevels(sex.f)

    En R, muchas funciones (incluyendo plot ()) prefieren factores a vectores de caracteres. Algunos de ellos podrían incluso transformar el carácter en factor, pero otros no. Por lo tanto, ¡ten cuidado!

    Hay algunos otros hechos a tener en cuenta.

    Primero (y lo más importante), los factores, a diferencia de los vectores de caracteres, permiten una fácil transformación en números:

    Código\(\PageIndex{10}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    as.numeric(sex.f)

    Pero, ¿por qué es hembra 1 y macho 2? La respuesta es realmente sencilla: porque “femenino” es la primera en orden alfabético. R usa este orden cada vez que los factores tienen que ser convertidos en números.

    Las razones de tal transformación se vuelven transparentes en un siguiente ejemplo. Supongamos que también medimos pesos de los empleados de un ejemplo anterior:

    Código\(\PageIndex{11}\) (R):

    w <- c(69, 68, 93, 87, 59, 82, 72)

    Es posible que deseemos trazar las tres variables: estatura, peso y sexo. Aquí hay una manera posible (Figura\(\PageIndex{2}\)):

    Código\(\PageIndex{12}\) (R):

    x <- c(174, 162, 188, 192, 165, 168, 172.5)
    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    w <- c(69, 68, 93, 87, 59, 82, 72)
    plot(x, w, pch=as.numeric(sex.f), col=as.numeric(sex.f), xlab="Height, cm", ylab="Weight, kg")
    legend("topleft", pch=1:2, col=1:2, legend=levels(sex.f))
    Screen Shot 2019-01-07 en 3.51.20 PM.png
    Figura\(\PageIndex{2}\) Una gráfica con tres variables.

    Los parámetros pch (de “print character”) y col (de “color”) definen la forma y el color de los caracteres mostrados en la trama. Dependiendo del valor de la variable sexo, el punto de datos se muestra como un círculo o triángulo, y también en negro o en rojo. En general, basta con usar ya sea forma, o color para distinguir entre niveles.

    Tenga en cuenta que los colores se imprimieron a partir de números de acuerdo con la paleta actual. Para ver qué números significan qué colores, escriba:

    Código\(\PageIndex{13}\) (R):

    palette()

    Es posible cambiar la paleta por defecto usando esta función con argumento. Por ejemplo, palette (rainbow (8)) reemplazará default con 8 nuevos colores “rainbow”. Para regresar, escriba paleta (“default”). También es posible crear tu propia paleta, por ejemplo con la función colorRampPalette () (ver ejemplos en los capítulos siguientes) o usando el paquete separado (como rColorBrewer o cetcolor, el último permite crear paletas perceptualmente uniformes).

    Cómo colorear la gráfica de barras de la Figura\(\PageIndex{1}\) in black (female) and red (male)?

    Si tu factor está hecho de números y quieres convertirlo de nuevo en números (¡esta tarea no es rara!) , convertirlo primero en el vector de caracteres y solo entonces, a números:

    Código\(\PageIndex{14}\) (R):

    (ff <- factor(3:5))
    as.numeric(ff) # incorrect!
    as.numeric(as.character(ff)) # correct!

    La siguiente característica importante de los factores es que subconjunto de un factor conserva por defecto el número original de niveles, incluso si algunos de los niveles ya no están aquí. Comparar:

    Código\(\PageIndex{15}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    sex.f[5:6]
    sex.f[6:7]

    Hay varias formas de excluir los niveles no utilizados, por ejemplo, con el comando drop evels (), con el argumento drop, o mediante la transformación “ida y vuelta” (factor a carácter a factor) de los datos:

    Código\(\PageIndex{16}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    sex.f <- factor(sex)
    droplevels(sex.f[6:7])
    sex.f[6:7, drop=T]
    factor(as.character(sex.f[6:7]))

    Tercero, podemos ordenar factores. Presentemos una cuarta variante: tallas de camiseta para estos siete empleados hipotéticos:

    Código\(\PageIndex{17}\) (R):

    m <- c("L", "S", "XL", "XXL", "S", "M", "L")
    m.f <- factor(m)
    m.f

    Aquí los niveles siguen el orden alfabético, lo cual no es apropiado porque queremos que S (pequeño) sea el primero. Por lo tanto, debemos decirle a R que estos datos están ordenados:

    Código\(\PageIndex{18}\) (R):

    m <- c("L", "S", "XL", "XXL", "S", "M", "L")
    m.f <- factor(m)
    m.o <- ordered(m.f, levels=c("S", "M", "L", "XL", "XXL"))
    m.o

    (Ahora R reconoce las relaciones entre tamaños, y la variable m.o podría tratarse como clasificada).

    En esta sección, creamos bastantes objetos R nuevos. Una de las habilidades a desarrollar es entender qué objetos están presentes en tu sesión en este momento. Para verlos, es posible que desee enumerar los objetos:

    Código\(\PageIndex{19}\) (R):

    ls()

    Si desea que todos los objetos junto con su estructura, utilice el comando ls.str ().

    También hay una versión más sofisticada de la lista de objetos, que informa los objetos en una tabla:

    Código\(\PageIndex{20}\) (R):

    Ls() # asmisc.r

    (Para usar Ls (), descargue asmisc.r y luego source () desde el disco, o fuente de la URL mencionada en el prefacio.)

    Ls () también es útil cuando comienzas a trabajar con objetos grandes: ayuda a limpiar la memoria \(^{[1]}\)R.

    Vectores lógicos y datos binarios

    Los datos binarios (no se mezclan con un formato de archivo binario) son un caso especial relacionado con datos nominales y clasificados. Un buen ejemplo sería “sí” de “no” respuesta en un cuestionario, o presencia vs. ausencia de algo. En ocasiones, los datos binarios pueden ser ordenados (como con presencia/ausencia), a veces no (como con respuestas correctas o incorrectas). Los datos binarios pueden presentarse como números 0/1, o como vector lógico que es la cadena de valores VERDADERO o FALSO.

    Imagínese que preguntamos a siete empleados si les gusta la pizza y codificamos sus respuestas de “sí”/“no” en VERDADERO o FALSO:

    Código\(\PageIndex{21}\) (R):

    (likes.pizza <- c(T, T, F, F, T, T, F))

    El vector resultante no es carácter ni factor, es lógico. Una de las características interesantes es que los vectores lógicos participan en operaciones aritméticas sin problemas. También es fácil convertirlos en números directamente con.numeric (), así como convertir números en lógicos con como.logical ():

    Código\(\PageIndex{22}\) (R):

    (likes.pizza <- c(T, T, F, F, T, T, F))
    is.vector(likes.pizza)
    is.factor(likes.pizza)
    is.character(likes.pizza)
    is.logical(likes.pizza)
    likes.pizza * 1
    as.logical(c(1, 1, 0))
    as.numeric(likes.pizza)

    Esta es la característica más útil de los datos binarios. Todos los demás tipos de datos, desde la medición hasta los nominales (el último es el más útil), podrían convertirse en lógicos, y lo lógico es fácil de convertir en números 0/1:

    Código\(\PageIndex{23}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    Tobin(sex, convert.names=FALSE)

    Posteriormente, muchos métodos especializados, como la regresión logística o las métricas de similitud binaria, estarán disponibles incluso para esos datos inicialmente nominales.

    Como ejemplo, así es como convertir el vector de sexo del personaje en lógico:

    Código\(\PageIndex{24}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    (is.male <- sex == "male")
    (is.female <- sex == "female")

    (Aplicamos la expresión lógica en el lado derecho de la asignación usando “¿es igual?” operador de símbolo de doble ecuación. Esta es la segunda forma numérica de trabajar con datos nominales. Tenga en cuenta que un vector de carácter con dos tipos de valores se convirtió en dos vectores lógicos.)

    Los vectores lógicos son útiles también para la indexación:

    Código\(\PageIndex{25}\) (R):

    x <- c(174, 162, 188, 192, 165, 168, 172.5)
    x > 170
    x[x > 170]

    (Primero, aplicamos expresión lógica con mayor signo para crear el vector lógico. Segundo, utilizamos corchetes para indexar el vector de alturas; es decir, seleccionamos aquellas alturas que son mayores a 170 cm.)

    Aparte de los signos mayores e iguales, hay muchos otros operadores lógicos que permiten crear expresiones lógicas en R (ver Tabla\(\PageIndex{1}\)):

    == IGUAL
    <= IGUAL O MENOR
    >= IGUAL O MAYOR
    & Y
    | O
    ! NO
    ! = NO ES IGUAL
    %en% PARTIDO

    Tabla\(\PageIndex{1}\) Algunos operadores lógicos y cómo entenderlos.

    Los operadores AND y OR (& y |) ayudan a construir expresiones lógicas verdaderamente avanzadas y muy útiles:

    Código\(\PageIndex{26}\) (R):

    x <- c(174, 162, 188, 192, 165, 168, 172.5)
    sex <- c("male", "female", "male", "male", "female", "male", "male")
    w <- c(69, 68, 93, 87, 59, 82, 72)
    ((x < 180) | (w <= 70)) & (sex=="female" | m=="S")

    (Aquí seleccionamos solo aquellas personas cuya estatura sea menor a 170 cm o peso sea de 70 kg o menos, estas personas también deben ser hembras o llevar playeras de talla pequeña. Obsérvese que el uso de paréntesis permite controlar el orden de los cálculos y además hace que la expresión sea más comprensible.)

    Las expresiones lógicas son aún más potentes si aprendes a usarlas junto con el comando ifelse () y el operador if (el último se suministra frecuentemente con else):

    Código\(\PageIndex{27}\) (R):

    sex <- c("male", "female", "male", "male", "female", "male", "male")
    ifelse(sex=="female", "pink", "blue")

    (Command ifelse () se vectoriza por lo que pasa por múltiples condiciones a la vez. Operador si toma solo una condición.)

    Tenga en cuenta el uso de llaves rizadas las últimas filas. Las llaves convierten varias expresiones en una sola expresión (combinada). Cuando solo hay un comando, las llaves son opcionales. Las llaves pueden contener dos comandos en una fila si están separados con punto y coma.

    Referencias

    1. Por defecto, Ls () no genera funciones de salida. Si es necesario, este comportamiento podría cambiarse conLS (exclude="none”).


    This page titled 3.3: Colores, Nombres y Sexos - Datos Nominal is shared under a Public Domain license and was authored, remixed, and/or curated by Alexey Shipunov via source content that was edited to the style and standards of the LibreTexts platform; a detailed edit history is available upon request.