1

正規分布と対数正規分布が混在するモデルを作成する必要があります。これを作成するには、対数尤度関数を最大化して、2 つの共分散行列と混合パラメーター (合計 =7 パラメーター) を推定する必要があります。この最大化は nlm ルーチンで実行する必要があります。

相対データを使用しているため、平均は既知であり、1 に等しくなります。

私はすでに1次元(相対データの1セット)でそれをやろうとしましたが、うまくいきます。ただし、相対データの 2 番目のセットを導入すると、相関関係について非論理的な結果が得られ、多くの警告メッセージ (合計 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 次元で見つけるにはどうすればよいかを知っていますか?

私の質問に時間を割いていただき、誠にありがとうございます。

よろしく、

グラディス・ハーツォグ

4

1 に答える 1

0

この種の最適化問題を行うとき、最適化するすべての変数が妥当な値に制限されていることを確認することが重要であることがわかりました。たとえば、標準偏差変数は正である必要があり、モデリングしている状況の知識から、すべての標準偏差変数にも上限を設定できる可能性があります。したがって、ifsが標準偏差変数の 1 つであり、ifmが取得したい最大値である場合、使用する代わりに、に関連するs変数を解決します。zs

    s = m/(1+e -z )

その式では、zは制約されていませんが、とsの間にある必要があります。変数が妥当な値を取るように制約されていない最適化ルーチンは、解を制限しようとしているときに完全に妥当でない値を試みることが多いため、これは非常に重要です。信じがたい値は、精度などの問題を引き起こすことが多く、その結果、などになります。単一の変数を と の間に制限するために使用する一般式は、0mNaNxab

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

ただし、共分散行列を探している特定の問題に関しては、すべての個々の変数を単純に制限するよりも、より洗練されたアプローチが必要です。共分散行列は正の半正定値でなければならないため、行列の個々の値を単純に最適化するNaN場合、正定でない行列が尤度関数に入力されると、最適化はおそらく失敗します ('s を生成します)。この問題を回避するための 1 つの方法は、共分散行列自体ではなく、共分散行列のコレスキー分解を解くことです。私の推測では、これが最適化の失敗の原因である可能性があります。

于 2013-06-11T10:52:32.580 に答える