% 95 CI elipslerini ggplot veya elips paketi ile çizerken farklı sonuçlar elde etme


11

protoclust{protoclust}Verilerimi sınıflandırmak, sınıflara göre renklendirmek ve her sınıf için% 95 güven aralığı için elipsleri üst üste getirmek için kullanılan her değişken çifti için scater grafikleri oluşturarak (ile üretilen ) bir kümelenmenin sonuçlarını görselleştirmek istiyorum elipses sınıfları her değişken çifti altında örtüşür).

Elipslerin çizimini iki farklı şekilde uyguladım ve ortaya çıkan elipsler farklı! (ilk uygulama için daha büyük elipsler!) Eksenlerin merkezleri ve açıları her ikisinde de benzer gibi göründükleri için sadece boyut olarak farklılık gösterdikleri (bazı farklı ölçekleme?). Sanırım bunlardan birini kullanarak yanlış bir şey yapmalıyım (her ikisiyle de değil!) Ya da argümanlarla.

Biri bana neyi yanlış yaptığımı söyleyebilir mi?

Burada iki uygulamanın kodu; her ikisi de bir veri elipsinin ggplot2 dağılım grafiğine nasıl bindirilebileceği yönündeki cevaplara dayanır.

### 1st implementation 
### using ellipse{ellipse}
library(ellipse)
library(ggplot2) 
library(RColorBrewer)
colorpal <- brewer.pal(10, "Paired")

x <- data$x
y <- data$y
group <- data$group
df <- data.frame(x=x, y=y, group=factor(group))

df_ell <- data.frame() 
for(g in levels(df$group)){df_ell <- rbind(df_ell, cbind(as.data.frame(with(df[df$group==g,], ellipse(cor(x, y),scale=c(sd(x),sd(y)),centre=c(mean(x),mean(y))))),group=g))} 

p1 <- ggplot(data=df, aes(x=x, y=y,colour=group)) + geom_point() + 
  geom_path(data=df_ell, aes(x=x, y=y,colour=group))+scale_colour_manual(values=colorpal)

### 2nd implementation 
###using function ellipse_stat() 
###code by Josef Fruehwald available in: https://github.com/JoFrhwld/FAAV/blob/master/r/stat-ellipse.R

p2 <-qplot(data=df, x=x,y=y,colour=group)+stat_ellipse(level=0.95)+scale_colour_manual(values=colorpal)

İşte iki grafik birlikte (sol grafik p1uygulama ( ellipse()):

resim açıklamasını buraya girin

Verilere buradan ulaşabilirsiniz: https://www.dropbox.com/sh/xa8xrisa4sfxyj0/l5zaGQmXJt


Bu önemli olmayabilir, ancak kodunuzu çalıştırdığımda bir uyarı alırsınız Warning message: In cov.trob(cbind(data$x, data$y)) : Probable convergence failure, bu da kodu çalıştırdığınızda mı oluyor?
atiretoo

@atiretoo Evet, kodu çalıştırdığımda da oluyor. Neden bilmiyorum. Belki başka biri bilir? jose
josetanago

Yanıtlar:


9

Yanlış bir şey yapmıyorsunuz, iki işlev verinin dağılımı ile ilgili farklı varsayımlar yapıyor. İlk uygulamanız çok değişkenli normal, ikincisi çok değişkenli t-dağılımı varsayımıdır (bkz. MASS paketindeki? Cov.trob). Bir grubu dışarı çekip çekmediğinizi görmek daha kolaydır:

#pull out group 1
pick = group ==1
p3 <- qplot(data=df[pick,], x=x, y=y)
tl = with(df[pick,], 
     ellipse(cor(x, y),scale=c(sd(x),sd(y)),
             centre=c(mean(x),mean(y))))
p3 <- p3 + geom_path(data=as.data.frame(tl), aes(x=x, y=y))
p3 <- p3 + stat_ellipse(level=0.95)
p3 # looks off center
p3 <- p3 + geom_point(aes(x=mean(x),y=mean(y),size=2,color="red"))
p3

Dolayısıyla, aynı merkeze ve yönlendirmeye yakın olmasına rağmen aynı değildirler. cov.trob()Geçiş için korelasyon ve ölçeği almak için ellipse()kullanarak ve ölçeklemeyi olduğu gibi bir f dağılımına eşit ayarlamak için t argümanını kullanarak aynı boyuttaki elipslere yaklaşabilirsiniz stat_ellipse().

tcv = cov.trob(data[pick,2:3],cor=TRUE)
tl = with(df[pick,], 
          ellipse(tcv$cor[2,1],scale=sqrt(diag(tcv$cov)),
                  t=qf(0.95,2,length(x)-1),
                  centre=tcv$center))
p3 <- p3 + geom_path(data=as.data.frame(tl), aes(x=x, y=y,color="red"))
p3

ancak yazışma hala tam değil. Farklılık, kovaryans matrisinin koleskopik ayrışmasının kullanılması ile korelasyon ve standart sapmalardan ölçeklendirme oluşturulması arasında ortaya çıkmalıdır. Farkın tam olarak nerede olduğunu görmek için bir matematikçiden yeterli değilim.

Hangisi doğru? Karar vermek size kalmış! stat_ellipse()İlk daha muhafazakar olacak iken uygulanması, uzaktaki noktalarda daha az duyarlı olacaktır.


1
Bu soruyu çözmek için zaman ayırdığınız için çok teşekkürler! Şimdi benimle tanışmak açık. jose
josetanago

1
Parsellerdeki elipsleri seviyorum, bu yüzden bu işlevleri çalışırken görmek eğlenceliydi.
atiretoo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.