Encontre dados e elipses de confiança (regiões?) Para uma mediana bivariada?

7

Estou pensando em maneiras de calcular elipses de dados e confiança em torno de uma mediana bivariada. Por exemplo, eu posso calcular facilmente uma elipse de dados ou uma elipse de confiança para a média bivariada dos seguintes dados (aqui apenas mostrando uma elipse de dados)

library("car")
set.seed(1)
df <- data.frame(x = rnorm(200, mean = 4, sd = 1.5),
                 y = rnorm(200, mean = 1.4, sd = 2.5))
plot(df)
with(df, dataEllipse(x, y, level = 0.68, add = TRUE))

insira a descrição da imagem aqui

Mas estou lutando com como eu faria isso por uma mediana bivariada? No caso univariado, eu poderia simplesmente inicializar a amostra novamente para gerar o intervalo necessário, mas não sei como traduzir isso no caso bivariado.

Conforme apontado por @Andy W, a mediana não está definida de forma exclusiva. Nesse caso, usamos a mediana espacial , encontrando um ponto que minimiza a norma L1 das distâncias entre as observações naquele ponto. Uma otimização foi usada para calcular a mediana espacial a partir dos pontos de dados observados.

Além disso, os pares de dados x, y no caso de uso real são dois vetores próprios de uma análise de coordenadas principais de uma matriz de dissimilaridade; portanto, xey devem ser ortogonais, se isso fornecer uma via de ataque específica.

No caso de uso real, queremos calcular a elipse de dados / confiança para grupos de pontos no espaço euclidiano. Por exemplo:

insira a descrição da imagem aqui

A análise é um análogo multivariado do teste de Levene de homogeneidade de variâncias entre grupos. Utilizamos medianas espaciais ou centróides de grupo padrão como a medida da tendência central multivariada e desejamos adicionar o equivalente da elipse de dados na figura acima para o caso mediano espacial.

Gavin Simpson
fonte
4
A mediana em dimensões mais altas não é definida de forma exclusiva. No entanto, você pode estar interessado em boxplots generalizados para dimensões mais altas, por exemplo, The Bagplot: Um boxplot bivariado (Rousseeuw et al., 1999).
21716 Andy
+1 Obrigado @AndyW - eu tinha me esquecido completamente do bagplot (acho que é o que você ganha por não ter ensinado minhas palestras da EDA há alguns anos - escorregou totalmente minha mente!) Eu deveria ter indicado o tipo de mediana que tinha em mente - - Vou atualizar o post, mas calculamos a mediana espacial, o ponto que minimiza a norma L1 das distâncias dos pontos de dados até esse ponto.
Gavin Simpson
11
Se você sabe que o x e yComo as direções são ortogonais, por que não estimar suas medianas de forma independente? Em outras palavras, há algo de especial noL1mediana para sua aplicação?
whuber
2
@ whuber Ah, eu poderia ter enganado lá. Vou adicionar uma nova figura que é um exemplo real do caso de uso. Uma matriz de dissimilaridade calculada a partir dos dados originais é incorporada em um espaço euclidiano usando PCoA. Mas o que deixei de mencionar é que computamos as medianas espaciais nesse espaço euclidiano para grupos de pontos de dados. Portanto, enquanto xey são ortogonais em todos os grupos, dentro de um grupo, pode haver correlação. Veja a figura atualizada em um minuto para uma ilustração. Desculpas por isso; Eu não apreciam a importância de certos aspectos do caso usos real quando eu postei o Q.
Gavin Simpson
2
Eu acho que uma abordagem pode ser baseada no bootstrapping: obtenha a distribuição do bootstrap de suas estimativas de mediana geométrica e marque uma região que contenha 1αfração das estimativas. Se você está feliz em supor que as estimativas seguem uma distribuição normal, é fácil: ajuste um Gaussiano 2D e desenhe uma elipse correspondente. Caso contrário, você pode, por exemplo, obter a estimativa da densidade do kernel da distribuição 2D e encontrar a região1αda densidade de probabilidade.
Ameba

Respostas:

6

Esta é uma boa pergunta.

Vou seguir a sugestão de @ amoeba e inicializar as medianas espaciais, usando depth::med()with method="Spatial". No entanto, há uma ligeira complicação: mednão gosta quando há pontos de dados duplicados; portanto, não podemos fazer uma inicialização direta. Em vez disso, vou desenhar uma amostra de bootstrap e, em seguida, tremer cada ponto em uma quantidade minúscula - menor que as distâncias mínimas em cada um dosx e y dimensões na amostra de dados original - antes de calcular a mediana espacial.

Por fim, vou calcular a menor elipse cobrindo uma proporção especificada (95%) de medianas e plotagem inicializadas .

library(depth)      # for med()
library(MASS)           # for cov.rob()
library(cluster)    # for ellipsoidhull()

# create data
set.seed(1)
df <- data.frame(x = rnorm(200, mean = 4, sd = 1.5),
                 y = rnorm(200, mean = 1.4, sd = 2.5))

# find minimum distances in each dimension for later jittering
foo <- outer(X=df$x,Y=df$x,FUN=function(xx,yy)abs(xx-yy))
delta.x <- min(foo[upper.tri(foo)])/2
foo <- outer(X=df$y,Y=df$y,FUN=function(xx,yy)abs(xx-yy))
delta.y <- min(foo[upper.tri(foo)])/2

# bootstrap spatial medians, using jittering
n.boot <- 1000
pb <- winProgressBar(max=n.boot)
boot.med <- matrix(NA,nrow=n.boot,ncol=2)
for ( ii in 1:n.boot ) {
    setWinProgressBar(pb,ii,paste(ii,"of",n.boot))
    index <- sample(1:nrow(df),nrow(df),replace=TRUE)
    bar <- df[index,] + 
      data.frame(x=runif(nrow(df),-delta.x,delta.x),
                 y=runif(nrow(df),-delta.y,delta.y))
    boot.med[ii,] <- med(bar,method="Spatial")$median
}
close(pb)

# specify confidence level
pp <- 0.95

# find smallest ellipse containing the specified proportion of bootstrapped medians
fit <- cov.rob(boot.med, quantile.used = ceiling(pp*n.boot), method = "mve")
best_ellipse <- ellipsoidhull( boot.med[fit$best,] )

plot(df)
points(boot.med,pch=19,col="grey",cex=0.5)
points(df)
lines(predict(best_ellipse), col="red")
legend("bottomright",bg="white",pch=c(21,19,NA),
    col=c("black","grey","red"),pt.bg=c("white",NA,NA),lwd=c(0,0,1),
    legend=c("Observations","Bootstrapped medians","Confidence ellipse"))

elipse de confiança

Por fim, observe que a mediana espacial bivariada é normalmente assintoticamente distribuída (Brown, 1983, JRSS, Série B ) , para que também pudéssemos dispensar o "jittered bootstrap" acima e calcular diretamente a elipse, confiando quen=200é "suficientemente assintótico". Posso editar este post para incluir essa elipse de confiança paramétrica, se encontrar o tempo nos próximos dias.

Stephan Kolassa
fonte