我正在研究R(初学者)中的损失厌恶模型,并且想要从具有3列的数据集(损失/增益值(连续的和具有编码为0或1的决策的列(二进制))估计一些参数) dropbox.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(设置$ Decision)) 系数: 拉姆达临时 1.298023 1.041057
当我尝试在没有alpha参数的情况下运行它时它工作正常但是当我包含它时我收到了这两个错误:
optim中的错误(start,f,method = method,hessian = TRUE,...): 非有限有限差分值[2](对于第一个MLE)误差 optim(start,f,method = method,hessian = TRUE,...):initial 'vmmin'中的值不是有限的(对于第二个MLE)
我试着重新编码矩阵,奇异值分解,BFGS等。 欢迎任何帮助......提前感谢。
答案 0 :(得分:2)
您的Loss
变量为否定。在R中,将负值提升为分数幂(即set$Loss^alpha
,其中alpha
是非整数)返回NaN
值。 (唯一的一般选择是返回一个你可能不想要的复数值答案。)你的意思是将Loss
编码为正面而非负面的吗?或许你想要-abs(set$Loss^alpha)
?
作为通用调试技巧,它有助于添加
cat(lambda,alpha,temp,-sum(loglike),"\n")
作为目标函数的倒数第二行,以便您更好地了解正在发生的事情。