0

我想知道是否可以将数学中的 NMinimize 与包含随机变量的目标函数一起使用?例如,我有一个函数,其参数遵循分布(正态和截断正态)。我想将其直方图拟合到我拥有的数据并构建一个目标函数,现在我需要最小化它(因此,目标函数取决于参数的 mus 和 sigmas 并且需要确定)。如果我运行我的代码,则会出现一条错误消息:它声称 NormalDistribution 的参数需要为正(如果我手动插入目标函数的 mus 和 sigmas 的数字,我不会收到错误消息)。所以,我想知道 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}}]

错误消息是:“RandomVariate::realprm: NormalDistribution[mu,0.9] 中位置 1 的参数 mu 应为实数。>>”

4

0 回答 0