簡體   English   中英

有限混合的tweedie

[英]Finite mixture of tweedie

我正在嘗試估計一種有限的tweedie(或復合Poisson-gamma)分布混合。 我已經搜索了我能想到的任何資源,卻沒有找到任何關於如何做到這一點的資源。

我正在嘗試使用R中的flexmix軟件包編寫不同的M步驅動程序,如第12-14頁的flexmix插圖中所述。 這是我的代碼,它依賴於cplm包:

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分布混合物? 你可以用flexmix或其他方式指出我正確的方向嗎?

問題出現在權重部分,如果刪除它,它可以工作:

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
}

例:

library(flexmix)
data("dmft", package = "flexmix")
m1 <- flexmix(End ~ .,data=dmft, k = 4, model = tweedieClust())

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM