0

我正在研究 R(初学者)中的损失规避模型,并希望从具有 3 列(损失/增益值(连续和决策编码为 0 或 1(二进制)的列)的数据集)的数据集中估计一些参数。 com/s/fpw3obrqcx8ld1q/GrandAverage.RData?dl=0 如果必须使用我正在使用的代码部分如下所示:

set <- GrandAverage[, 5:7];
  Beh.Parameters <- function (lambda, alpha, temp) {
 u = 0.5 * set$Gain^alpha + 0.5 * lambda * set$Loss^alpha
  GambleProbability <- 1 / (1 + exp(-temp * u))

  loglike <- set$Decision*log(GambleProbability) + 
    (1- set$Decision)*log(1-GambleProbability)   

  return(-sum(loglike))
 }

  temp_s <- 0.1 #runif(1, 0.1, 1)

  ML.estim1  <- mle(Beh.Parameters, start = list (lambda = 1, alpha = 1, temp = temp_s), nobs = length(set$Decision))
  ML.estim2  <- mle(Beh.Parameters, start = list(lambda = 0.1, alpha = 0.1,  temp = temp_s), nobs = length(set$Decision))

我使用 mle 函数来估计 3 个参数(lambda、alpha 和 temp),没有 alpha 我收到此输出,例如:

ML.estim1 调用:mle(minuslogl = Beh.Parameters, start = list(lambda = 1, temp = temp_s), nobs = length(set$Decision)) 系数: lambda temp 1.298023 1.041057

当我尝试在没有 alpha 参数的情况下运行它时,它可以正常工作,但是当我包含它时,我收到了这两个错误:

optim(start, f, method = method, hessian = TRUE, ...) 中的错误:非有限有限差分值 [2](对于第一个 MLE) optim(start, f, method = method, hessian) 中的错误= TRUE, ...) : 'vmmin' 中的初始值不是有限的(对于第二个 MLE)

我尝试重新编码矩阵、奇异值分解、BFGS 等。欢迎提供任何帮助......在此先感谢。

4

1 回答 1

2

你的Loss变量是负数。在 R 中,将负值提高到分数幂(即set$Loss^alphaalpha整数的位置)会返回NaN值。(唯一通用的替代方法是返回一个复值答案,您可能不想要它。)您的意思是编码Loss为正数而不是负数吗?或者,也许你想要-abs(set$Loss^alpha)

作为通用调试技巧,它有助于添加

cat(lambda,alpha,temp,-sum(loglike),"\n")

作为目标函数的倒数第二行,以便您更好地了解正在发生的事情。

于 2017-01-05T13:55:24.870 回答