首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有限混合tweedie

有限混合tweedie
EN

Stack Overflow用户
提问于 2015-03-31 21:02:38
回答 1查看 478关注 0票数 4

我试图估计一个有限混合的tweedie (或复合Poisson-γ)分布。我已经搜索了我能想到的任何资源,却没有找到任何关于如何做到这一点的资源。

我目前正在尝试使用flexmix软件包在R编写一个不同的M步驱动程序,如第12-14页的flexmix所概述的那样。下面是我的代码,它依赖于cplm包:

代码语言:javascript
复制
tweedieClust <- function(formula = .~.,offset = NULL){
require(tweedie)
require(cplm)
require(plyr)
require(dplyr)
retval <- new("FLXMC", weighted = TRUE, formula = formula, dist = "tweedie",
              name = "Compound Poisson Clustering")

retval@defineComponent <- expression ({
    predict <- function(x, ...) {
        pr <- mu
    }
    logLik <- function(x, y, ...){
        dtweedie(y, xi = p, mu = mu, phi = phi) %>%
             log
    }
    new("FLXcomponent",
        parameters=list(coef=coef),
        logLik=logLik, predict=predict,
        df=df)
})
retval@fit <- function (x, y, w, component) {
    fit <- cpglm(formula = y ~ x, link = "log", weights=w, offset=offset)
    with(list(coef = coef(fit), df = ncol(x),mu = fit$fitted.values,
              p = fit$p, phi = fit$phi),
         eval(retval@defineComponent))
}
retval
}

但是,这会导致以下错误:

dtweedie芯片中的错误(y,xi = p,mu = mu,phi = phi):对不整合数组的二进制操作

有没有人做过或看到了有限混合的tweedie分布?你能指出正确的方向来完成这一点,使用柔性混合或其他吗?

EN

回答 1

Stack Overflow用户

发布于 2015-10-12 07:50:55

问题就在重量部分的某个地方,如果你去掉它,它就会起作用:

代码语言:javascript
复制
tweedieClust <- function(formula = .~.,offset = NULL){
  require(tweedie)
  require(statmod)
  require(cplm)
  require(plyr)
  require(dplyr)
  retval <- new("FLXMC", weighted = F, formula = formula, dist = "tweedie",
            name = "Compound Poisson Clustering")

  retval@defineComponent <- expression ({
    predict <- function(x, ...) {
      pr <- mu
    }
    logLik <- function(x, y, ...){
      dtweedie(y, xi = p, mu = mu, phi = phi) %>%
        log
    }
    new("FLXcomponent",
        parameters=list(mu=mu,xi=p,phi=phi),
        logLik=logLik, predict=predict,
        df=df)
  })
  retval@fit <- function (x, y, w, component) {
    fit <- cpglm(formula = End~.,data=dmft, link = "log")
    with(list(df = ncol(x), mu = fit$fitted.values,
              p = fit$p, phi = fit$phi),
         eval(retval@defineComponent))
  }
  retval
}

示例:

代码语言:javascript
复制
library(flexmix)
data("dmft", package = "flexmix")
m1 <- flexmix(End ~ .,data=dmft, k = 4, model = tweedieClust())
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29378515

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档