2

我正在使用gammamixEM包中的功能mixtools。如何返回函数中的密度图形输出normalmixEM(即 中的第二个图plot(...,which=2))?

更新

这是该功能的可重现示例gammamixEM

x <- c(rgamma(200, shape = 0.2, scale = 14), rgamma(200, 
     shape = 32, scale = 10), rgamma(200, shape = 5, scale = 6))
out <- gammamixEM(x, lambda = c(1, 1, 1)/3, verb = TRUE)

这是该功能的可重现示例normalmixEM

data(faithful)
attach(faithful)
out <- normalmixEM(waiting, arbvar = FALSE, epsilon = 1e-03)
plot(out, which=2)

在此处输入图像描述

我想从函数中获得密度的图形输出gammamixEM

4

1 回答 1

1

干得好。

out <- normalmixEM(waiting, arbvar = FALSE, epsilon = 1e-03)

x          <- out 
whichplots <- 2
density = 2 %in% whichplots
loglik  = 1 %in% whichplots

def.par    <- par(ask=(loglik + density > 1), "mar") # only ask and mar are changed
mix.object <- x


k    <- ncol(mix.object$posterior)
x    <- sort(mix.object$x)
a    <- hist(x, plot = FALSE)
maxy <- max(max(a$density), .3989*mix.object$lambda/mix.object$sigma)

我只需要深入研究的源代码plot.mixEM

所以,现在要这样做gammamixEM

x <- c(rgamma(200, shape = 0.2, scale = 14), rgamma(200, 
                                                    shape = 32, scale = 10), rgamma(200, shape = 5, scale = 6))
gammamixEM.out <- gammamixEM(x, lambda = c(1, 1, 1)/3, verb = TRUE)



mix.object <- gammamixEM.out

k    <- ncol(mix.object$posterior)
x    <- sort(mix.object$x)
a    <- hist(x, plot = FALSE)
maxy <- max(max(a$density), .3989*mix.object$lambda/mix.object$sigma)

main2 <- "Density Curves"
xlab2 <- "Data" 
col2  <- 2:(k+1) 

hist(x, prob = TRUE, main = main2, xlab = xlab2, 
     ylim = c(0,maxy))


for (i in 1:k) {
  lines(x, mix.object$lambda[i] * 
          dnorm(x, 
                sd = sd(x)))
}

在此处输入图像描述

如果你想添加标签、平滑线等,我相信继续这个例子应该很简单。这里是函数的源代码plot.mixEM

于 2016-08-08T16:57:41.803 回答