二元混合正态对数正态模型的参数估计

时间:2013-06-11 08:13:47

标签: r probability mixture-model

我必须创建一个模型,它是正态分布和对数正态分布的混合。为了创建它,我需要通过最大化对数似然函数来估计2个协方差矩阵和混合参数(总共= 7个参数)。这种最大化必须由nlm例程执行。

当我使用相对数据时,平均值已知且等于1.

我已经尝试过1维(使用1组相关数据)并且效果很好。但是,当我介绍第二组相关数据时,我得到了相关性和许多警告消息的不合逻辑的结果(总共25个)。

为了估计这些参数,我首先使用2个命令dmvnorm和dlnorm.plus定义了对数似然函数。然后我分配参数的起始值,最后我使用nlm例程来估计参数(参见下面的脚本)。

  `P <- read.ascii.grid("d:/Documents/JOINT_FREQUENCY/grid_E727_P-3000.asc", return.header= 
  FALSE ); 
  V <- read.ascii.grid("d:/Documents/JOINT_FREQUENCY/grid_E727_V-3000.asc", return.header= 
  FALSE ); 

 p <- c(P); # tranform matrix into a vector
 v <- c(V);

 p<- p[!is.na(p)] # removing NA values
 v<- v[!is.na(v)]

 p_rel <- p/mean(p) #Transforming the data to relative values
 v_rel <- v/mean(v) 
 PV <- cbind(p_rel, v_rel) # create a matrix of vectors

 L <- function(par,p_rel,v_rel) {

 return (-sum(log( (1- par[7])*dmvnorm(PV, mean=c(1,1), sigma= matrix(c(par[1]^2, par[1]*par[2] 
 *par[3],par[1]*par[2]*par[3], par[2]^2 ),nrow=2, ncol=2))+
 par[7]*dlnorm.rplus(PV, meanlog=c(1,1), varlog= matrix(c(par[4]^2,par[4]*par[5]*par[6],par[4]
 *par[5]*par[6],par[5]^2), nrow=2,ncol=2))            )))

 }
 par.start<- c(0.74, 0.66 ,0.40, 1.4, 1.2, 0.4, 0.5) # log-likelihood estimators

 result<-nlm(L,par.start,v_rel=v_rel,p_rel=p_rel, hessian=TRUE, iterlim=200, check.analyticals= TRUE)

 Messages d'avis :

 1: In log(eigen(sigma, symmetric = TRUE, only.values = TRUE)$values) :
 production de NaN

 2: In sqrt(2 * pi * det(varlog)) : production de NaN

 3: In nlm(L, par.start, p_rel = p_rel, v_rel = v_rel, hessian = TRUE) :
 NA/Inf replaced by maximum positive value

 4: In log(eigen(sigma, symmetric = TRUE, only.values = TRUE)$values) :
 production de NaN

 …. Until 25.

 par.hat <- result$estimate

 cat("sigN_p =", par[1],"\n","sigN_v =", par[2],"\n","rhoN =", par[3],"\n","sigLN_p =", par  [4],"\n","sigLN_v =", par[5],"\n","rhoLN =", par[6],"\n","mixing parameter =", par[7],"\n")

 sigN_p = 0.5403361 

 sigN_v = 0.6667375 

 rhoN = 0.6260181 

 sigLN_p = 1.705626 

 sigLN_v = 1.592832 

 rhoLN = 0.9735974 

 mixing parameter = 0.8113369`

有人知道我的模型中有什么问题,或者我该如何在2维中找到这些参数?

非常感谢你花时间看我的问题。

此致

Gladys Hertzog

1 个答案:

答案 0 :(得分:0)

当我做这些优化问题时,我发现确保我优化的所有变量都被限制为合理的值是很重要的。例如,标准偏差变量必须是正数,并且根据我正在建模的情况的知识,我可能也能够将所有标准偏差变量的上限设置为上限。因此,如果s是我的标准偏差变量之一,并且m是我希望它采用的最大值,而不是使用s我将解决变量{与z通过

相关的{1}}
    s = m/(1+e-z)

在该公式中,s不受约束,但z必须位于s0之间。这是至关重要的,因为变量例程中变量不受限制以采取合理的值,在尝试约束解决方案时,通常会尝试完全不可信的值。难以置信的价值经常导致例如问题。精确度,然后产生m等。我用来约束单个变量NaN以便位于xa之间的通用公式是

    x = a + (b - a)/(1+e-z)

但是,对于您在寻找协方差矩阵的特定问题,需要一种比简单地限制所有单个变量更复杂的方法。协方差矩阵必须是正半正定的,所以如果你只是优化矩阵中的各个值,那么如果非正定矩阵被输入,则优化可能会失败(产生b)似然函数。为了解决这个问题,一种方法是求解协方差矩阵的Cholesky decomposition而不是协方差矩阵本身。我的猜测是,这可能是导致优化失败的原因。