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