R: Изменить метку оси в plot.Mclust И / ИЛИ неопределенность графика модели mclust с ggplot2

Я действительно смущен. Я хотел бы изменить метки оси графика (классификация или неопределенность) для 'Mclust' model object в R и я не понимаю, почему он работает для простого объекта только с двумя переменными, но не с несколькими.

Вот пример:

require(mclust)

mod1 = Mclust(iris[,1:2])
plot(mod1, what = "uncertainty", dimens = c(1,2), xlab = "test")
# changed x-axis-label

mod2 = Mclust(iris[,1:4])
plot(mod2, what = "uncertainty", dimens = c(1,2), xlab = "test")
# no changed x-axis-label

Другой способ, которым я пытался, был с coordProj:

coordProj(data= iris[, -5], dimens = c(1,2), parameters = mod2$parameters,
          z = mod2$z, what = "uncertainty", xlab = "test")
# Error in plot.default(data[, 1], data[, 2], pch = 19, main = "", xlab = xlab,  : 
#                       formal argument "xlab" matched by multiple actual arguments

Поэтому я подумал, может быть, это будет работать с ggplot2 (и это был бы мой любимый вариант). Теперь я могу изменить метки оси и так далее, но я не знаю, как построить эллипсы?

require(ggplot2)

ggplot(data = iris) +
  geom_point(aes(x  = Sepal.Length, y = Sepal.Width, size = mod2$uncertainty)) +
  scale_x_continuous(name = "test")

Было бы хорошо, если бы кто-то мог знать решение для изменения меток оси в plot.Mclust или добавить эллипсы к ggplot, Большое спасибо!

1 ответ

Решение

Я начал смотреть на код для plot.Mclust, но потом я просто использовал stat_ellipse и менял уровень, пока графики не выглядели одинаково. Похоже, что это совместное Т- распределение (по умолчанию) с вероятностью 50% (вместо 95% по умолчанию). Вероятно, есть лучший способ сделать это, используя фактическую ковариационную матрицу (mod2$parameters$variance$sigma), но это доставит вас туда, куда вы хотите.

require(dplyr)

iris %>%     
     mutate(uncertainty = mod2$uncertainty,
            classification = factor(mod2$classification)) %>% 
     ggplot(aes(Sepal.Length, Sepal.Width, size = uncertainty, colour = classification)) +
       geom_point() + 
       guides(size = F, colour = F) + theme_classic() +
       stat_ellipse(level = 0.5, type = "t") + 
       labs(x = "Label X", y = "Label Y")

вывод кодоблока

Другие вопросы по тегам