【问题标题】:How to fit a multivariate normal distribution in R?如何在 R 中拟合多元正态分布?
【发布时间】:2020-09-28 02:55:58
【问题描述】:

我需要为 R 中 Iris 数据集中的每个物种拟合多元正态分布。我看到 mvtnormpackage 可能有用;但是,我想使用最大似然估计,但不确定如何在 R 中这样做。有什么想法吗?

【问题讨论】:

  • 试试mclust 包。
  • 我用下面的代码试过了;但是,如何将其调整为使用 MLE? his<-MVN::mvn(data=iris, subset="Species", univariatePlot="histogram")

标签: r normal-distribution multivariate-testing iris-dataset


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

     model= MclustDA(data = iris[,1:4], class = iris$Species)
     summary(model)
    

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

      fit = Mclust(data = iris[,1:4], G=3)
      table(fit$classification, iris$Species)
    
     #   setosa versicolor virginica
     # 1     50          0         0
     # 2      0         45         0
     # 3      0          5        50
    

    【讨论】:

    • 再次,我如何确保它适合使用 MLE?
    • 阅读documentation:“mclust 使用 EM 算法进行最大似然估计。”
    猜你喜欢
    • 2017-02-19
    • 1970-01-01
    • 2021-07-20
    • 2015-09-05
    • 1970-01-01
    • 2017-11-02
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多