Rの最適関数に関する質問
これまでのところ、次のコードがあり、X と T の値を入力することを知る必要があります。X は 10 個の値のベクトルであり、T は平均と分散に関連する 10*2 値のベクトルです。出力を、alpha、mean1、mean2、var1、および var2 の 1 つの新しい値の形式にしたいと考えています。入力データを正しく取得する方法がわかりません。
この関数で X のすべての値を実行したいのですが、T の最初の行 (10 個の値) だけを実行したいのですが、T に対してこれを行う方法がわかりません。2 番目の行には別の関数があります。
R <-runif(10, 0, 1)
S <-1-R
T <-t(cbind(R,S))
X <- runif(10, 25, 35)
Data1 <- function(xy) {
alpha <- xy[1]
mean1 <- xy[2]
mean2 <- xy[3]
var1 <- xy[4]
var2 <- xy[5]
-sum(0.5*(((X)-mean1)/var1)^2+alpha*mean1+log(2.5*var1)+log(exp(-alpha*mean1)+exp(-alpha*mean2))*(T))
}
starting_values <- c(0.3, 28, 38, 4, 3)
optim(starting_values, Data1, lower=c(0, 0, 0, 0, 0), method='L-BFGS-B')
次のエラーコードも取得します。
Error in optim(starting_values, Data1, lower = c(0, 0, 0, 0, 0), method = "L-BFGS-B") :
L-BFGS-B needs finite values of 'fn'
どんな助けにも乾杯。
編集
含めるための 2 番目の関数
0.5*((y1-mean2)/var2)^2+alpha*mean2+log(2.5*var2)+ log(exp(-alpha*mean1)+exp(-alpha*mean2)))*T
わかりましたので、私がやりたいことをできるだけ明確に説明してください。上記の元の投稿の最初の関数は、X の 10 個の値すべてを一度に 1 つずつ取得し、T データの最初の行 (ここでは R とラベル付けされています) を取得する必要がありますが、これを行う方法がわかりません。
上記の 2 番目の関数は、X の 10 個の値すべてを連続して取得し、次に T から 2 番目のデータ行を取得する必要があります (以下では S とラベル付けされています)。
これらすべてが合計されます。このようにして、5 つの未知のパラメータが推定されます。
T
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
R 0.1477715 0.3055021 0.2963543 0.04149945 0.8342484 0.996865333 0.1592568 0.4623762 0.8000778 0.6979342
S 0.8522285 0.6944979 0.7036457 0.95850055 0.1657516 0.003134667 0.8407432 0.5376238 0.1999222 0.3020658
編集2
同じシードを実行しても、ベンと同じ値が得られません。すべてのパッケージがインストールされていることを確認しましたが、インストールされているように見えます。同じ最終的な答えが得られず、opt2$par の個々のアイテムを呼び出すこともできません。一連の出力を提供する代わりに、最初の数行と最後の数行を提供します。
0.3 28 38 4 3 -74.97014 -120.7212
Loading required package: BB
Loading required package: quadprog
Loading required package: ucminf
Loading required package: Rcgmin
Loading required package: Rvmmin
Attaching package: ‘Rvmmin’
The following object(s) are masked from ‘package:optimx’:
optansout
Loading required package: minqa
Loading required package: Rcpp
0.3 28 38 4 3 -74.97014 -120.7212
0.9501 28 38 4 3 -176.3368 -265.9074
1.9001 28 38 4 3 -324.7782 -478.4652
0.9501 28.95 38 4 3 -179.9994 -260.8711
0.9501 28 38.95 4 3 -176.3366 -283.0445
0.9501 28 38 4.95 3 -176.7836 -265.9074
0.9501 28 38 4 3.95 -176.3368 -254.6188
...................
16.32409 27.86113 38.54337 3.940143 2.504167 -2566.194 -3826.233
16.32409 27.86113 38.54337 3.940044 2.504167 -2566.194 -3826.233
16.32409 27.86113 38.54337 3.940093 2.504199 -2566.194 -3826.232
16.32409 27.86113 38.54337 3.940093 2.504136 -2566.194 -3826.234
> opt2$par
$par
[1] 16.324085 27.861134 38.543373 3.940093 2.504167
> opt2$par["mean1"]
$<NA>
NULL