R:normalmixEM的图显示了截短的密度图(mixtools)

时间:2018-08-21 08:49:15

标签: r density-plot

我目前正在尝试绘制通过EM算法找到的组件。但是,估计的密度并没有完全延伸到最后。看起来像这样:enter image description here

我的代码是:

plot(EM_data, which=2, xlim= c(0, 80), xlab2= "", yaxt= "n", main2 ="", lwd2=0.8, border = "azure3")
lines(density(EM_data), lty=2, lwd=0.8)

无论是否指定xlim,该图都将被截断。没有为这种类型的绘图定义xlim2。我要去哪里错了?

1 个答案:

答案 0 :(得分:1)

绘制mixEM的方法仅在数据范围内绘制,如果要扩展密度,则必须构建自己的函数。

使用类似这样的内容:

示例数据:

library(mixtools)

data(faithful)
attach(faithful)
set.seed(100)
EM_data<-normalmixEM(waiting, arbvar = FALSE, epsilon = 1e-03)

mixtools图:

plot(EM_data, which=2, xlim= c(30, 110), xlab2= "", yaxt= "n", main2 ="", 
     lwd2=0.8, border = "azure3")
lines(density(EM_data$x), lty=2, lwd=0.8)

enter image description here

通过扩展密度进行调整:

a <- hist(EM_data$x, plot = FALSE)
maxy <- max(max(a$density), 0.3989 * EM_data$lambda/EM_data$sigma)
hist(EM_data$x, prob = TRUE, main = "", xlab = "", xlim= c(30, 110), 
     ylim = c(0, maxy), yaxt= "n", border = "azure3")
for (i in 1:ncol(EM_data$posterior)) {
  curve(EM_data$lambda[i] * dnorm(x, mean = EM_data$mu[i], sd = EM_data$sigma[i]), 
        col = 1 + i, lwd = 0.8, add = TRUE)
}
lines(density(EM_data$x), lty=2, lwd=0.8)

enter image description here