楼主: songtao07
3635 1

[问答] 请教:能不能给举个例子在R中用GMM估计,谢谢! [推广有奖]

  • 2关注
  • 5粉丝

讲师

33%

还不是VIP/贵宾

-

威望
0
论坛币
37 个
通用积分
0.1800
学术水平
20 点
热心指数
30 点
信用等级
18 点
经验
2635 点
帖子
529
精华
0
在线时间
239 小时
注册时间
2010-6-15
最后登录
2024-2-1

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
能不能给举个例子在R中用GMM估计,或者有什么参考书之类的,十分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:GMM估计 GMM 参考书

沙发
DM小菜鸟 发表于 2014-12-15 15:34:42 |只看作者 |坛友微信交流群
用EM算法来估计GMM的参数。


# 设置初始值
m <- 2
miu <- runif(m)
sigma <- runif(m)
alpha <- c(0.2,0.8)
prob <- matrix(rep(0,n*m),ncol=m)

for (step in 1:100){
    # E步骤
    for (j in 1:m){
        prob[,j]<- sapply(x,dnorm,miu[j],sigma[j])
    }
    sumprob <- rowSums(prob)
    prob<- prob/sumprob

    oldmiu <- miu
    oldsigma <- sigma
    oldalpha <- alpha

    # M步骤
    for (j in 1:m){
        p1 <- sum(prob[ ,j])
        p2 <- sum(prob[ ,j]*x)
        miu[j] <- p2/p1
        alpha[j] <- p1/n
        p3 <- sum(prob[ ,j]*(x-miu[j])^2)
        sigma[j] <- sqrt(p3/p1)
    }

    # 变化
    epsilo <- 1e-4
    if (sum(abs(miu-oldmiu))<epsilo &
        sum(abs(sigma-oldsigma))<epsilo &
        sum(abs(alpha-oldalpha))<epsilo) break
    cat('step',step,'miu',miu,'sigma',sigma,'alpha',alpha,'\n')
}
在33次循环之后运算结果趋于稳定,估计的miu为(-2.2,2.8),sigma为(1.82,1.14)

GMM 模型常用于基于模型的聚类分析,GMM中的每一个高斯分布都可以代表数据的一类,整个数据就是多个高斯分布的混合。在R中的mclust包中的Mclust函数可以用来进行基于GMM的聚类分析。下面即是以最常用的iris数据集为例,聚类结果生成的图形就是文章的第一幅图:
library(mclust)
mc <-  Mclust(iris[,1:4], 3)
plot(mc, data=iris[,1:4], what="classification",dimens=c(3,4))
table(iris$Species, mc$classification)

使用道具

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-6-7 19:31