Como plotar um conjunto de dados 5D em "coordenadas em estrela"?

8

Estou lendo o artigo "Coordenadas em estrela: uma técnica de visualização multidimensional com tratamento uniforme de dimensões" e tentando plotar meus dados.

Digamos que eu tenha , um ponto de dados em cinco dimensões, e os pontos são calculados pela fórmula explicada no artigo. A(2,5,3,1,8)

A idéia básica das coordenadas estrela é organizar os eixos de coordenadas em um círculo em um plano bidimensional com ângulos iguais (inicialmente) entre os eixos com uma origem no centro do círculo (Figura 1). Inicialmente, todos os eixos têm o mesmo comprimento. Os pontos de dados são dimensionados para o comprimento do eixo, com o mapeamento mínimo para a origem e o máximo para a outra extremidade do eixo. Os vetores unitários são calculados de acordo. ...

Isso é simplesmente uma extensão de gráficos de dispersão 2D e 3D típicos para dimensões mais altas com normalização.

Tenho dificuldade em entender a ideia. Como eu traço isso? O principal problema é que eu não conseguia entender a fórmula no artigo.

solti
fonte
O que você quer traçar? a representação 3d? uma representação 2D que mostraria algum agrupamento?
Lcrmorin
2
Você espera que o Google leia isso e encontre "a fórmula" .... Forneça mais informações.
Nick Cox
Essa técnica está intimamente relacionada a um PCA "biplot". Acredito que "coordenadas em estrela" podem ser as mesmas que são usadas em um biplot para um PCA no qual o primeiro componente principal é e o segundo PC é qualquer vetor ortogonal a ele. (1,1,,1)
whuber
obrigado pessoal pela resposta @Imorin Acho representação 2D .. @ whuber ♦ - são coordenadas biplot e estrela semelhantes?
Solti
Eu reduzi minha pergunta .. como encontro o vetor unitário ao longo de xey?
Solti

Respostas:

10

As "coordenadas em estrela" devem ser modificadas interativamente, começando com um padrão. Esta resposta mostra como criar o padrão; as modificações interativas são um detalhe de programação.

Os dados são considerados uma coleção de vetores em . Estes são normalizados primeiro separadamente em cada coordenada, transformando linearmente os dados no intervalo . Isso é feito, é claro, primeiro subtraindo o mínimo de cada elemento e dividindo pelo intervalo. Chame os dados normalizados .R d { x j i , j = 1 , 2 , } [ 0 , 1 ] z jxj=(xj1,xj2,,xjd)Rd{xji,j=1,2,}[0,1]zj

A base usual de é o conjunto de vetores com um único no lugar. Em termos dessa base, . Um "coordenadas estrela projecção" escolhe um conjunto de vectores de unidades distintas em e mapeia para . Isso define uma transformação linear de para . Este mapa é aplicado aoRdei=(0,0,,0,1,0,0,,0)1ithzj=zj1e1+zj2e2++zjdedR 2 e i u i R d R 2 Z j u i{ui,i=1,2,,d}R2eiuiRdR2zj--é apenas uma multiplicação de matrizes - para criar uma nuvem de pontos bidimensional, representada como um gráfico de dispersão. Os vetores unitários são desenhados e rotulados para referência.ui

(Uma versão interativa permitirá que o usuário gire cada um dos individualmente.)ui


Para ilustrar isso, aqui está uma Rimplementação aplicada a um conjunto de dados de características de desempenho de automóveis. Primeiro vamos obter os dados:

library(MASS)
x <- subset(Cars93, 
       select=c(Price, MPG.city, Horsepower, Fuel.tank.capacity, Turn.circle))

O passo inicial é normalizar os dados:

x.range <- apply(x, 2, range)
z <- t((t(x) - x.range[1,]) / (x.range[2,] - x.range[1,]))

Como padrão, vamos criar vetores de unidade igualmente espaçados para o . Eles determinam a projeção aplicada a :u i zduiprjz

d <- dim(z)[2] # Dimensions
prj <- t(sapply((1:d)/d, function(i) c(cos(2*pi*i), sin(2*pi*i))))
star <- z %*% prj

É isso aí - estamos todos prontos para tramar. É inicializado para fornecer espaço para os pontos de dados, os eixos de coordenadas e seus rótulos:

plot(rbind(apply(star, 2, range), apply(prj*1.25, 2, range)), 
     type="n", bty="n", xaxt="n", yaxt="n",
     main="Cars 93", xlab="", ylab="")

Aqui está o próprio gráfico, com uma linha para cada elemento: eixos, rótulos e pontos:

tmp <- apply(prj, 1, function(v) lines(rbind(c(0,0), v)))
text(prj * 1.1, labels=colnames(z), cex=0.8, col="Gray")
points(star, pch=19, col="Red"); points(star, col="0x200000")

Gráfico em estrela


Para entender esse gráfico, pode ser útil compará-lo a um método tradicional, a matriz de gráficos de dispersão:

pairs(x)

Matriz de dispersão


Uma análise de componentes principais (PCA) baseada em correlação cria quase o mesmo resultado.

(pca <- princomp(x, cor=TRUE))
pca$loadings[,1]
biplot(pca, choices=2:3)

A saída para o primeiro comando é

Standard deviations:
   Comp.1    Comp.2    Comp.3    Comp.4    Comp.5 
1.8999932 0.8304711 0.5750447 0.4399687 0.4196363 

A maior parte da variação é explicada pelo primeiro componente (1,9 versus 0,83 e menos). As cargas neste componente são quase iguais em tamanho, como mostra a saída para o segundo comando:

     Price           MPG.city         Horsepower Fuel.tank.capacity        Turn.circle 
 0.4202798         -0.4668682          0.4640081          0.4758205          0.4045867 

Isso sugere - nesse caso - que o gráfico de coordenadas em estrela padrão está projetando-se ao longo do primeiro componente principal e, portanto, está mostrando, essencialmente, alguma combinação bidimensional do segundo ao quinto PCs. Seu valor comparado aos resultados do PCA (ou uma análise fatorial relacionada) é, portanto, questionável; o principal mérito pode estar na interatividade proposta.

Rui

Biplot

whuber
fonte
1

Além da boa resposta de @whuber, gostaria de adicionar outras opções para exibir dados multidimensionais (multivariados) em "coordenadas em estrela", para obter uma cobertura mais abrangente. Minha resposta se concentra em realizar essa visualização de dados multivariados no R.

Começarei dizendo que as plotagens em estrela (nas variantes spider e radar ) são suportadas pelo pacote Rbase da graphicsvia função stars(): http://stat.ethz.ch/R-manual/R-devel/library/graphics/html/ stars.html . Em seguida, na R"cadeia alimentar" está, obviamente, o ggplot2pacote, que o AFAIK atualmente não possui funções específicas para esse tipo de parcela (por favor, corrija-me, se não estiver atualizado sobre isso). No entanto, uma implementação básica de Hadley Wickham, usando coord_polar(), pode ser encontrada aqui . Além disso, um ggsubplotpacote baseado em ggplot2 oferece a função relevante geom_star(): http://www.inside-r.org/packages/cran/ggsubplot/docs/geom_star .

Outros pacotes que contêm a funcionalidade de plotagem em estrela incluem: psych- funções spider()e radar()- http://personality-project.org/r/html/spider.html , plotrix- função radial.plot()- http://onertipaday.blogspot.com/2009/01/radar -chart.html ) e, possivelmente, alguns outros.

Além do acima, observe-se que é possível criar gráficos em estrela em software habilitado para Web , com o qual é fácil interagir R. Por exemplo, aqui está uma variação de um gráfico em estrela plotly, onde é chamado de gráfico de área polar: https://plot.ly/r/polar-chart/#Polar-Area-Chart . Falando sobre Re visualização de dados ativada pela Web, é impossível não mencionar a excelente biblioteca D3.js., que também pode ser acessada a partir R. Aqui está como criar um enredo bonito, usando D3.js.: http://www.visualcinnamon.com/2013/09/making-d3-radar-chart-look-bit-better.html .

Aleksandr Blekh
fonte
2
Sua contribuição é apreciada. No entanto, não parece ser diretamente relevante para este segmento. O documento referenciado pelo OP está interessado em visualizações "... para descoberta de cluster e tarefas de análise multifatorial". Ele vê as coordenadas , não a forma da plotagem, como a inovação relevante, alegando que são "... transformações avançadas que melhorarão a compreensão dos dados em multi-dimensões [ sic ]". Em particular, "coordenadas em estrela" não são meramente as coordenadas padrão em um gráfico de estrelas radial, como sua resposta parece assumir.
whuber
1
@ whuber: Obrigado por palavras gentis e apontando a questão. Ao reler o artigo, concordo com o seu comentário. Há uma diferença essencial entre a sugestão sugerida na abordagem em papel e a abordagem padrão de plotagem em estrela. No entanto, da perspectiva de visualização de dados e da ideia central de apresentar dados multidimensionais ( transformados ) via sistema de coordenadas polares , eles ainda estão relacionados.
Aleksandr Blekh