【发布时间】:2018-03-07 10:15:55
【问题描述】:
我正在运行具有各种初始值的模型,并且我正在尝试将值(3 个估计器)按行附加到循环中的数据帧。我在循环中为估算器赋值,但我无法调用它们来生成数据帧。
我的代码:f 是估计的模型。模型中的三个参数:alpha、rho 和 lambda。我想输出这3个值。
library("maxLik")
f <- function(param) {
alpha <- param[1]
rho <- param[2]
lambda <- param[3]
u <- 0.5 * (dataset$v_50_1)^alpha - 0.5 * lambda * (dataset$v_50_2)^alpha
p <- 1/(1 + exp(-rho * u))
logl <- sum(dataset$gamble * log(p) + (1 - dataset$gamble) * log(1 - p))
}
df <- data.frame(alpha = numeric(), rho = numeric(), lambda = numeric())
for (j in 1:20) {
tryCatch({
ml <- maxLik(f, start = c(alpha = runif(1, 0, 2), rho = runif(1, 0, 4), lambda = runif(1,
0, 10)), method = "NM")
alpha[j] <- ml$estimate[1]
rho[j] <- ml$estimate[2]
lambda[j] <- ml$estimate[3]
}, error = function(e) {NA})
}
output <- data.frame(alpha, rho, lambda)
发生错误:
Error in data.frame(alpha, rho, lambda) : object 'alpha' not found
预期输出
alpha rho lambda
0.4 1 2 # estimators append by row.
0.6 1.1 3 # each row has estimators that are estimated
0.7 1.5 4 # by one set of initial values, there are 20
# rows, as the estimation loops for 20 times.
【问题讨论】:
-
请注明maxLik所属的库
-
1.在一个列表中完成所有操作,然后 do.call(rbind,mylist), 2. 我宁愿用 RUN-INDEX 创建一个新列,而不是自己的行。 3. 在错误函数中,我也会记录失败的运行。无论如何,您以后都可以摆脱它。
-
另外请说明什么是 f?
-
@AndreElrico 你的意思是追加列表中的所有值,而不是数据框?所以不要一开始就使用数据框?
-
您对您的帖子进行了更改。不太清楚你的意思了。尝试制作一个简单且仍然包含您的问题的示例。