La citation complète peut être trouvée ici . L'estimation θ N est la solution du problème de minimisation ( page 344 ):θ^N
minθ∈ΘN−1∑i=1Nq(wi,θ)
Si la solution θ N est le point intérieur de Θ , la fonction objective est deux fois dérivable et le gradient de la fonction objectif est nul, alors Hessien de la fonction objective (qui est H ) est semi-définie positive.θ^NΘH^
Maintenant ce que Wooldridge dit que pour un échantillon donné, la Hesse empirique n'est pas garantie d'être positive définie ou même semi-définie positive. Cela est vrai, puisque Wooldridge n'exige pas que la fonction objective ait de belles propriétés, il exige qu'il existe une solution unique θ 0 pourN−1∑Ni=1q(wi,θ)θ0
minθ∈ΘEq(w,θ).
N−1∑Ni=1q(wi,θ)Θ
Plus loin dans son livre, Wooldridge donne des exemples d'estimations de la Hesse qui sont assurément définies numériquement positives. En pratique, le caractère définitif non positif de la Hesse devrait indiquer que la solution se trouve soit au point limite, soit que l'algorithme n'a pas réussi à trouver la solution. Ce qui est généralement une indication supplémentaire que le modèle ajusté peut être inapproprié pour des données données.
Voici l'exemple numérique. Je génère un problème de moindres carrés non linéaires:
yi=c1xc2i+εi
X[1,2]εσ2set.seed(3)
xiyi
J'ai choisi la fonction objectif carré de la fonction objective des moindres carrés non linéaires habituelle:
q(w,θ)=(y−c1xc2i)4
Voici le code en R pour optimiser la fonction, son gradient et sa toile de jute.
##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
}
Testez d'abord que le gradient et la toile de jute fonctionnent comme annoncé.
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
Le gradient est nul, mais la toile de jute n'est pas positive.
Remarque: Il s'agit de ma troisième tentative de réponse. J'espère que j'ai finalement réussi à donner des énoncés mathématiques précis, qui m'ont échappé dans les versions précédentes.