Получение разных результатов при построении эллипсов 95% CI с помощью ggplot или пакета эллипсов

11

Я хочу визуализировать результаты кластеризации (созданные с помощью protoclust{protoclust}), создавая диаграммы разброса для каждой пары переменных, используемых для классификации моих данных, раскраски по классам и перекрытия эллипсов для 95% доверительного интервала для каждого из классов (чтобы проверить, какие elipses-классы перекрываются под каждой парой переменных).

Я реализовал рисование эллипсов двумя разными способами, и в результате получились разные эллипсы! (Большие эллипсы для первой реализации!) Априори они отличаются только по размеру (какое-то разное масштабирование?), так как центры и угол осей кажутся одинаковыми в обоих случаях. Я думаю, что я должен делать что-то не так, используя один из них (надеюсь, не с обоими!) Или с аргументами.

Может кто-нибудь сказать мне, что я делаю не так?

Здесь код для двух реализаций; оба основаны на ответах на вопрос Как можно наложить эллипс данных на диаграмму рассеяния 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)

Вот два графика вместе (левый график - p1реализация ( ellipse()):

введите описание изображения здесь

Данные доступны здесь: https://www.dropbox.com/sh/xa8xrisa4sfxyj0/l5zaGQmXJt

josetanago
источник
Это может не иметь значения, но когда я запускаю ваш код, я получаю предупреждение Warning message: In cov.trob(cbind(data$x, data$y)) : Probable convergence failure, это также происходит, когда вы запускаете код?
atiretoo - восстановить монику
@atiretoo Да, это также происходит, когда я запускаю код. Я не знаю почему. Может кто еще знает? хосе
josetanago

Ответы:

9

Вы не делаете ничего плохого, две функции делают разные базовые предположения о распределении данных. Ваша первая реализация предполагает многомерное нормальное, а вторая - многомерное t-распределение (см.? Cov.trob в пакете MASS). Эффект легче увидеть, если вы вытащите одну группу:

#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

Так что, хотя он находится близко к одному центру и ориентации, они не одинаковы. Вы можете приблизиться к эллипсу того же размера, используя, cov.trob()чтобы получить корреляцию и масштаб для передачи ellipse(), и используя аргумент t, чтобы установить масштабирование, равное 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

но соответствие все еще не точно. Разница должна возникать между использованием разложения по Холески ковариационной матрицы и созданием масштабирования из корреляции и стандартных отклонений. Мне не хватает математика, чтобы понять, в чем именно разница.

Который правильный? Это решать вам! stat_ellipse()Реализация будет менее чувствительна к окрестным пунктов, в то время как первый будет более консервативным.

atiretoo - восстановить монику
источник
1
Большое спасибо, что нашли время, чтобы решить этот вопрос! Теперь мне ясно. хосе
josetanago
1
Мне нравятся эллипсы на графиках, так что было забавно видеть эти функции в действии.
atiretoo - восстановить монику