Nhận kết quả khác nhau khi vẽ các hình elip 95% CI bằng ggplot hoặc gói hình elip


11

Tôi muốn trực quan hóa kết quả của một cụm (được tạo ra protoclust{protoclust}) bằng cách tạo các biểu đồ quét cho từng cặp biến được sử dụng để phân loại dữ liệu của tôi, tô màu theo các lớp và chồng chéo các dấu chấm cho khoảng tin cậy 95% cho mỗi lớp (để kiểm tra elipses - các lớp trùng nhau dưới mỗi cặp biến).

Tôi đã thực hiện việc vẽ các hình elip theo hai cách khác nhau và kết quả hình elip cũng khác nhau! (hình elip lớn hơn để thực hiện lần đầu tiên!) Một tiên nghiệm họ chỉ khác nhau về kích thước (một số tỷ lệ khác nhau?), vì trung tâm và góc của trục, dường như giống nhau ở cả hai. Tôi đoán tôi phải làm điều gì đó sai bằng cách sử dụng một trong số họ (hy vọng không phải với cả hai!), Hoặc với các đối số.

Bất cứ ai có thể cho tôi biết những gì tôi đang làm sai?

Đây là mã cho hai triển khai; cả hai đều dựa trên các câu trả lời Làm thế nào một hình elip dữ liệu có thể được đặt chồng lên trên một biểu đồ phân tán ggplot2?

### 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)

Đây là hai ô với nhau (biểu đồ bên trái là p1triển khai ( ellipse()):

nhập mô tả hình ảnh ở đây

Dữ liệu có sẵn tại đây: https://www.dropbox.com/sh/xa8xrisa4sfxyj0/l5zaGQmXJt


Điều này có thể không quan trọng, nhưng khi tôi chạy mã của bạn, tôi nhận được một cảnh báo Warning message: In cov.trob(cbind(data$x, data$y)) : Probable convergence failurelà điều này cũng xảy ra khi bạn chạy mã?
atiretoo - phục hồi monica

@atiretoo Vâng, nó cũng xảy ra khi tôi chạy mã. Tôi không biết tại sao. Có lẽ ai khác biết? jose
josetanago

Câu trả lời:


9

Bạn không làm gì sai, hai hàm đang đưa ra các giả định cơ bản khác nhau về phân phối dữ liệu. Việc triển khai đầu tiên của bạn là giả định đa biến thông thường và lần thứ hai là phân phối t đa biến (xem? Cov.trob trong gói MASS). Hiệu quả dễ thấy hơn nếu bạn rút ra một nhóm:

#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

Vì vậy, mặc dù nó gần với cùng một trung tâm và định hướng nhưng chúng không giống nhau. Bạn có thể đến gần với hình elip có cùng kích thước bằng cách sử dụng cov.trob()để có được mối tương quan và tỷ lệ để chuyển đến ellipse()và sử dụng đối số t để đặt tỷ lệ bằng với phân phối f 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

nhưng sự tương ứng vẫn không chính xác. Sự khác biệt phải được phát sinh giữa việc sử dụng phân rã cholesky của ma trận hiệp phương sai và tạo tỷ lệ từ mối tương quan và độ lệch chuẩn. Tôi không đủ nhà toán học để thấy chính xác sự khác biệt ở đâu.

Điều nào là đúng? Đó là do bạn quyết định! Việc stat_ellipse()thực hiện sẽ ít nhạy cảm hơn với các điểm bên ngoài, trong khi đầu tiên sẽ bảo thủ hơn.


1
Cảm ơn rất nhiều vì đã dành thời gian của bạn để giải quyết câu hỏi này! Nó rõ ràng để mee bây giờ. jose
josetanago

1
Tôi thích các hình elip trong các ô, vì vậy thật thú vị khi thấy các chức năng này hoạt động.
atiretoo - phục hồi monica
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.