2

私は自分のデータからヘッセ行列を取得しようとしていますが、2 つの結果があります -

  • library(numDeriv) のコード Hessian を使用する
  • library(maxLik) のコード numericHessian を使用

Hessian の結果は、numericHessian の結果に比べて非常に小さいです。

この場合、どちらの結果を信頼する必要がありますか?

具体的には、私が使用したデータは 350000 から 1100000 の範囲で、合計 18 のデータ値を持つ 9X2 マトリックスでした。

私は一種の標準偏差式を使用し、「numericHessian」の結果は 2X2 行列で 230 から 466 の範囲でしたが、「Hessian」の結果は -3.42e-18 から 1.34e-17 の範囲で、前のもの。

ある種の標準偏差の計算で正しいのはどれだと思いますか?

コードは次のとおりです。

 data=read.table("C:/file.txt", header=T);
 data <- as.matrix(data);
 library(plyr)
 library(MASS)
 w1 = tail(data/(rowSums(data)),1)
 w2 = t(w1)
 f <- function(x){
 w1 = tail(x/(rowSums(x)),1)
 w2 = t(w1)
 r = ((w1%*%cov(cbind(x))%*%w2)^(1/2))
 return(r)
 }
 library(maxLik); 
 numericHessian(f, t0=rbind(data[1,1], data[1,2]))
 library(numDeriv);
 hessian(f, rbind(data[1,1], data[1,2]), method="Richardson")

file.txt は次のとおりです。

  1                  2

 137                201

 122                342

 142                111

 171                126

 134                123

 823                876

 634                135

 541                214

 423                142

「numericHessian」の結果は次のとおりです。

          [,1]        [,2]
 [1,] 0.007105427 0.007105427
 [2,] 0.007105427 0.000000000

次に、「ヘシアン」の結果は次のとおりです。

          [,1]          [,2]
 [1,] -3.217880e-15 -1.957243e-16
 [2,] -1.957243e-16  1.334057e-16

事前にどうもありがとうございました。

4

1 に答える 1