我试图从我自己的数据中获取 Hessian 矩阵,我有两个结果 -
- 使用库中的代码 Hessian(numDeriv)
- 使用库中的代码 numericHessian (maxLik)
相对于 numericHessian 的结果,Hessian 的结果非常小。
在这种情况下,我应该相信哪些结果?
具体来说,我使用的数据范围从 350000 到 1100000,它们是 9X2 矩阵,共有 18 个数据值。
我使用了一种标准偏差公式,“numericHessian”的结果范围从 230 到 466,使用 2X2 矩阵,而“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
那么,“Hessian”的结果是:
[,1] [,2]
[1,] -3.217880e-15 -1.957243e-16
[2,] -1.957243e-16 1.334057e-16
非常感谢您提前。