1

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

当我使用相对数据时,均值已知且等于 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`

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

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

问候,

格拉迪斯·赫佐格

4

1 回答 1

0

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

    s = m/(1+e -z )

在该公式中,z不受约束,但s必须介于0和之间m。这一点至关重要,因为变量不受约束以取合理值的优化例程通常会在尝试限制解决方案时尝试完全不合理的值。不可信的值通常会导致精度问题,然后导致NaN's 等。我用于将单个变量约束xa和之间的通用公式b

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

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

于 2013-06-11T10:52:32.580 回答