【发布时间】:2017-03-30 05:53:00
【问题描述】:
我正在尝试以类似于jhoward 对here 进行细微更改的方式对来自“mixtools”包的输出数据进行建模。提供的示例按预期工作,他的解决方案适用于我的数据,但是拟合的分布似乎......倾斜。
注意两个分布是如何在 x 轴上方略微倾斜的。
使用人工数据集不再显示问题。
`sample.ratio`=c(rnorm(120000,0.386,0.0842),rnorm(200000,0.653,0.1153))
`mixmdl_k2.sample`=normalmixEM(`sample.ratio`, k=2)
ggplot_mixEM <- function(EM) {
require(ggplot2)
x <- with(EM,seq(min(x),max(x),len=1000))
pars <- with(EM,data.frame(comp=colnames(posterior), mu, sigma,lambda))
em.df <- data.frame(x=rep(x,each=nrow(pars)),pars)
em.df$y <- with(em.df,lambda*dnorm(x,mean=mu,sd=sigma))
ggplot(data.frame(x=EM$x),aes(x,y=..density..)) +
geom_histogram(fill=NA,color="black")+
geom_polygon(data=em.df,aes(x,y,fill=comp),color="grey50", alpha=0.5)+
scale_fill_discrete("Component\nModes",labels=format(em.df$mu,digits=3))+
geom_density(color="red",linetype="dotted")
}
ggplot_mixEM(`mixmdl_k2.sample`)
。分布填充现在是水平的,尽管它们也不再受限于 (0,1) 区间。
关于我的数据:它的范围明确地从 0 到 1,并且由 mixtools 建模的双峰分布是预期的。使用scale_x_continuous(limits=c(-0.1,1.1)) 增加 x 比例并不能解决问题。上面链接中的第一个解决方案由Spacedman 提供,也适用于我的数据,但给出了相同的“倾斜图”结果。
有谁知道为什么会发生这种情况以及如何解决这种倾斜?有没有办法强制将阴影扩展到 x 轴?
谢谢。
编辑:在示例代码中添加。
【问题讨论】:
-
您应该在问题中包含reproducible example,其中包含示例输入数据和用于制作绘图的代码。
-
我添加了我的代码示例,但人工数据集不再出现问题。
-
那么确定您的数据与模拟数据有何不同会很有用。现在您似乎只在
x的范围内计算多边形,但分布在极端情况下可能不是 0。可能最好扩大您计算值的范围。另外,你从哪里养成了在反引号中引用变量名的奇怪习惯? -
反引号是因为我的大多数数据的名称中都有数字(正如您在第二个中看到的那样),而当数字是第一个字符时,RStudio 不喜欢它多变的。我最近一直试图不以数字开头变量,但我离题了......我不确定样本数据集和真实数据集有何不同。
> head(`sample.ratio`) [1] 0.4416384 0.4001051 0.5458209 0.2530325 0.4094072 0.3403063 > head(`20-03_UG.Ratio`) [1] 0.6800000 0.2826087 0.6153846 0.3333333 0.4137931 0.3333333扩大计算范围需要修改哪一步? -
原来是
x <- with(EM,seq(min(x),max(x),len=1000))行。我把它改成了 max(1.1) 并且成功了。