Introdução

  • Toda anĆ”lise estatĆ­stica depende de boas estratĆ©gias para a visualização de dados;
  • Formas ineficientes de visualização colaboram para inferĆŖncias incorretas;
  • A aplicaƧnao de boas estratĆ©gias grĆ”ficas nĆ£o Ć© uma tarefa trivial.

Exemplos de funções para visualização de dados

Método função (graphics) no pacote (package)
3D scatterplot cloud (lattice)
Matrix of scatterplots pairs splom (lattice)
Bivariate density surface persp wireframe (lattice)
Contour plot contour, image contourLines, filled.contour contourplot (lattice) , contour (MASS), levelplot (lattice)
Parallel coord. plot parallel (lattice), parallelplot (MASS)

Exemplos de funções para visualização de dados

Método função (graphics) no pacote (package)
Star plot stars .
Segment plot stars .
Interactive 3D graphics (rggobi), (rgl)

Matriz de Dispersão

  • A matriz de dispersĆ£o Ć© uma generação do grĆ”fico de dispersĆ£o;
  • Ela deve ser aplicada para conjuntos contendo mĆŗltiplas variĆ”veis contĆ­nuas;
  • O grĆ”fico Ć© produzido pela combinação dos diagramas para todos os pares de variĆ”veis;

Exemplo 1 - Matriz de Dispersão

data(iris)
pairs(iris[101:150, 1:4])

Exemplo 2 - Matriz de Dispersão+

panel.d <- function(x, ...) {
   usr <- par("usr")
   on.exit(par(usr))
   par(usr = c(usr[1:2], 0, .5))
   lines(density(x))
}

Exemplo 2 - Matriz de Dispersão+

x <- scale(iris[101:150, 1:4])
r <- range(x)
pairs(x, diag.panel = panel.d, xlim = r, ylim = r)

Exemplo 3 - Matriz de Dispersão via Lattice

library(lattice)
splom(iris[101:150, 1:4])

splom(iris[,1:4], groups = iris$Species)

splom(~iris[1:4], groups = Species, data = iris,
col = 1, pch = c(1, 2, 3), cex = c(.5,.5,.5))

GrƔficos de Superfƭcie e 3D

  • Visualização de superfĆ­cie pode ser realizada de diversas maneiras;
  • Habitualmente, usuĆ”rios buscar criar grĆ”ficos 3D;
  • GrĆ”ficos 3D sĆ£o problemĆ”ticos quando apresentados estaticamente;

Exemplo - Normal Bivariada

\[ f(x,y) = \frac{1}{2\pi}e^{-\frac{1}{2}(x^2 + y^2)} , (x,y) \in \Re^{2}\]

Define-se, então a função bivariada e determinam-se seus valores em um grid:

f <- function(x,y) {
  z <- (1/(2*pi)) * exp(-.5 * (x^2 + y^2))
}
y <- x <- seq(-3, 3, length=50)
z <- outer(x, y, f)

Normal Bivariada

persp(x, y, z)

Normal Bivariada

persp(x, y, z, theta=45, phi=30, expand=0.6, ltheta=120, shade=0.75,
      ticktype="detailed", xlab="X", ylab="Y", zlab=expression(f(x,y)))

Outras funƧƵes para grƔficos de superfƭcies

GrÔficos de superfícies podem ser feitos usando a função wireframe (lattice)

O grÔfico a seguir mostra a distribuição normal multivariada usando o wireframe

Normal Bivariada - wireframe

library(lattice)
wireframe(z)

GrÔficos de Dispersão 3D

  • A função cloud produz grĆ”ficos de dispersĆ£o 3D;
  • Uma possĆ­vel aplicação desse tipo de grĆ”fico Ć© explorar de existem aglomerados ou grupos nos dados;
  • O problema deste tipo de visualização Ć© a perda de informação em representar informaƧƵes 3D em um plano 2D.

Nuvem de Pontos

library(lattice)
cloud(Petal.Length ~ Sepal.Length * Sepal.Width, data=iris, groups=Species)

Nuvem de Pontos

cloud(Sepal.Length~Petal.Length*Petal.Width, data=iris, groups=Species,
      pch=1:3, zlab="SL", screen=list(z=30, x=-75, y=0))

GrƔficos de Contorno

  • GrĆ”ficos de contorno representam uma superfĆ­cie 3D \((x,y,f(x,y))\) em um plano pela projeção das curvas de nĆ­vel \(f(x,y) = c\) para uma constante c;
  • As funƧƵes countour(graphics) e countorplot(lattice) podem ser utilizadas para isso;
  • Utilizaremos o conjunto volcano como exemplo. Ele Ć© uma matriz de 87x61 contendo informaƧƵes topograficas do vulcĆ£o de Maunga Whau.

GrƔfico de Contorno I

contour(volcano, asp = 1, labcex = 1)

GrƔfico de Contorno II

library(lattice)
contourplot(volcano) 

GrƔficos de Contorno Preenchidos

  • Ɖ possĆ­vel fazer um grĆ”fico de contorno com um efeito 3D e mostrĆ”-lo em 2D sobrepondo as linhas de contorno com uma cor correspondente a altura;
  • Um exemplo utilizarĆ” a função contour;
  • O exemplo seguinte utilizarĆ” a função filledcontour;
  • O exemplo final utilizarĆ” a função levelplot;

GrƔfico de Contorno Preenchido I

image(volcano, col = terrain.colors(100), axes = FALSE)
contour(volcano, levels = seq(100,200,by = 10), add = TRUE)

GrƔfico de Contorno Preenchido II

filled.contour(volcano, color = terrain.colors, asp = 1)

GrƔfico de Contorno Preenchido III

levelplot(volcano)

Visualização de Bases Volumosas

  • As opƧƵes acima podem ser utilizadas em qualquer conjunto de dados;
  • Grandes bases de dados terĆ£o sua visualização afetada;
  • O pacote hexbin possui uma implementação que incorpora densidade dos dados em seus diagramas.

Base de Dados Volumosa I

x <- matrix(rnorm(2e6), nc=2)
plot(x, xlab='Dim 1', ylab='Dim 2')

Base de Dados Volumosa II

library(hexbin)
plot(hexbin(x), xlab='Dim 1', ylab='Dim 2')

Curvas de Andrews:

Se \(X_1, \dots, X_n \in R^d\), uma idéia de visualização em duas dimensões é projetar cada vetor em uma função real. As "Curvas de Andrews" mapeiam a observação \(x_i = x_{i1}, \dots, x_{id}\) na função:

\[ f_{i}(t) = \frac{x_{i1}}{\sqrt{2}} + x_{i2}\sin{t} + {x_{i3}}\cos{t} + {x_{i4}}\sin{2t} + {x_{i5}}\cos{2t} + \dots\]

\[ = \frac{x_{i1}}{\sqrt{2}} + \sum_{1 \leq k \leq d/2} x_{i,2k}\sin{kt} + \sum_{1 \leq k \leq d/2}x_{i,2k+1}\cos{kt} \]

\[ -\pi \leq t \leq \pi \]

Assim, cada observação é representada por sua projeção em um conjunto de funções base (ortogonais): \(\{ 2^{-1/2}, \{sin kt\}, \{cos kt\} \}\)

Curvas de Andrews

  • Banco de dados lefshape no pacote DAAG;
  • TrĆŖs medidas serĆ£o consideradas correspondentes a pontos no \(\Re^{3}\)
  • Para representar as curvas, defina uma função para computar \(f_{i}(t)\) para pontos arbritĆ”rios em \(\Re^{3}\) e \(-\pi \leq t \leq \pi\).

Curvas de Andrews

library(DAAG)
x <- with(leafshape17, cbind(bladelen, petiole, bladewid))
n <- nrow(x)
mins <- apply(x, 2, min)
maxs <- apply(x, 2, max)
r <- maxs - mins
y <- sweep(x, 2, mins)
y <- sweep(y, 2, r, "/")
x <- 2 * y - 1
a <- seq(-pi, pi, len=101)
dim(a) <- length(a)

Curvas de Andrews

f <- function(a, v) {
   v[1]/sqrt(2) + v[2]*sin(a) + v[3]*cos(a)
}

plot(0, 0, xlim=c(-pi, pi), ylim=c(-3,3), xlab="t",
     ylab="Andrews Curves", main="", type="n")
for (i in 1:n) {
   g <- leafshape17$arch[i] + 1
   y <- apply(a, MARGIN = 1, FUN = f, v = x[i,])
   lines(a, y, lty = g)
}
legend(3, c("Orthotropic", "Plagiotropic"), lty = 1:2)

Curvas de Andrews

Coordenadas Paralelas

  • GrĆ”ficos com coordenadas paralelas produzem uma outra abordagem para vizualição de dados multivariados'
  • Os grĆ”ficos em coordenadas paralelas sĆ£o implementados pela função parallelplot no pacote lattice;
  • Uma implementação alternativa Ć© a função parcoord no pacote MASS.

Coordenadas Paralelas I

library(DAAG)
library(MASS)
x <- crabs[seq(5, 200, 5), ] 

Coordenadas Paralelas I

parcoord(x[4:8])

Coordenadas Paralelas II

library(lattice)
x <- crabs[seq(5, 200, 5), ]
a <- x$CW * x$CL
x[4:8] <- x[4:8] / sqrt(a)

Coordenadas Paralelas II

parallelplot(~x[4:8] | sp*sex, x)

Segmentos, estrelas e outras representaƧƵes

  • Dados Multivariados podem ser representados por um glifo ou Ć­cone de duas dimensƵes;
  • Algumas representaƧƵes com Ć­cones podem ser melhor apresentadas em uma tabela. Entretanto, nĆ£o Ć© muito prĆ”tico quando se tem uma quantidade muito grande dados.
  • A seguir mostram-se exemplos usando star plots e segment plot. Esse tipo de grĆ”fico Ć© fĆ”cilmente obtido no R usando a função stars(graphics).

GrƔfico de Estrela/Segmento

library(MASS) 
x <- subset(crabs[seq(5, 200, 5), ], sex=='M')
x[4:8] <- x[4:8] / sqrt(x$CW * x$CL)
stars(x[4:8], draw.segments = TRUE, labels = as.character(x$sp))

ReferĆŖncias

CapĆ­tulo 4 - Maria Rizzo - Statistical Computing with R