Các báo giá đầy đủ có thể được tìm thấy ở đây . Ước tính θ N là giải pháp của vấn đề giảm thiểu ( trang 344 ):θ^N
minθ∈ΘN−1∑i=1Nq(wi,θ)
Nếu giải pháp θ N là điểm bên trong của Θ , hàm mục tiêu là hai lần khả vi và độ dốc của hàm mục tiêu là số không, sau đó Hessian của hàm mục tiêu (đó là H ) là tích cực bán nhất định.θ^NΘH^
Bây giờ những gì Wooldridge đang nói rằng đối với mẫu đã cho, Hessian theo kinh nghiệm không được đảm bảo là xác định dương hoặc thậm chí là bán chính xác dương. Điều này đúng, vì Wooldrige không đòi hỏi hàm mục tiêu có đặc tính tốt đẹp, ông đòi hỏi rằng có tồn tại một giải pháp độc đáo θ 0 choN−1∑Ni=1q(wi,θ)θ0
minθ∈ΘEq(w,θ).
N−1∑Ni=1q(wi,θ)Θ
Hơn nữa trong cuốn sách của mình, Wooldridge đưa ra một ví dụ về các ước tính của Hessian được đảm bảo là xác định số dương. Trong thực tế, sự dứt khoát không tích cực của Hessian nên chỉ ra rằng giải pháp nằm trên điểm biên hoặc thuật toán không tìm được giải pháp. Mà thường là một dấu hiệu nữa cho thấy mô hình được trang bị có thể không phù hợp với dữ liệu đã cho.
Dưới đây là ví dụ bằng số. Tôi tạo ra vấn đề bình phương tối thiểu phi tuyến tính:
yi=c1xc2i+εi
X[1,2]εσ2set.seed(3)
xiyi
Tôi đã chọn bình phương hàm mục tiêu của hàm mục tiêu bình phương nhỏ nhất phi tuyến tính thông thường:
q(w,θ)=(y−c1xc2i)4
Đây là mã trong R để tối ưu hóa chức năng, độ dốc và hessian của nó.
##First set-up the epxressions for optimising function, its gradient and hessian.
##I use symbolic derivation of R to guard against human error
mt <- expression((y-c1*x^c2)^4)
gradmt <- c(D(mt,"c1"),D(mt,"c2"))
hessmt <- lapply(gradmt,function(l)c(D(l,"c1"),D(l,"c2")))
##Evaluate the expressions on data to get the empirical values.
##Note there was a bug in previous version of the answer res should not be squared.
optf <- function(p) {
res <- eval(mt,list(y=y,x=x,c1=p[1],c2=p[2]))
mean(res)
}
gf <- function(p) {
evl <- list(y=y,x=x,c1=p[1],c2=p[2])
res <- sapply(gradmt,function(l)eval(l,evl))
apply(res,2,mean)
}
hesf <- function(p) {
evl <- list(y=y,x=x,c1=p[1],c2=p[2])
res1 <- lapply(hessmt,function(l)sapply(l,function(ll)eval(ll,evl)))
res <- sapply(res1,function(l)apply(l,2,mean))
res
}
Thử nghiệm đầu tiên rằng gradient và hessian hoạt động như quảng cáo.
set.seed(3)
x <- runif(10,1,2)
y <- 0.3*x^0.2
> optf(c(0.3,0.2))
[1] 0
> gf(c(0.3,0.2))
[1] 0 0
> hesf(c(0.3,0.2))
[,1] [,2]
[1,] 0 0
[2,] 0 0
> eigen(hesf(c(0.3,0.2)))$values
[1] 0 0
xy
> df <- read.csv("badhessian.csv")
> df
x y
1 1.168042 0.3998378
2 1.807516 0.5939584
3 1.384942 3.6700205
4 1.327734 -3.3390724
5 1.602101 4.1317608
6 1.604394 -1.9045958
7 1.124633 -3.0865249
8 1.294601 -1.8331763
9 1.577610 1.0865977
10 1.630979 0.7869717
> x <- df$x
> y <- df$y
> opt <- optim(c(1,1),optf,gr=gf,method="BFGS")
> opt$par
[1] -114.91316 -32.54386
> gf(opt$par)
[1] -0.0005795979 -0.0002399711
> hesf(opt$par)
[,1] [,2]
[1,] 0.0002514806 -0.003670634
[2,] -0.0036706345 0.050998404
> eigen(hesf(opt$par))$values
[1] 5.126253e-02 -1.264959e-05
Gradient là 0, nhưng hessian là không tích cực.
Lưu ý: Đây là lần thứ ba tôi đưa ra câu trả lời. Tôi hy vọng cuối cùng tôi cũng có thể đưa ra những phát biểu toán học chính xác, điều này đã lảng tránh tôi trong các phiên bản trước.