Saltar al contenido principal
LibreTexts Español

7.1: Cómo dibujar los datos multivariados

  • Page ID
    149994
  • \( \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}}\)

    La operación más sencilla con datos multidimensionales es dibujarlo.

    Pictografías

    Pictograma es una gráfica donde cada elemento representa uno de los objetos, y cada característica del elemento corresponde con un carácter del objeto primario. Si cada fila de datos es única, los pictogramas podrían ser útiles. Aquí está el ejemplo de la trama estelar (Figura\(\PageIndex{1}\)):

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

    eq8 <- read.table("data/eq8.txt", h=TRUE)
    str(eq8) # asmisc.r
    eq8m <- aggregate(eq8[, 2:9], list(eq8[, 1]), median, na.rm=TRUE)
    row.names(eq8m) <- eq8m[, 1]
    eq8m$Group.1 <- NULL
    stars(eq8m, cex=1.2, lwd=1.2, col.stars=rep("darkseagreen", 8))
    Screen Shot 2019-01-22 a las 10.47.47 PM.png
    Figura\(\PageIndex{1}\) Las estrellas muestran diferentes especies de cola de caballo.

    (Hicimos cada elemento para representar la especie de cola de caballo, y la longitud del rayo particular corresponde con algunos caracteres morfológicos. Es fácil ver, como ejemplo, similitudes entre Equisetum\(\times\) litorale y E. fluviatile.)

    La pictografía ligeramente más exótica son los rostros de Chernoff donde las características de los elementos se muestran como personajes de rostros humanos (Figura\(\PageIndex{1}\)):

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

    eq8 <- read.table("data/eq8.txt", h=TRUE)
    library(TeachingDemos)
    faces(eq8m)

    (Las caras originales de Chernoff se han implementado en la función faces2 (), también hay otra variante en el paquete symbols ().)

    Screen Shot 2019-01-22 a las 10.50.27 PM.png
    Figura Las caras de\(\PageIndex{2}\) Chernoff muestran diferentes especies de cola de caballo.

    Relacionado con las pictografías hay formas de visión general de todo el conjunto de datos numéricos, matriz o marco de datos. Primero, command image () permite trazados como en la Figura\(\PageIndex{3}\):

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

    image(scale(iris[,-5]), axes=FALSE)
    axis(2, at=seq(0, 1, length.out=4), labels=abbreviate(colnames(iris[,-5])), las=2)

    (Se trata de una matriz de “retrato” o iris, no extremadamente informativa pero útil de muchas maneras. Por ejemplo, es bien visible que los valores más altos, más rojos, de Pt.L (abreviado de Pétal.Longitud) corresponden con los valores más bajos de Sp.W (Sepal.Ancho). Es posible incluso detectar la estructura de 3 especies de estos datos.)

    Screen Shot 2019-01-22 a las 10.52.31 PM.png
    Figura\(\PageIndex{3}\) Resultados de trazar datos de iris con el comando image (). Los colores más rojos corresponden con valores más altos de caracteres escalados.

    Más avanzado es la gráfica de coordenadas paralelas (Figura\(\PageIndex{4}\)):

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

    library(MASS)
    parcoord(iris[,-5], col=as.numeric(iris[, 5]), lwd=2)
    legend("top", bty="n", lty=1, lwd=2, col=1:3, legend=names(table(iris[, 5])))
    Screen Shot 2019-01-22 a las 10.54.21 PM.png
    Figura Gráfica de coordenadas\(\PageIndex{4}\) paralelas.

    Esto es algo así como el stripchart multidimensional. Cada carácter se representa con un eje que tiene sus valores de todas las plantas. Entonces, para cada planta, estos valores se conectaron con líneas. Hay muchas cosas interesantes que se podrían ver en esta trama. Por ejemplo, es claro que los caracteres de pétalos son más distintivos que el sépalo. También es visible que Iris setosa es más distinta de otras dos especies, y así sucesivamente.

    Parcelas agrupadas

    Incluso los diagramas de caja y los gráficos de puntos podrían representar múltiples caracteres de múltiples grupos, pero primero deberá escalarlos y luego controlar manualmente las posiciones de los elementos trazados, o usar Boxplots () y Linechart () descritos en el capítulo anterior:

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

    boxplot(iris[, 1:4], iris[, 5], srt=0, adj=c(.5, 1), legpos="topright") # asmisc.r
    Linechart(iris[, 1:4], iris[, 5], mad=TRUE) # asmisc.r

    (Por favor, pruebe estas parcelas usted mismo.)

    La función matplot () permite colocar múltiples diagramas de dispersión en un fotograma, symbols () permite colocar múltiples parcelas más pequeñas en ubicaciones deseadas, y pares de funciones () permite mostrar múltiples diagramas de dispersión como una matriz (Figura\(\PageIndex{5}\)).

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

    pairs(iris[, 1:4], pch=21, bg=as.numeric(iris[, 5]), oma=c(2, 2, 3, 2))
    oldpar <- par(xpd=TRUE)
    legend(0, 1.09, horiz=TRUE, legend=levels(iris[, 5]), pch=21, pt.bg=1:3, bty="n")
    par(oldpar)

    (Esta gráfica matricial muestra las dependencias entre cada par posible de cinco variables simultáneamente).

    La parcela matricial es solo una de la gran variedad de parcelas de enrejado R. Muchos de ellos están en el paquete de celosía (Figura\(\PageIndex{6}\)):

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

    betula <- read.table( "http://ashipunov.info/shipunov/open/betula.txt", h=TRUE)
    library(lattice)
    d.tmp <- do.call(make.groups, betula[, c(2:4, 7:8)])
    d.tmp$LOC <- betula$LOC
    bwplot(data ~ factor(LOC) | which, data=d.tmp, ylab="")

    (Observe cómo usar make.groups () y do.call () para apilar todas las columnas en la variable long (también es posible usar stack (), ver arriba). Cuando se agregó LOC al conjunto de datos temporal, se recicló cinco veces, exactamente lo que necesitamos).

    La red de bibliotecas ofrece múltiples variantes de enrejado de parcelas R comunes. Por ejemplo, se podría hacer el diagrama de puntos enrejado que mostrará diferencias entre especies de cola de caballo (Figura\(\PageIndex{7}\))

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

    eq8 <- read.table("data/eq8.txt", h=TRUE)
    eq.s <- stack(as.data.frame(scale(eq8m)))
    eq.s$SPECIES <- row.names(eq8m)
    dotplot(SPECIES ~ values | ind, eq.s, xlab="")
    Screen Shot 2019-01-22 a las 10.58.16 PM.png
    Figura Gráfica\(\PageIndex{5}\) Matriz.

    (Aquí apilamos todas las columnas numéricas en una sola con stack ().)

    Pocas parcelas de enrejado están disponibles en el núcleo R. Estos son nuestros datos electorales del capítulo anterior (Figura\(\PageIndex{8}\)):

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

    elections <- read.table("data/elections.txt", h=TRUE)
    PROP <- cbind(CAND.1, CAND.2, CAND.3) / VOTER
    ATTEN <- (VALID + INVALID) / VOTER
    elections2 <- cbind(ATTEN, stack(data.frame(PROP)))
    coplot(percn ~ atten | cand, data=elections2, col="red", bg="pink", pch=21, bar.bg=c(fac="lightblue"))
    Screen Shot 2019-01-23 a las 9.02.05 PM.png
    Figura\(\PageIndex{6}\) El ejemplo de la gráfica de enrejado: para cada carácter de medición, las gráficas de caja representan diferencias entre ubicaciones.

    Trazados 3D

    Si solo hay tres variables numéricas, podemos intentar trazar todas ellas con parcelas de 3 ejes. Frecuentemente vistas en geología, metalurgia y algunos otros campos son parcelas ternarias. Implementaron, por ejemplo, en el paquete vcd. Utilizan un sistema de coordenadas triangulares que permite reflejar simultáneamente tres variables de medición y algunos caracteres más categóricos (vía colores, tipos de puntos etc. ):

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

    library(vcd)
    ternaryplot(scale(iris[, 2:4], center=FALSE), cex=.3, col=iris[, 5], main="")
    grid_legend(0.8, 0.7, pch=19, size=.5, col=1:3, levels(iris[, 5]))
    Screen Shot 2019-01-23 a las 9.28.48 PM.png
    Figura Gráfico de puntos de\(\PageIndex{7}\) Trellis de la especie cola de caballo (los valores de los caracteres se escalan). Estas parcelas suelen leerse desde la parte inferior.

    La gráfica 3D “brick” se podría hacer, por ejemplo, con el paquete scatterplot3d (Figura\(\PageIndex{10}\)):

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

    library(scatterplot3d)
    i3d <- scatterplot3d(iris[, 2:4], color=as.numeric(iris[, 5]), type="h", pch=14 + as.numeric(iris[, 5]), xlab="Sepal.Width", ylab="", zlab="Petal.Width")
    dims <- par("usr")
    x <- dims[1]+ 0.82*diff(dims[1:2])
    y <- dims[3]+ 0.1*diff(dims[3:4])
    text(x, y, "Petal.Length", srt=40)
    legend(i3d$xyz.convert(3.8, 6.5, 1.5), col=1:3, pch=(14 + 1:3), legend=levels(iris[, 5]), bg="white")
    Screen Shot 2019-01-23 at 9.31.13 PM.png
    Figura Datos de\(\PageIndex{8}\) votación del capítulo anterior representados con la función coplot ().

    (Aquí se utilizaron algunos esfuerzos adicionales para hacer que la etiqueta del eje y se inclinara).

    Estas gráficas de dispersión 3D se ven atractivas, pero ¿y si algunos puntos se ocultaran a la vista? ¿Cómo rotar y encontrar la mejor proyección? Biblioteca RGL ayudará a crear la gráfica 3D dinámica:

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

    library(rgl)
    plot3d(iris[, 1:3], col=as.numeric(iris[, 5]))

    Por favor, ejecute estos comandos usted mismo. El tamaño de ventana y proyección en parcelas RGL se controlan con ratón. Eso ayudará a entender mejor la posición de cada punto. En el caso de los datos del iris, es visible claramente que una de las especies (Iris setosa) es más distinta que otras dos, y el carácter más “partidor” es la longitud de los pétalos (Pétal.Longitud). Hay cuatro caracteres en la parcela, debido a que se utilizó el color para distinguir especies. Para guardar la gráfica RGL actual, deberá ejecutar la función rgl.snapshot () o rgl.postscript (). Tenga en cuenta también que el paquete RGL depende de la biblioteca OpenGL externa y, por lo tanto, de algunos sistemas, es posible que se requieran instalaciones adicionales.

    Screen Shot 2019-01-23 a las 9.33.12 PM.png
    Figura Gráfica\(\PageIndex{9}\) ternaria para datos de iris.

    Otra posibilidad 3D es cloud () a partir del paquete de celosía. Es una gráfica estática con el código relativamente pesado pero importante es que el usuario pueda usar diferentes rotaciones (Figura 7.2.1):

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

    library(lattice)
    p <- cloud(Sepal.Length ~ Petal.Length * Petal.Width, data=iris, groups=Species, par.settings=list(clip=list(panel="off")), auto.key=list(space="top", columns=3, points=TRUE))
    update(p[rep(1, 4)], layout=c(2, 2), function(..., screen) panel.cloud(..., screen=list(z=c(-70, 110)[current.column()], x=-70, y=c(140, 0)[current.row()])))
    Screen Shot 2019-01-23 a las 9.34.57 PM.png
    Figura Gráfica de dispersión 3D\(\PageIndex{10}\) estática de los datos del iris.

    This page titled 7.1: Cómo dibujar los datos multivariados 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.