【问题标题】:append values by dataframe row in a loop在循环中按数据框行附加值
【发布时间】: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 你的意思是追加列表中的所有值,而不是数据框?所以不要一开始就使用数据框?
  • 您对您的帖子进行了更改。不太清楚你的意思了。尝试制作一个简单且仍然包含您的问题的示例。

标签: r loops append


【解决方案1】:

我正在运行一个示例,通过更改函数 f

library("maxLik")

t <- rexp(100, 2)
loglik <- function(theta) log(theta) - theta*t


df <- data.frame(alpha = numeric(), rho = numeric(), lambda = numeric())

for (j in 1:20){
  tryCatch({
    ml <- maxLik(loglik, start = c(alpha = runif(1, 0, 2), rho = runif(1, 0, 4), 
                              lambda = runif(1, 0, 10)), method = "NM")

    df <- rbind(df, data.frame(alpha = ml$estimate[1], 
                               rho = ml$estimate[2], 
                               lambda = ml$estimate[3]))
    # I tried to append values for each column         
  }, error = function(e) {NA})}

> row.names(df) <- NULL
> head(df)
     alpha      rho   lambda
1 2.368739 2.322220 2.007375
2 2.367607 2.322328 2.007093
3 2.368324 2.322105 2.007597
4 2.368515 2.322072 2.007334
5 2.368269 2.322071 2.007142
6 2.367998 2.322438 2.007391

【讨论】:

  • 谢谢,数据框仍然没有从代码中返回任何内容。我注意到的一件事是您的代码中没有索引j,所以这不是迭代。
  • 谢谢,这就是f 的问题?
  • 可能是,检查你的 f 函数,否则数据帧如上所示追加
猜你喜欢
  • 2019-08-07
  • 2021-02-05
  • 1970-01-01
  • 2017-02-13
  • 2015-10-18
  • 1970-01-01
  • 2021-09-22
  • 2020-12-29
相关资源
最近更新 更多