私は自分のデータからヘッセ行列を取得しようとしていますが、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
事前にどうもありがとうございました。