如何在R中拟合多元正态分布?

问题描述

我需要使R的Iris数据集中的每个物种都适合多变正态分布。我看到mvtnorm包可能有用;但是,我想使用最大似然估计,并且不确定如何在R中使用它。有什么想法吗?

解决方法

如果您只想使每个物种适合一个分布,则可能需要mvnorm.mle包中的Rfast

install.packages("Rfast")
library(Rfast)
iris.split <- split(iris[,1:4],iris$Species)
iris.mvnorm <- lapply(iris.split,function(x) mvnorm.mle(as.matrix(x)))
iris.mvnorm[["setosa"]]
# $loglik
# [1] 44.91657
#
# $mu
# [1] 5.006 3.428 1.462 0.246
#
# $sigma
#              Sepal.Length Sepal.Width Petal.Length Petal.Width
# Sepal.Length     0.121764    0.097232     0.016028    0.010124
# Sepal.Width      0.097232    0.140816     0.011464    0.009112
# Petal.Length     0.016028    0.011464     0.029556    0.005948
# Petal.Width      0.010124    0.009112     0.005948    0.010884

其他物种分别存储在iris.mvnorm[["versicolor"]]iris.mvnorm[["virginica"]]中。

,

似乎您正在寻找混合判别分析(因为已知类标签)。在这种情况下,您可以使用MclustDA包中的mclust

 model= MclustDA(data = iris[,class = iris$Species)
 summary(model)

但是,如果您希望通过拟合多元高斯混合来对数据进行聚类,则可以使用Mclust函数。

  fit = Mclust(data = iris[,G=3)
  table(fit$classification,iris$Species)

 #   setosa versicolor virginica
 # 1     50          0         0
 # 2      0         45         0
 # 3      0          5        50

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...