zoukankan      html  css  js  c++  java
  • R语言代写实现有限混合模型建模分析

    原文链接:http://tecdat.cn/?p=6129

    介绍

    有限混合模型在应用于数据时非常有用,其中观察来自不同的群体,并且群体隶属关系未知。  

    模拟数据

    首先,我们将模拟一些数据。让我们模拟两个正态分布 - 一个平均值为0,另一个平均值为50,两者的标准差为5。

    m1 <- 0
    m2 <- 50
    sd1 <- sd2 <- 5
    N1 <- 100
    N2 <- 10
    
    a <- rnorm(n=N1, mean=m1, sd=sd1)
    b <- rnorm(n=N2, mean=m2, sd=sd2)

    现在让我们将数据“混合”在一起......

    ​  

    print(table(clusters(flexfit), data$class))
    ##    
    ##       1   2
    ##   1 100   0
    ##   2   0  10

    参数怎么样?

    cat('pred:', c1[1], '
    ')
    cat('true:', m1, '
    
    ')
    cat('pred:', c1[2], '
    ')
    cat('true:', sd1, '
    
    ')
    
    cat('pred:', c2[1], '
    ')
    cat('true:', m2, '
    
    ')
    cat('pred:', c2[2], '
    ')
    cat('true:', sd2, '
    
    ')
    ## pred: -0.5613484 
    ## true: 0 
    ## 
    ## pred: 4.799484 
    ## true: 5 
    ## 
    ## pred: 52.86911 
    ## true: 50 
    ## 
    ## pred: 6.89413 
    ## true: 5

    让我们可视化真实数据和我们拟合的混合模型。

    ggplot(data) +
    geom_histogram(aes(x, ..density..), binwidth = 1, colour = "black", fill = "white") +
    stat_function(geom = "line", fun = plot_mix_comps,
                    args = list(c1[1], c1[2], lam[1]/sum(lam)),
     stat_function(geom = "line", fun = plot_mix_comps,
                    args = list(c2[1], c2[2], lam[2]/sum(lam)),
                    colour = "blue", lwd = 1.5) +
    ylab("Density")

    看起来我们做得很好! 

     

    例子

    现在,让我们考虑一个花瓣宽度为鸢尾花的真实例子。 

    p <- ggplot(iris, aes(x = Petal.Width)) + 
      geom_histogram(aes(x = Petal.Width, ..density..), binwidth = 0.1, colour = "black", fill = "white")
    p

    ​ 

    flexfit <- flexmix(Petal.Width ~ 1, data = iris, k = 3, model = list(mo1, mo2, mo3))
    
    print(table(clusters(flexfit), iris$Species))
    ##    
    ##     setosa versicolor virginica
    ##   1      0          2        46
    ##   2      0         48         4
    ##   3     50          0         0
    
    geom_histogram(aes(x = Petal.Width, ..density..), binwidth = 0.1, colour = "black", fill = "white") +
                     args = list(c1[1], c1[2], lam[1]/sum(lam)),
                    colour = "red", lwd = 1.5) +
    stat_function(geom = "line", fun = plot_mix_comps,
                    args = list(c2[1], c2[2], lam[2]/sum(lam)),
     stat_function(geom = "line", fun = plot_mix_comps,
                    args = list(c3[1], c3[2], lam[3]/sum(lam)),
                    colour = "green", lwd = 1.5) +
    ylab("Density")

    即使我们不知道潜在的物种分配,我们也能够对花瓣宽度的基本分布做出某些陈述 。

    如果您有任何疑问,请在下面发表评论。

  • 相关阅读:
    NodeJS简介
    SQL学习笔记(1)
    Linux常用命令03
    Linux常用命令02
    Linux常用命令01
    Java接口和抽象类的区别
    Optional解决空指针
    JVM的内存管理机制-转载
    mysql explain详解-转载
    rabbitmq消息处理-转载
  • 原文地址:https://www.cnblogs.com/tecdat/p/11400826.html
Copyright © 2011-2022 走看看