確率変数を含む目的関数で mathematica の NMinimize を使用できるかどうか疑問に思っていましたか? たとえば、分布 (正規および切り捨てられた正規) に従うパラメーターを持つ関数があります。そのヒストグラムを私が持っているデータに合わせて、最小化する必要がある目的関数を作成したいと思います(したがって、目的関数はパラメーターの mus と sigma に依存し、決定する必要があります)。コードを実行すると、エラー メッセージが表示されます。それは、NormalDistribution のパラメーターが正である必要があると主張しています (目的関数の mus と sigma の数値を手動で入力すると、エラー メッセージは表示されません)。ですから、NMinimize が非分析関数を処理できないのではないかと考えています。ありがとう!ここ、
listS と listT はどちらもイベント時間のリストです。私が持っているデータに時間の統計モデルの曲線を当てはめたいと思います (ここでは、非常に単純なもので、切り捨てられた正規分布で構成されています)。このために、生存曲線を比較し、最小二乗和を最小化する必要があります。私の問題は、関数 NMinimize が機能していないように見えることです。(元の目的関数は、確率変数であるパラメーターを持つより複雑な関数で構成されていることに注意してください)
(* どちらのリストも時刻のリストのはずです *)
SurvivalS[listeS_, x_] := Module[{res, survivald},
survivald = SurvivalDistribution[listeS];
res = SurvivalFunction[survivald, x];
res]
Residuum[listeT_, listeS_] :=
Table[(SurvivalS[listeT, listeT[[i]]] - SurvivalS[listeS, listeT[[i]]]), {i,
1, dataN}];
LeastSquare[listeT_, listeS_] :=
Total[Function[x, x^2] /@
Residuum[listeT,
listeS]];(* objective function, here ist is the sum of least square *)
objectiveF[mu_, sigma_] :=
Piecewise[{{LeastSquare[listeT, listeS[mu, sigma]], mu > 0 && sigma > 0}},
20 (1 + (sigma + mu)^2)];
pool = 100; (* No. points from MonteCarlo *)
listeS[mu_, sigma_] := RandomVariate[TruncatedDistribution[{0, 1}, NormalDistribution[mu, sigma]],pool];(* simulated data *)
listeT = Sort[RandomVariate[TruncatedDistribution[{0, 1}, NormalDistribution[.5, .9]],60]]; (* list of "measured" data *)
dataN = Length[listeT];
NMinimize[objectiveF[mu, .9], {{mu, .4}}]
エラー メッセージは次のとおりです。