El vector score es el vector gradiente, es decir, el vector con las primeras derivadas de una función.
Sabemos que la derivada de una función \(f(x)\) en un punto nos da la pendiente de la recta tangente a la función en ese punto. Esto significa que sabemos la rapidez de crecimiento/decrecimiento de la función en ese punto. A continuación una figura ilustrativa del concepto de derivada.
En esta sección vamos a mostrar la forma de calcular derivadas numéricas con R para una función de una variable.
Para hallar la Pendiente de la recta tangente a la curva \(f(x)=160x-16x^2\) en los puntos \(x\)=5 y \(x\)=2 se aplica la primera derivada a la función y luego se evalua la derivada resultante en esos puntos.
A continuación se muestra como obtener de forma analÃtica la pendiente de la recta tangente en los puntos dados.
Para \(x = 2\) \[f'(x)= \frac{d(160x-16x^2)}{dx}\Big |_{x=2} = 160-2(16)x\Big |_{x=2} = 160-2(16)(2) = 96\] Para \(x = 5\) \[f'(x)= \frac{d(160x-16x^2)}{dx}\Big |_{x=2} = 160-2(16)x\Big |_{x=5} = 160-2(16)(5) = 0\]
Para obtener la derivada computacion podemos hacer uso de la función grad() del paquete numDeriv, a continuación el código necesario.
f <- function(x) 160*x-16*x^2
library(numDeriv)
grad(func=f, x=2) # para x= 2
[1] 96
grad(func=f, x=5) # para x= 5
[1] -1.418439e-09
Los resultados anteriores se pueden resumir como sigue.
\[f'(x)= \frac{d(160x-16x^2)}{dx}\Big |_{x=2} =96 \] \[f'(x)= \frac{d(160x-16x^2)}{dx}\Big |_{x=5} = -1.418439 e^{-09} \approx 0 \]
Del resultado anterior vemos que el resultado analÃtico y el resultado computacional coinciden.
A continuación se ilustran gráficamente los resultados obtenidos. En color rojo está la lÃnea tangente a \(f(x)\) en \(x=2\) y en color azul la lÃnea tangente a \(f(x)\) en \(x=5\).
Las derivadas parciales nos indican la pendiente de una recta tangente a la superficie en un punto dado y que es paralela a uno de los ejes, por esa razón serÃa dos.
Como ejemplo suponga que tenemos la función \(f(x,y)=4-x^2-2y^2\) y suponga que queremos el valor de la pendiente de la recta tangente a la superficie en el punto \(P=(1, 1, 1)\).
Para obtener las dos pendientes usamos nuevamente la función grad asÃ:
f <- function(x) 4-x[1]^2-2*x[2]^2
library(numDeriv)
grad(func=f, x=c(1, 1))
[1] -2 -4
Usando los resultados anteriores podemos concluir que \(f_x(1, 1)=-2\) y \(f_y(1, 1)=-4\), es decir \(\nabla{f(1,1)} = (-2,-4)\). En la siguiente figura se ilustra el punto de la superficie en la cual nos ubicamos para calcular las dos pendientes.
La matriz Hesssiana de una función multivariable \(f(x,y, z, \dots)\) denotada por \(H(f)\), \(Hf\) o \(H_f\), esta matriz organiza las segundas derivadas parciales de una función. A continuación la estructura de la matriz Hessiana.
\[Hf= \begin{bmatrix} \frac{\partial^2 f}{\partial x^2} & \frac{\partial^2 f}{\partial x \partial y} & \frac{\partial^2 f}{\partial x \partial z} & \dots \\ \frac{\partial^2 f}{\partial y \partial x} & \frac{\partial^2 f}{\partial y^2} & \frac{\partial^2 f}{\partial y \partial z} & \dots \\ \frac{\partial^2 f}{\partial z \partial x} & \frac{\partial^2 f}{\partial z \partial y} & \frac{\partial^2 f}{\partial z^2} & \dots \\ \vdots & \vdots & \vdots & \ddots \end{bmatrix}\]
En el caso de una función univariada la matriz Hessiana se puede escribir como:
\[ Hf= \begin{bmatrix} f_{xx} \end{bmatrix} = \begin{bmatrix} \frac{\partial^2 f}{\partial x^2} \end{bmatrix} \]
\[ Hf(x) = \begin{bmatrix} f_{xx}(x) \end{bmatrix}\]
Como ejemplo, supongamos que se desea calcular la Hessiana de la función \(f(x)= x^3 - 2x\) en el punto \(x=1\)
Primero se necesita calcular la primera derivada parcial:
\[f_{x}(x)= \frac{\partial f}{\partial x}(x^3-2x)= 3x^2-2\] Luego se calcula la segunda derivada parcial:
\[f_{xx}(x)= \frac{\partial f}{\partial x}(3x^2-2)= 6x\]
La matriz Hessiana es en este caso es una matriz \(1 \times 1\) con la anterior función como entrada:
\[ Hf(x) = \begin{bmatrix} f_{xx}(x) \end{bmatrix} = \begin{bmatrix} 6x \end{bmatrix}\]
Si se necesita calcular la Hessiana en el punto \(x = 1\), se reemplaza en la matriz de la siguiente manera.
\[ Hf(1) = \begin{bmatrix} 6(1) \end{bmatrix} = \begin{bmatrix} 6 \end{bmatrix}\]
Podemos hacer uso de la función hessian() del paquete numDeriv para encontrar el valor de las segundas derivadas parciales en un punto.
f <- function(x) x^3-2*x
library(numDeriv)
hessian(func=f, x=1)
## [,1]
## [1,] 6
Del resultado anterior vemos que el resultado analÃtico y el resultado computacional coinciden.
La matriz Hessiana para dos dimensiones es:
\[ Hf= \begin{bmatrix} f_{xx} & f_{xy} \\ f_{yx} & f_{yy} \end{bmatrix} = \begin{bmatrix} \frac{\partial^2 f}{\partial x^2} & \frac{\partial^2 f}{\partial x \partial y} \\ \frac{\partial^2 f}{\partial y \partial x} & \frac{\partial^2 f}{\partial y^2} \end{bmatrix} \]
\[ Hf(x,y) = \begin{bmatrix} f_{xx}(x,y) & f_{xy}(x,y) \\ f_{yx}(x,y) & f_{yy}(x,y) \end{bmatrix}\]
Como ejemplo supongamos que nos interesa calcular la Hessiana de la función \(f(x,y)= x^3 - 2xy - y^6\) en el punto \((1,2)\).
Primero se necesita calcular las primeras derivadas parciales:
\[f_{x}(x,y)= \frac{\partial f}{\partial x}(x^3-2xy-y^6)= 3x^2-2y\]
\[f_{y}(x,y)=\frac{\partial f}{\partial x}(x^3-2xy-y^6)= -2x-6y^5\] Luego se calcula las segundas derivadas parciales:
\[f_{xx}(x,y)= \frac{\partial f}{\partial x}(3x^2-2y)= 6x\] \[f_{xy}(x,y)=\frac{\partial f}{\partial y}(3x^2-2y)=-2\] \[f_{yx}(x,y)=\frac{\partial f}{\partial x}(-2x-6y^5)= -2\] \[f_{yy}(x,y)=\frac{\partial f}{\partial y}(-2x-6y^5) = -30y^4\]
La matriz Hessiana es en este caso una matriz \(2 \times 2\) con las anteriores funciones como entradas:
\[ Hf(x,y) = \begin{bmatrix} f_{xx}(x,y) & f_{xy}(x,y) \\ f_{yx}(x,y) & f_{yy}(x,y) \end{bmatrix} = \begin{bmatrix} 6x & -2 \\ -2 & -30y^4 \end{bmatrix}\]
Se necesita calcular la Hessiana en el punto \((x,y) = (1,2)\), para esto se reemplaza en los valores correspondientes en la matriz:
\[ Hf(1,2) = \begin{bmatrix} 6(1) & -2 \\ -2 & -30(2)^4 \end{bmatrix} = \begin{bmatrix} 6 & -2 \\ -2 & -480 \end{bmatrix}\]
Podemos hacer uso de la función hessian() en R para encontrar el valor de las segundas derivadas parciales en un punto.
f <- function(x) x[1]^3-2*x[1]*x[2]-x[2]^6
library(numDeriv)
hessian(func=f, x=c(1, 2))
## [,1] [,2]
## [1,] 6 -2
## [2,] -2 -480
Del resultado anterior vemos que el resultado analÃtico y el resultado computacional coinciden.