P splines en mgcv no se penalizan dos veces, sólo utilizan una forma diferente de matriz de penalización en la que penalizamos algún orden particular de diferencias entre los adyacentes $\beta_i$ .
Es importante señalar que GCV, REML, etc. son algoritmos para elegir $\boldsymbol{\lambda}$ los parámetros de suavidad; debido a la forma en que se define la complejidad del modelo en función de los coeficientes del mismo, el ajuste de un GAM penalizado implica básicamente encontrar $\boldsymbol{\beta}$ y $\boldsymbol{\lambda}$ para minimizar la log-verosimilitud negativa penalizada. Como medir La ondulación de las funciones ajustadas viene determinada por la forma de la matriz de penalización $\mathbf{S}$ pero al definir estas matrices no estamos penalizando nada con ellas en sí mismas. La penalización o contracción viene cuando elegimos valores para $\boldsymbol{\lambda}$ porque a medida que aumentamos $\boldsymbol{\lambda}$ tenemos que reducir los valores de $\boldsymbol{\beta}$ .
La medida de los wigglines en un GAM penalizado es
$$\boldsymbol{\beta}^{\mathsf{T}} \mathbf{S} \boldsymbol{\beta}$$
donde $\mathbf{S}$ es la matriz de penalización. Para los splines P, en lugar de una matriz de penalización directamente definida $\mathbf{S}$ que mide la ondulación de las funciones base, como hacemos con los splines de placa fina, definimos una matriz $\mathbf{P}$ de manera que nuestra medida de ondulación es ahora, siguiendo el argumento de Wood (2017, pp. 206; ligeramente modificado para corregir una errata)
$$\boldsymbol{\beta}^{\mathsf{T}} \mathbf{P}^{\mathsf{T}}\mathbf{P} \boldsymbol{\beta}$$
y por lo tanto $\mathbf{P}^{\mathsf{T}}\mathbf{P}$ es ahora nuestra matriz de penalización, y $\mathbf{P}$ la raíz cuadrada de la matriz de penalización.
En un spline P queremos penalizar las diferencias al cuadrado entre coeficientes adyacentes
$$\sum_{i=1}^{k-1}(\beta_{i+1} - \beta_i)^2 = \boldsymbol{\beta}^{\mathsf{T}} \mathbf{P}^{\mathsf{T}}\mathbf{P} \boldsymbol{\beta}$$
definimos $\mathbf{P}$ como
$$\mathbf{P} = \begin{bmatrix} -1 & 1 & 0 & \cdot & \cdot \\ 0 & -1 & 1 & 0 & \cdot \\ \cdot & \cdot & \cdot & \cdot & \cdot \\ \cdot & \cdot & \cdot & \cdot & \cdot \end{bmatrix}$$
para que tengamos
$$\begin{bmatrix} \beta_2 - \beta_1 \\ \beta_3 - \beta_2 \\ \cdot \\ \cdot \end{bmatrix} = \mathbf{P}\boldsymbol{\beta}$$
$\mathbf{P}$ es la raíz cuadrada de la matriz de penalización, por lo tanto, terminamos con
$$\boldsymbol{\beta}^{\mathsf{T}} \mathbf{P}^{\mathsf{T}}\mathbf{P} \boldsymbol{\beta} = \boldsymbol{\beta}^{\mathsf{T}} \begin{bmatrix} 1 & -1 & 0 & \cdot & \cdot & \cdot \\ -1 & 2 & -1 & 0 & \cdot & \cdot\\ 0 & -1 & 2 & -1 & 0 & \cdot \\ \cdot & \cdot & \cdot & \cdot & \cdot & \cdot \\ \cdot & \cdot & \cdot & \cdot & \cdot & \cdot \end{bmatrix} \boldsymbol{\beta}$$
Para ser claros, todo lo anterior se ha extraído/resumido de Wood (2017, pp. 206).
Espero que quede claro que la penalización se define directamente en términos de diferencias de grupos adyacentes (la diferencia puede ser de orden superior a las diferencias de primer orden mostradas aquí) de coeficientes. En otras palabras, los modelos más complejos son aquellos en los que hay grandes diferencias entre grupos adyacentes de coeficientes de spline/modelo.
En los splines de placa fina y los splines de regresión cúbica, por el contrario, la matriz de penalización $\mathbf{S}$ mide la ondulación de cada función base y cómo la ondulación de una función modifica la ondulación de la otra, es decir, cómo covierten las ondulaciones de las funciones base. Estas matrices de penalización se definen en términos de la ondulación de las propias funciones base, pero en un spline P la penalización se aplica a los coeficientes y no mide la ondulación de las propias funciones base.
Esto quiere decir que las splines P no se definen típicamente en términos de derivado -Las penalizaciones para los splines de placa fina y los splines de regresión cúbica son derivado -basado en. Digo típicamente, porque Simon Wood tiene una sección (5.3.4) en su libro de GAM (Wood 2017) que muestra cómo se pueden crear splines P con penalizaciones basadas en derivadas, pero puedes leerlo por ti mismo si estás interesado).
Si quieres jugar con esto en R (o traducirlo al idioma de tu elección), Simon incluye el siguiente fragmento sencillo para ilustrar cómo crear $\mathbf{P}$ para un tamaño determinado de $k$ y, por tanto, cuál es la matriz de penalización resultante $\mathbf{S}$ parece:
k <- 6
P <- diff(diag(k), differences = 1)
S <- crossprod(P)
con S
ahora se
> S
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 -1 0 0 0 0
[2,] -1 2 -1 0 0 0
[3,] 0 -1 2 -1 0 0
[4,] 0 0 -1 2 -1 0
[5,] 0 0 0 -1 2 -1
[6,] 0 0 0 0 -1 1
Para obtener diferencias de orden superior, cambie el differences
argumento
> P <- diff(diag(k), differences = 2)
> S <- crossprod(P)
> S
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 -2 1 0 0 0
[2,] -2 5 -4 1 0 0
[3,] 1 -4 6 -4 1 0
[4,] 0 1 -4 6 -4 1
[5,] 0 0 1 -4 5 -2
[6,] 0 0 0 1 -2 1
A medida que aumente el orden de las diferencias en la penalización, ésta actuará tirando, encogiendo, grupos más grandes de consecutivos $\beta_i$ entre sí como los elementos no nulos en $\mathbf{S}$ cubrir más de la $\beta_i$ .
Referencias
Wood, S.N., 2017. Modelos aditivos generalizados: An Introduction with R, Second Edition. CRC Press.