2016-08-08 10 views
2

私はmixtoolsというパッケージからgammamixEM関数を使用しています。関数normalmixEM(すなわち、plot(...,which=2)の2番目のプロット)のように、濃度のグラフィック出力を返すにはどうすればよいですか?関数gammamixEM(パッケージ・ミックスツール)の密度のグラフィック出力

更新:ここ

は機能gammamixEMためreproducible example次のとおりです。ここで

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) 

enter image description here

この図形密度の出力は、gammamixEMから入手したいと思います。

+1

申し訳ありませんが、私は質問を更新しました。 – Marine

答えて

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) 

私はちょうどgammamixEMでこれを行うために、今、そうplot.mixEM

のソースコードに掘っていた:

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))) 
} 

enter image description here

私はそれはかなりまっすぐであるべきと考えていますラベル、スムーズな線などを追加したい場合は、この例を少し進めてください。sourceplot.mixEM機能。

+0

ありがとう、あなたの答えはHack-Rです。 'plot.mixEM'のコード行をどのように変更するのですか?lines(x、mix.object $ lambda [i] * dnorm(x、mean = mix.object $ mu [i * arbmean +(1 - arbmean)] 、sd = mix.object $ sigma [i * arbvar +(1 - arbvar)])、col = col2 [i]、lwd = lwd2) 'gammamixEM'関数を使用するには?ありがとうございます – Marine

+0

@マリンああ、大丈夫です。今私はあなたが望むものを理解しています。私は今、 'gammamixEM'で動作するコードが動作するので、私たちはラッキーだと思います。私は今私の答えを更新しようとしています。 –

+0

まさに! 'normalmixEM'ではなく' gammamixEM'の出力をプロットしたいと思います。 – Marine

関連する問題