2017-09-26 20 views
-2

私は様々な初期値を持つモデルを実行していますが、ループでデータフレームに値(3つの推定値)を追加しようとしています。私はループ内の推定値に値を割り当てますが、データフレームを生成するためにそれらを呼び出すことはできません。ループ内のデータフレーム行ごとに値を追加します

私のコード:fは推定モデルです。モデルの3つのパラメータ: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. 
+0

関数fを変更することで、例を実行しています –

+0

1.それを行うdo.call(rbind、mylist)、2。RUN-INDEXで新しい列を作成するのは、独自の行ではなく、 3.エラー関数では、失敗した実行も記録します。とにかく後でそれを取り除くことができます。 –

+0

また、fとは何ですか? –

答えて

1

私はmaxLikが属するライブラリーを明記してください

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 
+0

ありがとう、データフレームはまだコードから何も返しません。私が気づいたことの1つは、コードにインデックス 'j'がないということです。それは反復処理ではありません。 – Kay

+0

ありがとう、それは 'f'の問題ですか? – Kay

+0

は、あなたのf関数をチェックすることもできます。さもなければ、上記のようにデータフレームが追加されます。 –

関連する問題