gpt4 book ai didi

r - 关于如何使用 ggplot2 绘制 mixEM 类型数据的任何建议

转载 作者:行者123 更新时间:2023-12-04 10:17:53 24 4
gpt4 key购买 nike

我有一个从我的原始数据中获得的 100 万条记录的样本。 (供您引用,您可以使用此虚拟数据,这些数据可能会生成近似相似的分布

b <- data.frame(matrix(rnorm(2000000, mean=c(8,17), sd=2)))
c <- b[sample(nrow(b), 1000000), ]
)
我认为直方图是两个对数正态分布的混合,我尝试使用 EM 算法使用以下代码拟合总和分布:
install.packages("mixtools")
lib(mixtools)
#line below returns EM output of type mixEM[] for mixture of normal distributions
c1 <- normalmixEM(c, lambda=NULL, mu=NULL, sigma=NULL)
plot(c1, density=TRUE)
第一个图是对数似然图,第二个图(如果你再次点击返回),给出类似于以下密度曲线:
Mixture model density curves
正如我提到的 c1 是 mixEM[] 类型,而 plot() 函数可以适应这种情况。我想用颜色填充密度曲线。使用 ggplot2() 很容易做到这一点,但 ggplot2() 不支持 mixEM[] 类型的数据并抛出此消息:

ggplot doesn't know how to deal with data of class mixEM


有没有其他方法可以解决这个问题?

最佳答案

查看返回对象的结构(这应该在帮助中记录):

> # simple mixture of normals:
> x=c(rnorm(10000,8,2),rnorm(10000,17,4))
> xMix = normalmixEM(x, lambda=NULL, mu=NULL, sigma=NULL)

怎么办:
> str(xMix)
List of 9
$ x : num [1:20000] 6.18 9.92 9.07 8.84 9.93 ...
$ lambda : num [1:2] 0.502 0.498
$ mu : num [1:2] 7.99 17.05
$ sigma : num [1:2] 2.03 4.02
$ loglik : num -59877

lambda、mu 和 sigma 组件定义返回的正常密度。您可以使用 qplot 在 ggplot 中绘制这些图和 stat_function .但首先创建一个返回缩放正常密度的函数:
sdnorm =
function(x, mean=0, sd=1, lambda=1){lambda*dnorm(x, mean=mean, sd=sd)}

然后:
qplot(x,geom="density") + stat_function(fun=sdnorm,args=list(mean=xMix$mu[1],sd=xMix$sigma[1], lambda=xMix$lambda[1]),fill="blue",geom="polygon")  + stat_function(fun=sdnorm,args=list(mean=xMix$mu[2],sd=xMix$sigma[2], lambda=xMix$lambda[2]),fill="#FF0000",geom="polygon") 

enter image description here

或其他 ggplot你拥有的技能。密度上的透明颜色可能会很好。
ggplot(data.frame(x=x)) + 
geom_histogram(aes(x=x,y=..density..),fill="white",color="black") +
stat_function(fun=sdnorm,
args=list(mean=xMix$mu[2],
sd=xMix$sigma[2],
lambda=xMix$lambda[2]),
fill="#FF000080",geom="polygon") +
stat_function(fun=sdnorm,
args=list(mean=xMix$mu[1],
sd=xMix$sigma[1],
lambda=xMix$lambda[1]),
fill="#00FF0080",geom="polygon")

生产:

enter image description here

关于r - 关于如何使用 ggplot2 绘制 mixEM 类型数据的任何建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25313578/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com