Capítulo I. Comparações


A Análise Estatística Multivariada está preocupada em analisar e compreender dados em altas dimensões. Suponhimos que recebemos um conjunto \(\{x_i\}_{i=1}^n\) de \(n\) observações de uma variável vetorial \(X\) em \(\mathbb{R}^p\). Ou seja, suponhamos que cada observação \(x_i\) tem \(p\) dimensões: \[ x_i=\big(x_{i1},x_{i2},\cdots,x_{ip}\big), \]

e que seja um valor observado de uma variável vetorial \(X\in\mathbb{R}^p\). Portanto, \(X\) é composto por \(p\) variáveis aleatórias: \[ X=\big(X_1,X_2,\cdots,X_p\big), \]

onde \(X_j\), para \(j=1,\cdots,p\), é uma variável aleatória unidimensional. Como começamos a analisar esse tipo de dados? Antes de investigar perguntas sobre quais inferências podemos alcançar dos dados, devemos pensar em como olhar para os dados.

Isso envolve técnicas descritivas. Perguntas que poderíamos responder por técnicas descritivas são:
• Existem componentes de \(X\) que estão mais espalhados do que outras?
• Existem alguns elementos de \(X\) que indicam subgrupos dos dados?
• Existem outliers nos componentes do \(X\)?
• Quão normal é a distribuição dos dados?
• Existem combinações lineares de baixa dimensão de \(X\) que mostram comportamento não normal?

Uma dificuldade de métodos descritivos para dados alto-dimensionais é o sistema percepcional humano. Nuvens de pontos em duas dimensões são fáceis de entender e interpretar. Com técnicas de computação interativas modernas, temos a possibilidade de ver as rotações em tempo real e, portanto, perceber também dados tridimensionais. Uma técnica deslizante, conforme descrito em Härdle and Scott (1992), pode dar uma visão sobre estruturas de quatro dimensões apresentando contornos dinâmicos de densidade 3D, uma vez que a quarta variável é alterada sobre sua faixa.

Um salto qualitativo em dificuldades de apresentação ocorre para dimensões maiores ou iguais a 5, a menos que a estrutura de alta dimensão possa ser mapeada em componentes dimensionais inferiores (Klinke & Polzehl, 1995). Recursos como subgrupos ou outliers em cluster, no entanto, podem ser detectados usando uma análise puramente gráfica. Neste capítulo, investigamos as técnicas básicas descritivas e gráficas, permitindo uma simples análise exploratória de dados.

Começamos a exploração de um conjunto de dados usando boxplots. Um boxplot é um dispositivo univariado simples que detecta componente de outliers por componente e que pode comparar distribuições dos dados entre diferentes grupos. Em seguida, várias técnicas multivariadas são introduzidas (rostos de fluros, curvas de Andrews e parcelas de coordenadas paralelas (PCPs)) que fornecem gráficos abordando as perguntas formuladas acima. As vantagens e as desvantagens de cada uma dessas técnicas estão estressadas.

Duas técnicas básicas para estimar as densidades também são apresentadas: histogramas e estimação kernel de densidades. Uma estimativa kernel da densidade fornece uma visão rápida sobre a forma da distribuição dos dados. Mostramos que as estimativas kernel de densidades (KDES) superam algumas das desvantagens dos histogramas.

Finalmente, scatterplots são mostrados por serem muito úteis para mostrar variáveis bivariadas ou triviádas uns contra os outros: ajudam a entender a natureza do relacionamento entre variáveis em um conjunto de dados e permitir a detecção de grupos ou aglomerados de pontos. Os gráficos do esboço ou parcelas de matriz são a visualização de vários espalhados bivariados na mesma exibição. Eles ajudam a detectar estruturas em dependências condicionais, escovando as parcelas. Outliers e observações que precisam de atenção especial podem ser descobertas com curvas de Andrews e PCPs. Este capítulo termina com uma análise explicativa dos dados de um estudo habitacional em Boston (Boston Housing).


I.1. Boxplots


Exemplo I.1.

Dados do banco suíço (Swiss bank) consistindo em 200 observações cada uma de seis medidas nas notas bancárias suíças. A primeira metade dessas medições é de notas de banco genuínas, a outra metade são de notas bancárias falsificadas.


library(mclust)
data(banknote) # carrega o conjunto de dados 
head(banknote) # exibe as primeiras seis linhas do conjunto de dados 
##    Status Length  Left Right Bottom  Top Diagonal
## 1 genuine  214.8 131.0 131.1    9.0  9.7    141.0
## 2 genuine  214.6 129.7 129.7    8.1  9.5    141.7
## 3 genuine  214.8 129.7 129.7    8.7  9.6    142.2
## 4 genuine  214.8 129.7 129.6    7.5 10.4    142.0
## 5 genuine  215.0 129.6 129.7   10.4  7.7    141.8
## 6 genuine  215.7 130.8 130.5    9.0 10.1    141.4


Figura I.1: Uma nota velha suíça de 1000 francos.


As medidas oficiais, conforme indicado na Figura I.1, são as seguintes:
\(X_1\) = comprimento da nota
\(X_2\) = largura da dorda esquerda
\(X_3\) = largura da borda direita
\(X_4\) = distância do quadro interno para a borda inferior
\(X_5\) = distância do quadro interno para a borda superior
\(X_6\) = comprimento da diagonal da imagem central.

Todas as medidas são em milímetros.

Estes dados são retirados de Flury and Riedwyl (1988). O objetivo é estudar como essas medições podem ser usadas para determinar se uma nota é genuína ou falsificada.


O boxplot é uma técnica gráfica que exibe a distribuição de variáveis. Isso nos ajuda a ver a localização, a inclinação (skewness), a propagação, o comprimento da cauda e os pontos periféricos.

É particularmente útil para comparar diferentes lotes. A Boxplot é uma representação gráfica do resumo de cinco números. Para introduzir o resumo desses cinco números, vamos considerar por um momento um conjunto de dados minimensional menor: a população das 15 maiores cidades mundiais em 2006.


Cidade = c("Tokyo","Mexico city","Seoul","New York","São Paulo","Bombay","Delhi",
           "Shanghai","Los Angeles","Osaka", "Jakarta","Calcutta","Cairo",
           "Manila","Karachi")
Country = c("Japan","Mexico","South Korea","USA","Brazil","India","India","China",
            "USA","Japan","Indonesia","India","Egypt","Philippines","Pakistan")
Pop = c(3420,2280,2230,2190,2020,1985,1970,1815,1800,1680,1655,1565,1560,
        1495,1430) # por 10.000 habitantes
Order =  c(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1)

cbind(Cidade,Country,Pop,Order)
##       Cidade        Country       Pop    Order
##  [1,] "Tokyo"       "Japan"       "3420" "15" 
##  [2,] "Mexico city" "Mexico"      "2280" "14" 
##  [3,] "Seoul"       "South Korea" "2230" "13" 
##  [4,] "New York"    "USA"         "2190" "12" 
##  [5,] "São Paulo"   "Brazil"      "2020" "11" 
##  [6,] "Bombay"      "India"       "1985" "10" 
##  [7,] "Delhi"       "India"       "1970" "9"  
##  [8,] "Shanghai"    "China"       "1815" "8"  
##  [9,] "Los Angeles" "USA"         "1800" "7"  
## [10,] "Osaka"       "Japan"       "1680" "6"  
## [11,] "Jakarta"     "Indonesia"   "1655" "5"  
## [12,] "Calcutta"    "India"       "1565" "4"  
## [13,] "Cairo"       "Egypt"       "1560" "3"  
## [14,] "Manila"      "Philippines" "1495" "2"  
## [15,] "Karachi"     "Pakistan"    "1430" "1"


No resumo de cinco números, calculamos o limite superior do quartil \(F_U\), o menor quartil \(F_L\), a mediana e os extremos. Lembre-se de que as estatísticas de ordem \(\{x_{(1)},x_{(2)},\cdots,x_{(n)}\}\) são um conjunto de valores ordenados \(x_1,x_2,\cdots,x_n\) onde \(x_{(1)}\) denota o mínimo e \(x_{(n)}\) o máximo.

A mediana \(M\) normalmente corta o conjunto de observações em duas partes iguais e é definida como \[\begin{equation*} M=\left\{ \begin{array}{rcl} x_{((n+1)/2)} & \mbox{caso} & n \; \mbox{ímpar} \\ \frac{1}{2}\left( x_{(n/2)}+ x_{(n/2+1)} \right) & \mbox{caso} & n \; \mbox{par} \end{array} \right.\cdot \end{equation*}\]

Os quartis cortam o conjunto em quatro partes iguais, que são frequentemente chamadas de quartos. Usando uma definição que remonta a Hoaglin, Mosteller and Tukey (1983), a definição de uma mediana pode ser generalizada para quartos, oitos, etc. Considerando as estatísticas da ordem podemos definir a profundidade de um valor de dados \(x_{(i)}\) como \(\min\{i,n-i+1\}\). Se \(n\) é ímpar, a profundidade da mediana é \(\frac{n+1}{2}\). Se \(n\) é mesmo, o \(\frac{n+1}{2}\) é uma fração. Assim, a mediana é determinada como a média entre os dois valores das estatísticas dessas ordens, isto é, \(M=\frac{1}{2}\left( x_{(n/2)}+ x_{(n/2+1)}\right)\). Em nosso exemplo, temos \(n= 15\) daí a mediana \(M=x_{(8)}= 1815\).

Nós procedemos da mesma maneira para obter os quartis. Tome a profundidade da mediana e calcule \[ \mbox{profundidade do quartis} = \dfrac{[\mbox{profundidade da mediana}]+1}{2}, \]

onde \([z]\) denota o maior inteiro menor ou igual a \(z\).

Em nosso exemplo isso é 4.5 e, portanto, leva aos dois quartis \[ F_L = \dfrac{1}{2}\big(x_{(4)}+x_{(5)} \big) \] e

\[ F_U = \dfrac{1}{2}\big( x_{(11)}+x_{(12)}\big), \]

recordando que uma profundidade é uma fração correspondente à média dos dois valores de dados mais próximos.

Definindo \(d_F=F_U-F_L\) as barras externas à caixa \(F_U+1.5 d_F\) e \(F_L-1.5 d_F\) são as fronteiras além do qual um ponto é considerado como um outlier. Para os \(n=15\) pontos de dados os quartos são \(1610 = \frac{1}{2}\big(x_{(4)}+x_{(5)}\big)\) e \(2105=\frac{1}{2}\big(x_{(11)}+x_{(12)}\big)\). Portanto, no exemplo acima as informações para a representação do boxplot são calculadas da seguinte forma: \[\begin{equation*} \begin{array}{rcl} d_F & = & F_U-F_L \; = \; 2105-1610 \; = \; 495 \\ F_L - 1.5 d_L & = & 1610-1.5\times 495 \; = \; 867.5\\ F_U+1.5 d_F & = & 2105+1.5\times 495 \; = \; 2847.5\cdot \end{array} \end{equation*}\]

Como Tóquio está além das barras externas é considerado um outlier. O mínimo e o máximo são chamados de extremos. A média é definida como \[ \overline{x}=\frac{1}{n}\sum_{i=1}^n x_i, \]

que é 1939.7 em nosso exemplo. A média é uma medida de localização.

A mediana (1815), os quartos (1610; 2105) e os extremos (1430; 3420) constituem informações básicas sobre os dados. A combinação desses cinco números leva ao resumo de cinco números.


I.1.1. Construção do Boxplot


  1. Desenhe uma caixa com bordas (bordas) em \(F_L\) e \(F_U\), ou seja, 50% dos dados estão nesta caixa.
  2. Desenhe a mediana como uma linha sólida.
  3. Desenhe “bigodes” de cada extremidade da caixa para o ponto mais remoto que não é um outlier.
  4. Mostre outliers como pontos, dependendo se eles estão fora de \(F_U\pm 1.5 d_F\), respectivamente.


par(mar=c(4,4,3,1))
boxplot(Pop, pch = 19, main = "População das 15 maiores cidades mundiais em 2006 \n por 10.000 habitantes")
grid()


No exemplo das cidades mundiais, os pontos de corte, barras nos extremos, estão em 867.5 e 2847.5, portanto, podemos indicar as cidades de Karachi e Cidade do México. Podemos ver na figura acima que os dados estão muito distorcidos: a metade superior dos dados acima da mediana é mais espalhada do que a metade inferior abaixo da mediana, os dados contêm um ponto fora do padrão (outlier) marcado como um círculo.

Os boxplots são ferramentas muito úteis para comparar lotes de dados. A localização relativa da distribuição de diferentes lotes nos diz muito sobre os próprios lotes. Antes de voltarmos aos dados do banco suíço, comparemos a economia de combustível de veículos de diferentes países.


Exemplo I.2.

O conjunto de dados aprsentado em Chambers, Cleveland, Kleiner & Tukey 1983 consistindo de 13 variáveis medidas para 74 tipos de carros:
\(X_1\): P preço,
\(X_2\): M Milhagem (em milhas por galão),
\(X_3\): R78 Registro de reparos de 1978 (classificado em uma escala de 5 pontos; 5 melhor, 1 pior),
\(X_4\): R77 Registro de repareos de 1977 (escala anterior),
\(X_5\): H Headroom (em polegadas),
\(X_6\): R Folga do banco traseiro (distância do banco da frente para trás ao banco traseiro, em polegadas),
\(X_7\): Tr Espaço do tronco (em pés cúbicos),
\(X_8\): W Peso (em libras),
\(X_9\): L Comprimento (em polegadas),
\(X_{10}\): T Diâmetro de giro (autorização necessária para fazer uma inversão de marcha, em pés),
\(X_{11}\): D Deslocamento (em polegadas cúbicas),
\(X_{12}\): G Relação de transmissão para alta velocidade,
\(X_{13}\): C Sede da empresa (1 para U.S., 2 para Japan, 3 para Europe).


car = read.table("http://leg.ufpr.br/~lucambio/MSM/CarData.txt", header = TRUE, sep = " ")
head(car)
##            Model    P  M R78 R77   H    R Tr    W   L  T   D    G C
## 1      Audi-5000 9690 17   5   2 3.0 27.0 15 2830 189 37 131 3.20 1
## 2       Audi-Fox 6295 23   3   3 2.5 28.0 11 2070 174 36  97 3.70 3
## 3       BMW-320i 9735 25   4   4 2.5 26.0 12 2650 177 34 121 3.64 3
## 4  Buick-Century 4816 20   3   3 4.5 29.0 16 3250 196 40 196 2.93 1
## 5  Buick-Electra 7827 15   4   4 4.0 31.5 20 4080 222 43 350 2.41 1
## 6 Buick-Le-Sabre 5788 18   3   4 4.0 30.5 21 3670 218 43 231 2.73 1


Os dados são da segunda coluna do arquivo de dados e mostram a milhagem (milhas por galão) de carros americanos, japoneses e europeus. Os resumos de cinco números para esses conjuntos de dados são \(\{12,16.8,18.8,22,30\}\), \(\{18,22,25,30.5,35\}\) e \(\{14,19,23,25,28\}\) para carros americanos, japoneses e europeus, respectivamente.


Sede.da.empresa = factor(car$C, levels = 1:3, labels = c("U.S","Japan", "EU"))
boxplot(car$M~Sede.da.empresa, xlab = "Sede da empresa", ylab = "Milhagem (em milhas por galão)")
grid()


As seguintes conclusões podem ser feitas:
• Os carros japoneses alcançam maior eficiência de combustível do que os carros europeus e europeus.
• Existe um carro extreno ou outlier, um carro muito eficiente em combustível (VW-Rabbit Golf Diesel).
• O corpo principal dos dados dos carro dos EUA (a caixa) está abaixo dos dados dos carros japoneses.
• O pior carro japonês é mais eficiente em termos de combustível do que quase 50% dos carros dos EUA.
• A propagação carros japoneses e dos carros americanos é quase igual.
• A mediana dos dados japoneses está acima da dos dados europeus e dos dados dos EUA.



I.2. Histogramas


Histogramas são estimativas da função de densidade. Uma estimativa da função de densidade fornce uma boa impressão da distribuição dos dados. Em contraste com os boxplots, as estimativas de densidades mostram possíveis multimodalidade dos dados. A ideia é representar localmente a densidade dos dados contando o número de observações em uma seqüência de intervalos consecutivos (caixas) com origem \(x_0\).

Seja \(B_j(x_0,h)\) a caixa de comprimento \(h\) que é o elemento de uma grade de caixas começando em \(x_0\): \[ B_j(x_0,h) = [x_0+(j-1)h, \, x_0+jh), \qquad j\in \mathbb{Z}, \] onde \([\cdot,\cdot)\) denota o intervalos fechado à esquerda e aberto à direita.

Se \(\{x_i\}_{i=1}^n\) é uma amostra independentes identicamente distribuída (i.i.d.) com densidade \(f\), o histograma é definido como segue: \[ \widehat{f}_h(x) = \frac{1}{n}\frac{1}{h}\sum_{j\in\mathbb{Z}}\sum_{i=1}^n \mbox{I}\{x_i\in B_j(x_0,h)\} \mbox{I}\{x\in B_j(x_0,h)\}\cdot \]

Na soma acima a primeira função indicadora \(\mbox{I}\{x_i\in B_j(x_0,h)\}\) conta o número de observações que caem na caixa \(B_j(x_0,h)\). A segunda função indicadora é responsável por localizar as contagens em torno de \(x\). O parâmetro \(h\) é um parâmetro de suavização ou localização e controla a largura dos compartimentos do histograma. Um \(h\) muito grande leva a blocos muito grandes e, portanto, a um histograma muito desestruturado. Por outro lado, um \(h\) muito pequeno fornece uma estimativa muito variável com muitos picos sem importância.


par(mar=c(4,4,3,1))
hist(banknote$Diagonal[banknote$Status=="genuine"], xlab = "Diagonal", ylab = "Histograma", main = "Diagonal de notas de banco genuínas. Histogramas", breaks = 5)
box()


A detecção de modas requer um ajuste fino da largura de caixa ou banda. Usando métodos da metodologia de suavização (Härdle, Müller, Sperlich, & Werwatz, 2004) pode-se encontrar uma largura binária ótima \(h\) para \(n\) observações: \[ h_{opt} = \left(\dfrac{24\sqrt{\pi}}{n}\right)^{1/3}\cdot \]

Infelizmente, a largura binária \(h\) não é o único parâmetro que determina as formas de \(\widehat{f}\). O deslocamento da origem \(x_0\) pode criar diferentes histogramas.

Esta propriedade dos histogramas contradiz fortemente o objetivo de apresentar características de dados. Obviamente, os mesmos dados são representados de forma bastante diferente pelos quatro histogramas. Um remédio foi proposto por Scott (1985): “Average the shifted histograms!”. O resultado é apresentado na figura abaixo. Aqui foram utilizadas todas as observações de notas bancárias (genuínas e falsificadas). O chamado histograma deslocado de média não depende mais da origem e mostra uma clara bimodalidade das diagonais das notas suíças.


par(mar=c(4,4,3,1))
hist(banknote$Diagonal, xlab = "Diagonal", ylab = "Histograma", main = "Diagonal de notas de banco genuínas. Histogramas")
box()



I.3. Estimação kernel de densidades


As principais dificuldades da estimação do histograma podem ser resumidas em quatro críticas:
• Determinação da largura de banda \(h\), que controla a forma do histograma,
• Escolha da origem \(x_0\), que também influencia em certa medida a forma,
• Perda de informação, uma vez que as observações são substituídas pelo ponto central do intervalo em que caem,
• A função de densidade subjacente é muitas vezes assumida para ser suave, mas o histograma não é suave.

Rosenblatt (1956), Whittle (1958) e Parzen (1962) desenvolveram uma abordagem que evita as três últimas dificuldades. Primeiro, uma função de kernel suave em vez de uma caixa é usada como o bloco básico de construção. Em segundo lugar, a função suave é centrada diretamente sobre cada observação.

Vamos estudar este refinamento, supondo que \(x\) seja o valor central de uma caixa. O histograma pode, de fato, ser reescrito como \[ \widehat{f}_h(x) = \frac{1}{n}\frac{1}{h}\sum_{i=1}^n \mbox{I}\big(|x-x_i|\leq h/2 \big)\cdot \]

Se difinimos \(K(u)=\mbox{I}\big(|u|\leq 1/2\big)\) a função acima muda para \[ \widehat{f}_h(x)=\frac{1}{n}\frac{1}{h}\sum_{i=1}^n K\left(\dfrac{x-x_i}{h} \right)\cdot \]

Esta é a forma geral do estimador de kernel. Permitindo funções de kernel mais suaves como o kernel quártico, \[ K(u)=\frac{15}{16}(1-u^2)^2 \mbox{I}\big(|u|\leq 1\big), \] e calculando em \(x\) não apenas em centros de caixa ou banda nos fornece o estimador de densidade do kernel. Os estimadores de kernel também podem ser derivados através da média ponderada de pontos arredondados (WARPing) ou pela média de histogramas com origens diferentes, ver Scott (1985).

A seguir apresentamos alguns kernels comumente usados:
Uniforme: \(K(u)=\frac{1}{2}\mbox{I}\big(|u|\leq 1\big)\),
Triangular: \(K(u)=\big(1-|u|\big)\mbox{I}\big(|u|\leq 1\big)\),
Epanechnikov: \(K(u)=\frac{3}{4}\big(1-u^2\big)\mbox{I}\big(|u|\leq 1\big)\),
Quartic ou Biweght: \(K(u)=\frac{15}{16}\big(1-u^2\big)^2\mbox{I}\big(|u|\leq 1\big)\),
Gaussiano: \(K(u)=\frac{1}{\sqrt{2\pi}}\exp\Big( -\frac{u^2}{2}\Big)\).

Diferentes kernels geram diferentes formas da densidade estimada. O parâmetro mais importante é a chamada largura de banda \(h\) e pode ser otimizada, por exemplo, por validação cruzada; ver Härdle (1991) para detalhes. O método de validação cruzada minimiza o erro quadrático integrado.

Esta medida de discrepância é baseada nas diferenças quadradas \(\big( \widehat{f}_h(x) - f(x)\big)^2\). A média desses desvios quadrados sobre uma grade de pontos \(\{x_\ell\}_{\ell=1}^L\) leva a \[ \dfrac{1}{L}\sum_{\ell=1}^L \Big( \widehat{f}_h(x_\ell) - f(x_\ell)\Big)^2 \]

Assintoticamente, se este tamanho de grade tende a zero, obtemos o erro quadrático integrado: \[ \int \Big(\widehat{f}_h(x) - f(x)\Big)^2 \mbox{d}x\cdot \]

Na prática, verifica-se que o método consiste em selecionar uma largura de banda que minimize a função de validação cruzada \[ \int \widehat{f}_h^2(x)\mbox{d}x - 2\sum_{i=1}^n \widehat{f}_{h,i}(x_i), \]

onde \(\widehat{f}_{h,i}\) é a estimativa da densidade obtida usando todos os pontos de dados, exceto para a \(i\)-ésima observação. Ambos os termos na função acima envolvem somas duplas. O cálculo pode, portanto, ser lenta. Existem muitos outros métodos de seleção de largura de banda. Provavelmente, a maneira mais rápida de calcular isso é se referir a alguma distribuição de referência razoável. A ideia de usar a distribuição Normal como referência, por exemplo, remonta a Silverman (1986). A escolha resultante de \(h\) é chamada de regra prática.

Para o kernel gaussiano e uma distribuição de referência Normal, a regra geral é escolher \[ h_G=1.06 \widehat{\sigma}n^{-1/5} \]

onde \(\widehat{\sigma}=\sqrt{n^{-1}\sum_{i=1}^n (x_i-\overline{x})^2}\) denota o desvio padrão da amostra. Esta escolha de \(h_G\) otimiza a distância quadrada integrada entre o estimador e a densidade real. Para o kernel quártico, precisamos transformar a expressão acima. A regra geral modificada é: \[ h_Q = 2.62 h_G\cdot \]


dens = banknote$Diagonal[banknote$Status=="genuine"]
densidade = density(dens)
par(mar=c(4,4,3,1))
plot(densidade, xlim = c(137,143), col = "red", xlab = " ",
     main = "Densidade estimada: notas genuínas e falsas", ylab = "")
rug(dens, col = "red")
dens1 = banknote$Diagonal[banknote$Status=="counterfeit"]
densidade1 = density(dens1)
lines(densidade1, col = "black", lty = 2)
rug(dens1)


A figura acima mostra as estimativas automáticas de densidade para as diagonais das notas falsas e genuínas. A densidade à esquerda é a densidade correspondente à diagonal dos dados falsificados. A separação é claramente visível, mas também há uma sobreposição. O problema de distinguir entre as notas falsas e genuínas não é resolvido apenas olhando para as diagonais das notas. A questão surge se uma melhor separação poderia ser alcançada usando não apenas as diagonais, mas mais uma ou duas variáveis do conjunto de dados. A estimativa de densidades dimensionais mais altas é análoga à de uma dimensão. Mostramos uma estimativa de densidade bidimensional para \(X_5\) e \(X_6\) na figura a continuação. As linhas de contorno indicam a altura da densidade. Vê-se duas distribuições separadas neste espaço dimensional superior, mas elas ainda se sobrepõem até certo ponto.


library(MASS)
par(mar=c(4,4,3,1))
densidade.2d = kde2d(banknote$Bottom,banknote$Top, n =100)
contour(densidade.2d)



I.4. Gráficos de dispersão


Os gráficos de dispersão são gráficos bivariados ou trivariados de variáveis entre si. Eles nos ajudam a entender as relações entre as variáveis de um conjunto de dados. Uma dispersão inclinada para baixo indica que, à medida que aumentamos a variável no eixo horizontal, a variável no eixo vertical diminui. Uma afirmação análoga pode ser feita para dispersões ascendentes.

A figura a seguir mostra a 5ª coluna (Bootom) dos dados do banco em relação à 6ª coluna (Diagonal). A dispersão é descendente. Como já sabemos da seção anterior sobre comparação marginal, uma boa separação entre notas bancárias genuínas e falsificadas é visível para a variável diagonal. A sub-nuvem na metade superior em preto corresponde às notas bancárias falsificadas, as genuínas estão em vermelho. Como observado anteriormente, essa separação não é distinta, pois os dois grupos se sobrepõem um pouco.


par(mar=c(4,4,3,1), pch = 19)
plot(banknote$Bottom, banknote$Top, xlab = "5ª coluna (Bottom)", ylab = "6ª coluna (Diagonal)")
points(banknote$Bottom[banknote$Status=="genuine"], banknote$Top[banknote$Status=="genuine"], col = "red")


Se estendermos o gráfico de dispersão bidimensional adicionando uma terceira variável, por exemplo. \(X_4\) (menor distância ao quadro interno), obtemos o gráfico de dispersão em três dimensões conforme mostrado na figura abaixo. Torna-se evidente a partir da localização das nuvens de pontos que uma melhor separação é obtida.


color = c(rep("red", length(banknote$Top[banknote$Status=="counterfeit"])),
          rep("blue", length(banknote$Top[banknote$Status=="genuine"])))
scatterplot3d::scatterplot3d(banknote$Top, banknote$Bottom, banknote$Diagonal, 
                             mar=c(3,3,0,2), pch = 19, xlab = expression(X[6]),
                             ylab = expression(X[5]), zlab = expression(X[7]), 
                             color = color)
grid()


A fórmula para tal plano de separação é uma combinação linear dos elementos do vetor de observação: \[ a_1 x_1+ a_2 x_2 + \cdots + a_6 x_6 = c, \] sendo \(c\) uma constante. O algoritmo que encontra automaticamente os pesos \((a_1,\cdots,a_6)\) será investigado no Capítulo XIV.

Vamos estudar ainda outra técnica: a matriz do gráfico de dispersão. Se quisermos desenhar todos os gráficos de dispersão bidimensionais possíveis para as variáveis, podemos criar o chamado draftman’s plot em homenagem a um relator que prepara rascunhos para discussões parlamentares. Semelhante ao gráfico de um desenhista, a matriz do gráfico de dispersão ajuda na criação de novas ideias e na construção de conhecimento sobre dependências e estruturas.

A figura a continuação mostra um gráfico de dispersão aplicado a todas as colunas contínuas do conjunto completo de dados do banco. Para facilitar a interpretação, distinguimos o grupo de notas falsas e genuínas por uma cor diferente: genuínas em azul e falsas em vermelho. Conforme discutido várias vezes anteriormente, a separabilidade dos dois tipos de notas é diferente para diferentes gráficos de dispersão. Não só é difícil realizar esta separação em, digamos, gráfico de dispersão entre duas das variáveis como também a linha de separação não é mais paralela a um dos eixos. A separação mais óbvia acontece nos gráficos de dispersão envolvendo a variável Diagonal \(X_6\), no banco de dados filtrado. A linha de separação aqui seria praticamente vertical. Observando a última coluna do gráfico vemos que a metade direita de cada um dos gráfico de dispersão mostra os pontos vermelhos razoavelmente bem separados dos ponos azuis.


par(mar=c(1,1,1,1))
pairs(~ . , data = banknote[,2:7], col = color, pch = 19)


O poder destes gráficos de dispersão está em sua capacidade de mostrar as conexões internas dos diagramas de dispersão.


I.5. Rostos de Chernoff-Flury


Se nos recebermos dados em forma numérica, tendemos a exibi-lo numericamente. Isso foi feito nas seções anteriores: uma observação \(x_1 =(1,2) )\) foi mostrado como o ponto \((1,2)\) em um sistema de coordenadas bidimensionais. Na análise multivariada, queremos entender dados em dimensões baixas (por exemplo, em uma tela 2D de computador), embora as estruturas estejam escondidas em dimensões altas. A exibição numérica de estruturas de dados usando coordenadas, portanto, termina em dimensões maiores que três.

Se estivermos interessados em condensar uma estrutura em elementos 2D, temos que considerar técnicas gráficas alternativas. Os rostos de Chernoff-Flury, por exemplo, fornece uma condensação de informações de alta dimensão em um simples “rosto”. De fato, os rostos são uma maneira simples de exibir graficamente dados de alta dimensão. O tamanho dos elementos de rosto, como pupilas, olhos, linha de cabelo superior e inferior, etc. são atribuídos a certas variáveis. A ideia de usar rostos volta para Chernoff (1973) e foi desenvolvida por Bernhard Flury. Seguimos o design descrito em Flury and Riedwyl (1988) que usa as seguintes características:

  1. Tamanho do olho direito
  2. Tamanho da pupila direita
  3. Posição da pupila direita
  4. Espaço do olho direito
  5. Posição horizontal do olho direito
  6. Posição vertical do olho direito
  7. Curvatura da sobrancelha direita
  8. Densidade da sobrancelha direita
  9. Posição horizontal da sobrancelha direita
  10. Posição vertical da sobrancelha direita
  11. Linha de cabelo superior direito
  12. Linha de cabelo inferior direito
  13. Linha direita do rosto
  14. Escuridão do cabelo direito
  15. Espaço direito do cabela
  16. Linha direita do nariz
  17. Tamanho à direita da boca
  18. Curvatura à direita da boca
  19. 19-36. Como 1-18, apenas para o lado esquerdo.
  20. Primeiro, cada variável que deve ser codificada em um elemento de face característica e transformada na escala \((0,1)\), isto é, o mínimo da variável corresponde a 0 e o máximo para 1. As posições extremas dos elementos faciais correspondem, portanto, correspondem a um determinado elemento de face “sorriso” ou “feliz”. O cabelo escuro pode ser codificado como 1, e cabelos loiros como 0 e assim por diante.

    Como exemplo, considere as observações 91-110 dos dados bancários (Exemplo I.1). Lembre-se de que o conjunto de dados bancários consiste em 200 observações de dimensão 6 onde, por exemplo, \(X_6\) é a diagonal da nota.


    library(aplpack)
    faces(as.matrix(banknote[91:110,2:7]), fill = TRUE, face.type = 1, nrow.plot = 2)

    ## effect of variables:
    ##  modified item       Var       
    ##  "height of face   " "Length"  
    ##  "width of face    " "Left"    
    ##  "structure of face" "Right"   
    ##  "height of mouth  " "Bottom"  
    ##  "width of mouth   " "Top"     
    ##  "smiling          " "Diagonal"
    ##  "height of eyes   " "Length"  
    ##  "width of eyes    " "Left"    
    ##  "height of hair   " "Right"   
    ##  "width of hair   "  "Bottom"  
    ##  "style of hair   "  "Top"     
    ##  "height of nose  "  "Diagonal"
    ##  "width of nose   "  "Length"  
    ##  "width of ear    "  "Left"    
    ##  "height of ear   "  "Right"


    Lembre-se também de que as observações 1-100 correspondem às notas genuínas e que as observações 101-200 correspondem às notas falsificadas.


    # Notas genuinas
    faces(as.matrix(banknote[1:100,2:7]), fill = TRUE, face.type = 1, nrow.plot = 2, ncol.plot = 5)

    ## effect of variables:
    ##  modified item       Var       
    ##  "height of face   " "Length"  
    ##  "width of face    " "Left"    
    ##  "structure of face" "Right"   
    ##  "height of mouth  " "Bottom"  
    ##  "width of mouth   " "Top"     
    ##  "smiling          " "Diagonal"
    ##  "height of eyes   " "Length"  
    ##  "width of eyes    " "Left"    
    ##  "height of hair   " "Right"   
    ##  "width of hair   "  "Bottom"  
    ##  "style of hair   "  "Top"     
    ##  "height of nose  "  "Diagonal"
    ##  "width of nose   "  "Length"  
    ##  "width of ear    "  "Left"    
    ##  "height of ear   "  "Right"


    # Notas falsificadas
    faces(as.matrix(banknote[101:200,2:7]), fill = TRUE, face.type = 1, nrow.plot = 2, ncol.plot = 5)

    ## effect of variables:
    ##  modified item       Var       
    ##  "height of face   " "Length"  
    ##  "width of face    " "Left"    
    ##  "structure of face" "Right"   
    ##  "height of mouth  " "Bottom"  
    ##  "width of mouth   " "Top"     
    ##  "smiling          " "Diagonal"
    ##  "height of eyes   " "Length"  
    ##  "width of eyes    " "Left"    
    ##  "height of hair   " "Right"   
    ##  "width of hair   "  "Bottom"  
    ##  "style of hair   "  "Top"     
    ##  "height of nose  "  "Diagonal"
    ##  "width of nose   "  "Length"  
    ##  "width of ear    "  "Left"    
    ##  "height of ear   "  "Right"


    Os rostos para as notas falsificadas parecem mais sombrías e menos felizes. A variável \(X_6\) (diagonal) funcionou bem no Boxplot em distinguir entre as notas falsificadas e genuínas. Aqui, essa variável é atribuída ao sorriso e à altura do nariz.


    I.6. Curvas de Andrews


    O problema básico de exibições gráficas de dados multivariados é a dimensionalidade. Scatterplots funcionam bem até três dimensões se usarmos exibições interativas. Mais de três dimensões devem ser codificadas em estruturas 2D ou 3D exibidas, por exemplo, em faces. A ideia de codificação e representação de dados multivariados por curvas foi sugerida por Andrews (1972).

    Cada observação multivariada \(x_i=\big(x_{i1},\cdots,x_{ip}\big)\) é transformada em uma curva da seguinte forma: \[\begin{equation*} f_i(t)=\left\{ \begin{array}{lcl} \dfrac{x_{i1}}{\sqrt{2}}+ x_{i1}\sin(t)+x_{i3}\cos(t)+ \cdots + & & \\ \qquad \qquad \qquad x_{ip-1}\sin\big(t(p-1)/2\big)+x_{ip}\cos\big(t(p-1)/2\big) & \mbox{caso} & p \; \mbox{ímpar} \\ \dfrac{x_{i1}}{\sqrt{2}}+ x_{i1}\sin(t)+x_{i3}\cos(t)+ \cdots + x_{ip}\sin\big(tp/2\big) & \mbox{caso} & p \; \mbox{par} \end{array} \right. \end{equation*}\] a observação representa os coeficientes da chamada Série de Fourier, \(t\in [-\pi,\pi]\).

    Suponha que tenhamos observações tridimensionais: \(x_1=(0,0,1)\), \(x_2=(1,0,0)\) e \(x_3=(0,1,0)\). Aqui \(p=3\) e as seguintes representações correspondem às curvas de Andrews: \(f_1(t)=\cos(t)\), \(f_2(t)=1/\sqrt{2}\) e \(f_3(t)=\sin(t)\).

    Essas curvas são de fato distintas, já que as observações \(X_1\), \(X_2\) e \(X_3\) são os vetores unitários 3D: cada observação tem massa apenas em uma das três dimensões. A ordem das variáveis desempenha um papel importante.


    library(andrews)
    andrews(banknote[96:105,2:7], clr = 6, ymax = 3, step = 100)
    grid()


    Exemplo I.3.

    Vamos tomar a 96ª observação do conjunto de dados do Banco Suíço (Exemplo I.1) \(x_{96}=(215.6, 129.9, 129.9, 9.0. 9.5, 141.7)\). A curva de Andrews é dada por \[\begin{equation*} f_{96}(t)=\dfrac{215.6}{\sqrt{2}}+129.9 \sin(t)+129.9 \cos(t)+9.0 \sin(2t)+9.5 \cos(2t)+141.7\sin(3t)\cdot \end{equation*}\]


    A figura acima mostra as curvas de Andrews para as observações 96 a 105 do conjunto de dados do Banco Suíço. Sabemos que as observações 96-100 representam notas bancárias genuínas e que as observações 101-105 representam notas de banco falsificadas. Observemos que, ao menos quatro curvas diferem das outros, mas é difícil dizer qual curva pertence a qual grupo.

    Sabemos da Figura I.4 que a sexta variável é importante. Portanto, as curvas de Andrews são calculadas novamente usando uma ordem invertida das variáveis.


    Exemplo I.4.

    Vamos considerar a 96ª observação do conjunto de dados do Banco Suíço (Exemplo I.1) \(x_{96}=(215.6, 129.9, 129.9, 9.0. 9.5, 141.7)\). A curva de Andrews é calculada usando a ordem invertida de variáveis: \[\begin{equation*} f_{96}(t)=\dfrac{141.7}{\sqrt{2}}+9.5 \sin(t)+9.0 \cos(t)+129.9 \sin(2t)+129.9 \cos(2t)+215.67\sin(3t)\cdot \end{equation*}\]

    Na figura abaixo são mostradas as curvas \(f_{96}-f_{105}\) para as observações 96-105 calculadas usando a ordem invertida de variáveis. Em vez de uma diferença em alta frequência, agora temos diferença no intercepto, qual é mais difícil para ver as diferenças nas observações.


    andrews(banknote[96:105,7:2], clr = 6, ymax = 3, step = 100)
    grid()


    Isso mostra que a ordem das variáveis desempenha um papel importante na interpretação. Se \(X\) for alta-dimensional, as últimas variáveis terão apenas uma pequena contribuição visível para a curva: elas caem na parte de alta frequência da curva. Para superar esse problema, Andrews sugeriu usar uma ordem que é sugerida pela Análise de Componentes Principais. Esaa técnica será tratada em detalhes no Capítulo XI. De fato, a sexta variável aparecerá lá como a mais importante variável para discriminar entre os dois grupos. Se o número de observações for mais de 20, pode haver muitas curvas em um gráfico. Isso resultará em uma parcela excessiva de curvas ou uma má proporção das cores (Tufte, 1983). Portanto, é aconselhável apresentar observações multivariadas via curvas de Andrews apenas para um número limitado de observações.


    I.7. Gráfico das coordenadas paralelas


    O gráfio das coordenadas paralelas (PCP) é um método para representar dados de alta dimensão, ver Inselberg (1985). Em vez de plotando observações em um sistema de coordenadas ortogonal, a PCP desenha coordenadas em eixos paralelos e liga-os com linhas retas. Este método ajuda a representar dados com mais de quatro dimensões.

    Exemplo I.5.

    Mais uma vez, utilizaremos as observações das notas bancárias suíças. Essas observações são seis-dimensionais, portanto, não podemos mostrá-las em um sistema de coordenadas cartesiano de seis dimensões. Usando a técnica PCP, no entanto, eles podem ser mostradas em eixos paralelos. Isso é apresentado na figura a continuação.


    library(plotly)
    banknote$fStatus <- factor(banknote$Status, levels = c("genuine","counterfeit"), labels = c(1,0))
    fig <- banknote %>% plot_ly(type = 'parcoords',
              line = list(color = ~ fStatus, colorscale = list(c(0,'red'),c(1,'blue'))),
              dimensions = list(
                list(range = c(210,220), label = 'Comprimento', values = ~ Length),
                list(range = c(125,135), label = 'Direita', values = ~ Left),
                list(range = c(125,135), label = 'Esquerda', values = ~ Right),
                list(range = c(7,13), label = 'Inferior', values = ~ Bottom),
                list(range = c(7,13), label = 'Superior', values = ~ Top),
                list(range = c(137,143), label = 'Inferior', values = ~ Diagonal)
                )
              )
    
    fig


    Na figura acima observamos diferença entre os dois grupos: em vermelho as curvas das notas falsificadas e em azul as curvas correspondentes às notas genuínas. Percebemos que as três primeiras variáveis não servem para diferenciar as medidas das cédulas mas as outras três variáveis sim diferenciam bem as medidas entre as notas genuínas e falsas.

    Este gráfico também pode ser usado para detectar dependências lineares entre variáveis: se todas as linhas forem quase paralelas, há uma dependência linear positiva entre eles.


    I.8. Gráfico hexagonal


    Esta seção segue de perto a apresentação de Lewin-Koh (2006). Na geometria, um hexágono é um polígono com seis arestas e seis vértices. O gráfico hexagonal é um tipo de histograma bivariado com bordas hexagonais. É útil para visualizar a estrutura dos conjuntos de dados que implica um grande número de observações \(n\).

    O conceito de gráfico hexagonal é o seguinte:
    1. O plano \(xy\) sobre o conjunto é teselado por uma grade regular de hexágonos.
    2. O número de pontos caindo em cada hexágono é contado.
    3. Os hexágonos com contagem positivas são mostrados usando uma rampa de cores ou variando o raio do hexágono proporcionalmente às contagens.


library(hexbin)
plot(hexbin(banknote$Left,banknote$Diagonal), xlab = expression(X[3]), ylab = expression(X[7]))


plot(hexbin(banknote$Bottom,banknote$Diagonal), xlab = expression(X[5]), ylab = expression(X[7])) 



I.9. Estudo habitacional em Boston (Boston Housing)


O conjunto de dados da Boston Housing foi analisado por Harrison and Rubinfeld (1978) que queriam descobrir se o ar limpo tinha influência nos preços das casas. Usaremos esse conjunto de dados neste capítulo e na maioria dos capítulos seguintes para ilustrar a metodologia apresentada.

O conjunto de dados do estudo habitacional em Boston foi coletado por Harrison and Rubinfeld (1978). Compreende 506 observações para cada distrito censitário da área metropolitana de Boston. O conjunto de dados foi analisado em Belsley, Kuh and Welsch (1980).

Para esse estudo foram coletadas as seguintes informações:
\(X_1\): CRIM Taxa de criminalidade per capita,
\(X_2\): ZN Proporção de terrenos residenciais zoneados para grandes lotes,
\(X_3\): INDUS Proporção de acres não negociáveis,
\(X_4\): CHAS Rio Charles (1 se o trato limita o rio, 0 caso contrário),
\(X_5\): NOX Concentração de óxidos nítricos,
\(X_6\): RM Número médio de cômodos por domicílio,
\(X_7\): AGE Proporção de unidades ocupadas pelos proprietários construídas antes de 1940,
\(X_8\): DIS Distâncias ponderadas para cinco centros de emprego de Boston,
\(X_9\): RAD Índice de acessibilidade às rodovias radiais,
\(X_{10}\): TAX Taxa de imposto predial de valor total por US$ 10.000,
\(X_{11}\): PTRATIO Relação aluno/professor,
\(X_{12}\): B \(1000 (B-0.63)^2\mbox{I}\big(B<0.63 \big)\) onde \(B\) é a proporção de afro-americanos,
\(X_{13}\): LSTAT % estrato inferior da população,
\(X_{14}\): MEDV Valor médio das casas ocupadas pelos proprietários em US$ 1.000.


Boston.dataset = read.table("http://leg.ufpr.br/~lucambio/MSM/Bostondataset.txt", header = TRUE, sep = "")
head(Boston.dataset)
##      CRIM ZN INDUS CHAS   NOX    RM  AGE    DIS RAD TAX PTRATIO      B LSTAT
## 1 0.00632 18  2.31    0 0.538 6.575 65.2 4.0900   1 296    15.3 396.90  4.98
## 2 0.02731  0  7.07    0 0.469 6.421 78.9 4.9671   2 242    17.8 396.90  9.14
## 3 0.02729  0  7.07    0 0.469 7.185 61.1 4.9671   2 242    17.8 392.83  4.03
## 4 0.03237  0  2.18    0 0.458 6.998 45.8 6.0622   3 222    18.7 394.63  2.94
## 5 0.06905  0  2.18    0 0.458 7.147 54.2 6.0622   3 222    18.7 396.90  5.33
## 6 0.02985  0  2.18    0 0.458 6.430 58.7 6.0622   3 222    18.7 394.12  5.21
##   MEDV
## 1 24.0
## 2 21.6
## 3 34.7
## 4 33.4
## 5 36.2
## 6 28.7


Mediana = median(Boston.dataset$MEDV)
Boston.dataset$fMEDV <- factor(I(Boston.dataset$MEDV>Mediana), 
                               levels = c("TRUE","FALSE"), labels = c(1,0))
fig <- Boston.dataset %>% plot_ly(type = 'parcoords',
          line = list(color = ~ fMEDV, colorscale = list(c(1,'red'),c(0,'black'))),
          dimensions = list(
            list(range = range(Boston.dataset[,1]), label = "CRIM", values = ~ Boston.dataset[,1]),
            list(range = range(Boston.dataset[,2]), label = "ZN", values = ~ Boston.dataset[,2]),
            list(range = range(Boston.dataset[,3]), label = "INDUS", values = ~ Boston.dataset[,3]),
            list(range = range(Boston.dataset[,4]), label = "CHAS", values = ~ Boston.dataset[,4]),
            list(range = range(Boston.dataset[,5]), label = "NOX", values = ~ Boston.dataset[,5]),
            list(range = range(Boston.dataset[,6]), label = "RM", values = ~ Boston.dataset[,6]),
            list(range = range(Boston.dataset[,7]), label = "AGE", values = ~ Boston.dataset[,7]),
            list(range = range(Boston.dataset[,8]), label = "DIS", values = ~ Boston.dataset[,8]),
            list(range = range(Boston.dataset[,9]), label = "RAD", values = ~ Boston.dataset[,9]),
            list(range = range(Boston.dataset[,10]), label = "TAX", values = ~ Boston.dataset[,10]),
            list(range = range(Boston.dataset[,11]), label = "PTRATIO", values = ~ Boston.dataset[,11]),
            list(range = range(Boston.dataset[,12]), label = "B", values = ~ Boston.dataset[,12]),
            list(range = range(Boston.dataset[,13]), label = "LSTAT", values = ~ Boston.dataset[,13]),
            list(range = range(Boston.dataset[,14]), label = "MEDV", values = ~ Boston.dataset[,14])
            )
          )

fig



O que pode ser visto do gráfico das coordenadas paralelas?


Para destacar as relações de \(X_{14}\) com as 13 variáveis restantes, colorimos todas as observações com \(X_{14} > \mbox{Mediana}(X_{14})\) como linhas vermelhas na figura acima. Algumas das variáveis parecem estar fortemente relacionadas. A relação mais óbvia é a dependência negativa entre \(X_{13}\) e \(X_{14}\). Também pode-se argumentar que existe uma forte dependência entre \(X_{12}\) e \(X_{14}\), uma vez que nenhuma linha vermelha é desenhada na parte inferior de \(X_{12}\). O oposto pode ser dito sobre \(X_{11}\): existem apenas linhas vermelhas mostradas na parte inferior desta variável. Valores baixos de \(X_{11}\) induzem valores altos de \(X_{14}\).


par(mfrow=c(2,2), mar=c(4,4,1,1), pch = 19)
plot(Boston.dataset[,14] ~ Boston.dataset[,1], xlab = expression(X[1]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,2], xlab = expression(X[2]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,2] ~ Boston.dataset[,1], xlab = expression(X[1]), ylab = expression(X[2]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,3], xlab = expression(X[3]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()


Taxa de crime per capita \(X_1\)?


Tomar o logaritmo torna a distribuição da variável mais simétrica. Isso pode ser visto no boxplot das variáveis transformadas, apresentado no fical, que mostra que a mediana e a média se aproximaram umas das outras mais do que eram para o \(X_1\) original. Ao dar uma olhada nos gráficos de dispersão acima vemos mostrar uma relação negativa relativamente forte entre \(X_1\) e \(X_{14}\), pode ser o caso de que os dois subgrupos de \(X_1\).


Proporção de área residencial zoneada para lotes grandes \(X_2\)


Vemos que há um grande conjunto de observações para as quais \(X_2\) é igual a 0. Também atinge o olho que, como o gráfico de dispersão de \(X_1\) vs. \(X_2\) mostra-há uma forte, embora não linear, relação negativa entre \(X_1\) e \(X_2\). Quase todas as observações para as quais o \(X_2\) são altas têm um valor \(X_1\) próximo a zero e vice-versa, muitas observações para as quais \(X_2\) é zero tem uma taxa de criminalidade por capita bastante alta \(X_1\).

Isso pode ser devido à localização das áreas, por exemplo, Os distritos urbanos podem ter uma taxa de criminalidade mais alta e, ao mesmo tempo, é improvável que qualquer terra residencial seja dividida de maneira generosa. No que diz respeito aos preços das casas, pode-se dizer que parece não haver uma relação clara (linear) entre \(X_2\) e \(X_{14}\), mas é óbvio que as casas mais caras estão situadas em áreas onde \(X_2\) é grande.


Proporção de acres não negociáveis \(X_3\)


O gráfico de dispersão de \(X_3\) vs. \(X_{14}\) mostra uma relação negativa óbvia entre estas variáveis. A relação entre os logaritmos de ambas as variáveis parece ser quase linear. Essa relação negativa pode ser explicada pelo fato de que a área não negociável às vezes causa sons irritantes e outras poluições.

Portanto, parece razoável usar \(X_3\) como uma variável explicativa para a previsão de \(X_{14}\) em uma análise de regressão linear. No que diz respeito à distribuição de \(X_3\), pode-se dizer que a densidade estimada de \(X_3\) claramente tem dois picos, o que indica que existem dois subgrupos. De acordo com a relação negativa entre \(X_3\) e \(X_{14}\), pode ser o caso de um subgrupo corresponder às casas mais caras e a outra para as casas mais baratas.


plot(density(Boston.dataset$INDUS), ylab = "Densidade estimada", main = expression(X[3]), 
     col = "red", lty = 1, lwd = 2)
rug(jitter(Boston.dataset$INDUS))
grid()


par(mfrow=c(2,2), mar=c(4,4,1,1), pch = 19)
plot(Boston.dataset[,14] ~ Boston.dataset[,4], xlab = expression(X[4]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,5], xlab = expression(X[5]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,6], xlab = expression(X[6]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,7], xlab = expression(X[7]), ylab = expression(X[14]),
     main = "", col = Boston.dataset$fMEDV)
grid()


Charles River \(X_4\)


A observação feita a partir do gráfico de curvas paralelas de que existem casas mais caras do que casas baratas situadas nas margens do Rio Charles é confirmado ao inspecionar a matriz de gráficos de dispersão. Ainda assim, podemos ter alguma dúvida de que a proximidade do rio influencia os preços das casas. Olhando para o conjunto de dados original, fica claro que as observações para as quais \(X_4\) é igual a 1 são distritos que estão próximos um do outro.

Aparentemente, o Rio Charles não flui através de muitos distritos diferentes. Assim, pode ser pura coincidência de que os distritos mais caros estejam próximos do Rio Charles, seus altos valores podem ser causados por muitos outros fatores, como a proporção de aluno/professor ou a proporção de acres não negociáveis.


Concentração de óxidos nítricos \(X_5\)


O gráfico de dispersão de \(X_5\) vs. \(X_{14}\) e o gráfico de boxplot separados de \(X_5\) para casas mais e mais baratas revelam uma relação negativa clara entre as duas variáveis. Como era o principal objetivo dos autores do estudo original para determinar se a poluição teve influência nos preços da habitação, deve ser considerado com muito cuidado se o \(X_5\) pode servir como uma variável explicativa para o preço \(X_{14}\).

Uma possível razão contra ser uma variável explicativa é que as pessoas podem não gostar de viver em áreas onde as emissões de óxidos nítricas são altos. Os óxidos nítricos são emitidos principalmente por automóveis, por fábricas e por aquecimento de casas particulares. No entanto, como se pode imaginar, há muitas boas razões além dos óxidos nítricos para não viver em áreas urbanas ou industriais.


par(mfrow=c(1,2), mar=c(4,4,1,1), pch = 19)
boxplot(Boston.dataset$NOX, ylab = "", main = expression(X[5]))
grid()
plot(density(Boston.dataset$NOX), ylab = "", main = expression(X[5]))
grid()


A poluição sonora, por exemplo, pode ser uma variável explicativa muito melhor para o preço das unidades habitacionais. Como a emissão de óxidos nítricos é geralmente acompanhada de poluição sonora, o uso do \(X_5\) como uma variável explicativa para \(X_{14}\) pode levar à falsa conclusão de que as pessoas fugem dos óxidos nítricos, enquanto na realidade é da poluição sonora que está tentando escapar.


Número médio de quartos por habitação \(X_6\)


O número de salas por residência é uma possível medida do tamanho das casas. Assim, esperamos que o \(X_6\) esteja fortemente correlacionado com o \(X_{14}\), o preço médio das casas. De fato, parte de alguns outliers, o gráfico de dispersão do \(X_6\) vs. \(X_{14}\) mostra uma nuvem de pontos que é claramente inclinada para cima e que parece ser uma realização de uma dependência linear de \(X_{14}\) em \(X_6\).


Proporção de unidades ocupadas pelo proprietário construídas antes de 1940 \(X_7\)


Não existe uma conexão clara visível entre \(X_7\) e \(X_{14}\). Pode haver uma correlação negativa fraca entre as duas variáveis, uma vez que os pontos em vermelha de \(X_7\) correspondem aos distritos cujo preço está acima do preço médio indica uma média e mediana mais baixa do que os pontos em preto para o distrito cujo preço está abaixo da preço médio. O fato de a correlação não ser tão clara pode ser explicada por dois efeitos opostos.

Por um lado, os preços das casas devem diminuir se as casas mais antigas não estiverem em boa forma. Por outro lado, os preços podem aumentar, porque as pessoas geralmente gostam melhor de casas mais velhas do que as casas mais novas, preferindo sua atmosfera de espaço e tradição.

No entanto, parece razoável que a idade das casas influencie seu preço \(X_{14}\). Aumentar o \(X_7\) à potência 2.5 revela novamente que o conjunto de dados pode consistir em dois subgrupos. Mas, neste caso, não é óbvio que os subgrupos correspondem a casas mais caras ou mais baratas. Além disso, pode -se observar uma relação negativa entre \(X_7\) e \(X_8\). Isso pode refletir a maneira como a área metropolitana de Boston se desenvolveu ao longo do tempo; Os distritos com os edifícios mais recentes estão mais longe dos centros de emprego e instalações industriais.


par(mfrow=c(1,2), mar=c(4,4,1,1), pch = 19)
boxplot(I(Boston.dataset$AGE^2.5), ylab = "", main = expression(X[7]))
grid()
plot(I(Boston.dataset$NOX^2.5) ~ Boston.dataset$DIS, ylab = expression(X[7]), xlab = expression(X[8]),
     main = "", col = Boston.dataset$fMEDV)
grid()



Distância ponderada para cinco centros de emprego de Boston \(X_8\)


Como a maioria das pessoas gosta de morar perto do seu local de trabalho, esperamos uma relação negativa entre as distâncias para os centros de emprego e os preços das casas. O gráfico de dispersão dificilmente revela nenhuma dependência, mas os gráficos de boxplot de \(X_8\) indicam que pode haver uma relação ligeiramente positiva, pois a mediana e a média do boxplot vermelho são mais altas que as pretas. Novamente, pode haver dois efeitos em direções opostas no trabalho aqui. A primeira é que viver muito perto de um centro de emprego pode não fornecer abrigo suficiente da poluição criada lá. O segundo, como mencionado acima, é que as pessoas não viajam muito longe para o local de trabalho.


par(mfrow=c(1,2), mar=c(4,4,1,1), pch = 19)
boxplot(Boston.dataset$DIS[Boston.dataset$fMEDV==1], ylab = "", main = expression(X[8]))
grid()
boxplot(Boston.dataset$DIS[Boston.dataset$fMEDV==0], ylab = "", main = expression(X[8]))
grid()


Índice de acessibilidade às rodovias radiais \(X_9\)


A primeira coisa óbvia que se pode observar nos gráficos de dispersão, bem como nos histogramas e nos KDEs, é que existem dois subgrupos de distritos contendo valores X9 que estão próximos da média do respectivo grupo. Os gráficos de dispersão não dão nenhuma dica sobre o que pode explicar a ocorrência desses dois subgrupos. Os gráficos da caixa indicam que, para as casas mais baratas e para as mais caras, a média de X9 é quase a mesma.


Imposto sobre a propriedade de valor total \(X_{10}\)


\(X_{10}\) mostra comportamentos semelhantes aos de \(X_9\): existem dois subgrupos. Uma curva de baixo para parece estar subjacente à relação de \(X_{10}\) e \(X_{14}\).


Razão do aluno/professor \(X_{11}\)


Os gráfico de coordenadas paralelas de \(X_{11}\) indica uma relação negativa entre \(X_{11}\) e \(X_{14}\). Isso é confirmado pela inspeção do gráfico de dispersão abaixo: a nuvem de pontos está inclinada para baixo, ou seja, quanto menos professores existem por aluno, menos pessoas pagam mediana por suas habitações.


par(mfrow=c(2,2), mar=c(4,4,1,1), pch = 19)
plot(Boston.dataset[,14] ~ Boston.dataset[,8], xlab = expression(X[8]), ylab = expression(X[14]),
     main = "")
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,9], xlab = expression(X[9]), ylab = expression(X[14]),
     main = "")
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,10], xlab = expression(X[10]), ylab = expression(X[14]),
     main = "")
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,11], xlab = expression(X[11]), ylab = expression(X[14]),
     main = "")
grid()



Proporção de afro-americanos \(B\), \(X_{12}=1000(B-0.63)^2 \mbox{I}\big(B<0.63\big)\)


Curiosamente, \(X_{12}\) é negativamente embora não linearmente correlacionado com \(X_3\), \(X_7\) e \(X_{11}\), enquanto está positivamente relacionado com \(X_{14}\). Olhar para o conjunto de dados revela que, para quase todos os distritos \(X_{12}\) assume um valor em torno de 390. Como \(B\) não pode ser maior que 0.63, esses valores só podem ser causados por \(B\) próximo a zero. Portanto, quanto maior o \(X_{12}\), menor é a proporção real de afro-americanos. Entre as observações 405-470 existem alguns que têm um \(X_{12}\) muito menor que 390. Isso significa que nesses distritos a proporção de afro-americanos está acima de zero.


par(mfrow = c(2,2), mar=c(4,4,1,1), pch = 19)
plot(Boston.dataset[,3] ~ Boston.dataset[,12], xlab = expression(X[12]), ylab = expression(X[3]),
     main = "")
grid()
plot(Boston.dataset[,7] ~ Boston.dataset[,12], xlab = expression(X[12]), ylab = expression(X[7]),
     main = "")
grid()
plot(Boston.dataset[,11] ~ Boston.dataset[,12], xlab = expression(X[12]), ylab = expression(X[11]),
     main = "")
grid()
plot(Boston.dataset[,14] ~ Boston.dataset[,12], xlab = expression(X[12]), ylab = expression(X[14]),
     main = "")
grid()


Podemos observar dois grupos de pontos nos gráficos de dispersão do \(\log(X{12})\): um cluster para o qual \(X_{12}\) está próximo de 390 e um segundo para o qual o \(X_{12}\) está entre 3 e 100. Quando o \(X_{12}\) está positivamente relacionado a outra variável, a proporção real dos afro-americanos está negativamente correlacionado com essa variável e vice-versa. Isso significa que os afro-americanos vivem em áreas onde há uma alta proporção de terras comerciais não-alugáveis, onde há casas mais antigas e onde há uma proporção alta ou seja, ruim da relação aluno/professor. Pode-se observar que os distritos com os preços da habitação acima da mediana só podem ser encontrados onde a proporção de afro-americanos é praticamente zero.


Proporção de estrato mais baixo da população \(X_{13}\)


De todas as variáveis, \(X_{13}\) exibe a relação negativa mais clara com \(X_{14}\), em muito tempo que qualquer outliers aparece. Tomar a raiz quadrada de \(X_{13}\) e o logaritmo de \(X_{14}\) transforma a relação em uma linear.


Transformações


Como a maioria das variáveis exibe uma assimetria com maior densidade no lado esquerdo, as seguintes transformações são propostas: \(\widetilde{X}_1 = \log(X_1)\), \(\widetilde{X}_2=X_2/10\), \(\widetilde{X}_3=\log(X_3)\), \(\widetilde{X}_4\) nenhuma, dado que \(X_3\) é binária, \(\widetilde{X}_5=\log(X_5)\), \(\widetilde{X}_6=\log(X_6)\), \(\widetilde{X}_7=X_7^{2.5}/10000\), \(\widetilde{X}_8=\log(X_8)\), \(\widetilde{X}_9=\log(X_9\), \(\widetilde{X}_{10}=\log(X_{10})\), \(\widetilde{X}_{11}=\exp(0.4 X_{11})/1000\), \(\widetilde{X}_{12}=X_{12}/100\), \(\widetilde{X}_{13}=\sqrt{X_{13}}\) e \(\widetilde{X}_{14}=\log(X_{14}\).

Tomar o logaritmo ou elevar as variáveis à potência de algo menor que um ajuda a reduzir a assimetria. Isso se deve ao fato de que os valores mais baixos se afastam mais um do outro, enquanto a distância entre valores maiores é reduzida por essas transformações.

A figura abaixo exibe os boxplots para as variáveis na escala original.


par(mar=c(1,1,1,1))
boxplot(Boston.dataset[,1:14])
grid()


Abaixo mostramosOs os gráficos de boxplots das variáveis transformadas, observe que são mais simétricas e têm menos outliers do que os gráficos das variáveis originais.


Boston.dataset[,16] = log(Boston.dataset[,1])
Boston.dataset[,17] = Boston.dataset[,2]/10
Boston.dataset[,18] = log(Boston.dataset[,3])
Boston.dataset[,19] = Boston.dataset[,4]
Boston.dataset[,20] = log(Boston.dataset[,5])
Boston.dataset[,21] = log(Boston.dataset[,6])
Boston.dataset[,22] = Boston.dataset[,7]^2.5/10000
Boston.dataset[,23] = log(Boston.dataset[,8])
Boston.dataset[,24] = log(Boston.dataset[,9])
Boston.dataset[,25] = log(Boston.dataset[,10])
Boston.dataset[,26] = exp(0.4*Boston.dataset[,11])/1000
Boston.dataset[,27] = Boston.dataset[,12]/100
Boston.dataset[,28] = sqrt(Boston.dataset[,13])
Boston.dataset[,29] = log(Boston.dataset[,14])
par(mar=c(1,1,1,1))
boxplot(Boston.dataset[,16:29])
grid()



I.10. Exercícios


  1. No gráfico boxplot, o extremo superior é sempre um outlier?

  2. No gráfico boxplot, é possível que a média ou a mediana estejam fora das quartas ou mesmo fora das barras externas?

  3. Suponha que os dados sejam normalmente distribuídos \(N(0,1)\). Que porcentagem dos dados você espera que fique fora das barras externas no gráfico boxplot?

  4. Que porcentagem dos dados você espera estar fora do lado de fora barras, no gráfico boxplot, se assumirmos que os dados são normalmente distribuídos \(N(0,\sigma^2)\), com variância desconhecida \(\sigma^2\)?

  5. Ainda no gráfico boxplot, é possível que todos os cinco números do resumo de informações que constitui esse gráfico sejam iguais? Se assim for, sob que condições?

  6. Suponha que tenhamos 50 observações de \(X\sim N(0,1)\) e outras 50 observações de \(Y\sim N(2,1)\). Como seriam os 100 rostos Chernoff-Flury se você tivesse definido como elementos do rosto a linha do rosto e a escuridão do cabelo? Você espera rostos semelhantes? Quantas faces você acha que deveriam se parecer com observações de \(Y\), mesmo que sejam observações de \(X\)?

  7. Faça o histograma para a variável de milhagem (quilometragem) do Exemplo I.2, o exemplo dos carros. Faça o mesmo para os três grupos (EUA, Japão e Europa). Você obtém uma conclusão semelhante à do boxplot para esses dados?

  8. Use algum critério de seleção de largura de banda para calcular a largura de banda \(h\) escolhida de forma ótima para a variável Diagonal das cédulas. Seria melhor ter uma largura de banda para os dois grupos?

  9. Faça um gráfico de coordenadas paralelas para os dados dos carros (Exemplo I.2).

  10. Como você identificaria variáveis discretas, variáveis com apenas um número limitado de resultados possíveis, em um gráfico de coordenadas paralelas?

  11. Verdadeiro ou falso: a altura das barras de um histograma são iguais à frequência relativa com a qual as observações se enquadram nos respectivos caixotes?

  12. Verdadeiro ou falso: As estimativas kernel de densidade devem sempre assumir um valor entre 0 e 1. Dica: qual quantidade relacionada à função de densidade deve ser igual a 1? Essa propriedade implica que a função de densidade deve sempre ser menos que 1?

  13. Considere o seguinte conjunto de dados representar as alturas de 13 alunos que fazem o curso de Análise Estatística Multivariada: 1.72; 1.83; 1.74; 1.79; 1.94; 1.81; 1.66; 1.60; 1.78; 1.77; 1.85; 1.70; 1.76:
    1. Encontre o resumo correspondente de cinco números.
    2. Construa o boxplot.
    3. Desenhe um histograma para este conjunto de dados.

  14. Descreva os dados do desemprego (leitura abaixo) que contêm taxas de desemprego de todos os estados federais alemães usando várias técnicas descritivas.

    # Taxas de desemprego em todos os estados federais da Alemanha em setembro de 1999.
    dados = read.table("http://leg.ufpr.br/~lucambio/MSM/desemprego.txt", header = TRUE, sep = " ")
    head(dados)
    ##                   Estado Taxa
    ## 1     Schleswig-Holstein  8.7
    ## 2                Hamburg  9.8
    ## 3 Mecklenburg-Vorpommern 17.3
    ## 4          Niedersachsen  9.8
    ## 5                 Bremen 13.9
    ## 6    Nordrhein-Westfalen  9.8

  15. Usando dados anuais da população (leitura abiaxo) e gerar:
    1. Um boxplot, escolha uma das variáveis.
    2. Uma curva de Andrew escolhendo dez pontos de dados.
    3. Um gráfico de dispersão.
    4. Um histograma, escolha uma das variáveis.
    Os dados mostram taxas populacionais médias anuais para o antigo território da República Federal da Alemanha, inclunindo Berlim-West, dados em 1.000 habitantes.

    # Taxas de desemprego em todos os estados federais da Alemanha em setembro de 1999.
    dados = read.table("http://leg.ufpr.br/~lucambio/MSM/population.txt", header = TRUE, sep = " ")
    head(dados)
    ##   Year Inhabitants Unemployed
    ## 1 1960       55433        271
    ## 2 1961       56158        181
    ## 3 1962       56837        155
    ## 4 1963       57389        186
    ## 5 1964       57971        169
    ## 6 1965       58619        147
    O que esses gráficos dizem sobre os dados e a estrutura deles?