我想将两种高斯密度的混合物拟合到我的财务数据中。数据可以在这里找到:http: //uploadeasy.net/upload/2a7mw.rar这个变量叫做dat。
混合的概率密度由下式给出:
分位数可以通过使用数值算法解决以下问题来计算: 我在 R 中使用 mixtools:
install.packages("mixtools")
library(mixtools)
mixture<-normalmixEM(dat,k=2,fast=TRUE)
这使用了 EM 算法。
我现在想计算混合分布的 0,95 分位数。我做了一个循环,一种网格搜索,我假设分位数(由于我的数据的特性)将低于 0.3。所以循环在 0.3 结束
pi<-mixture$lambda[1]
mu1<-mixture$mu[1]
mu2<-mixture$mu[2]
sigma1<-mixture$sigma[1]
sigma2<-mixture$sigma[2]
quantile<-0
probabilitylevel<-0.95
dummy1<-0
# the loop lasts for about 20-40 seconds
for (i in 1:100000){
quantile[i]<-i/(1000000/3)
}
dummy1<- probabilitylevel - ( pi * pnorm(quantile,mean=mu1,sd=sigma1) + (1-pi) * pnorm(quantile,mean=mu2,sd=sigma2))
min(abs(dummy1))
which.min(abs(dummy1))
quantileresult<-which.min(abs(dummy1))/(1000000/3)
结果
quantileresult
是0.025371
这似乎是正确的,如果控制它:
pi * pnorm(quantileresult,mean=mu1,sd=sigma1) + (1-pi) * pnorm(quantileresult,mean=mu2,sd=sigma2)
我看剧情:
plot(density(dat),col="red")
curve(expr=pi*dnorm(x,mu1,sigma1)+(1-pi)*dnorm(x,mu2,sigma2),lwd=2,col="black",add=TRUE)
curve(dnorm(x,mean(dat),sd(dat)),add=TRUE,lty=3,col="orange",lwd=2)
这使
看起来,混合法线(黑色)更适合数据。橙色虚线是拟合数据集的单变量正态分布。它拟合数据不如混合密度好,这是正确的解释吗?
最后,我们查看单一密度并将其与混合物进行比较:
plot(density(dat),col="red")
curve(dnorm(x,mu1,sigma1),add=TRUE,lty=2,col="darkgreen")
curve(dnorm(x,mu2,sigma2),add=TRUE,lty=2,col="blue")
curve(expr=pi*dnorm(x,mu1,sigma1)+(1-pi)*dnorm(x,mu2,sigma2),lwd=2,col="black",add=TRUE)
这给出了以下情节:
第一个密度具有较高的峰值,第二个密度向左移动并具有较低的峰值,较高的方差。
我的计算和解释正确吗?