1 votos

Funciones inversas para GAM

Me gustaría obtener la función inversa de mi GAM. Aquí está mi código de modelado:

y <- c(0.0000943615,0.0074918919,0.0157332851,0.0783308615,
       0.1546375803,0.5558444681,0.8583806898,0.9617216854,
       0.9848004112,0.9964662546)
x <- log(c(0.05, 0.1, 0.15, 0.2, 0.4, 0.8, 1.6, 3.2, 4.5, 6.4))
fit.gam <- gam(y~s(x,k=-1, bs="cr"),family=betar(link="logit"))

He utilizado el spline de regresión cúbica natural con bs="cr" .

Me gustaría saber el x y su intervalo de confianza que lleva a y=0.1 .

La solución más sencilla es encontrar los nudos correspondientes ( x_j y x_j+1 ) y la fórmula cuando x_j < x < x_j+1 entonces x=f(beta|y,x_j,x_j+1) . Sin embargo, cuando compruebo la fórmula en el libro escrito por el Dr. Wood, no es fácil escribir la fórmula.

En la página 145, el libro indica que la fórmula para los splines de regresión cúbica (después de la fórmula (4.3)) incluye una matriz de F que se compone de otras dos matrices B y D . Puedo escribir las otras partes, pero no estoy seguro de B y D matriz. Para B Creo que es una matriz de 2x2, pero para D La ilustración parece ser una matriz de 1x3.

¿Podría darme una idea de si es una buena manera de encontrar la función inversa? En caso afirmativo, ¿cómo debo construir la matriz D?

Gracias.

Editado en base a los comentarios:

A BalaGiezh:

A continuación se muestran las capturas de pantalla que obtuve del libro Modelos aditivos generalizados: una introducción con R por Simon N. Wood. enter image description here

enter image description here

Las matrices B y D se utilizan para construir la matriz F. Mi objetivo es escribir la f(x) fórmula (la que está debajo de la ecuación (4.3)) para poder hacer manualmente la función inversa. Espero que esto ayude.

Por Roland:

Sí. Me gustaría hacer una predicción inversa con los coeficientes ajustados por el GAM.

A Firebug:

Aquí, asumo que mi modelo de regresión es monótono. Viene con algunos valores atípicos, por lo que uso GAM para ayudarme a penalizar las estimaciones de los parámetros.

1voto

Ken Puntos 41

Esta es una solución práctica muy burda, pero puede ser suficiente mientras esperamos una respuesta adecuada... Predecir los valores de y en una cuadrícula de puntos en x y luego encontrar el valor en la cuadrícula más cercana a su objetivo.

y <- c(0.0000943615,0.0074918919,0.0157332851,0.0783308615,
       0.1546375803,0.5558444681,0.8583806898,0.9617216854,
       0.9848004112,0.9964662546)
x <- log(c(0.05, 0.1, 0.15, 0.2, 0.4, 0.8, 1.6, 3.2, 4.5, 6.4))

fit.gam <- mgcv::gam(y ~ s(x,k=-1, bs="cr"))

Predecir en una cuadrícula de valores x:

x_grid <- seq(min(x), max(x), by= 0.01)
pd <- as.data.frame(predict(fit.gam, data.frame(x= x_grid), se.fit= TRUE))
pd$x_grid <- x_grid

¿Cuál es el valor de x que da y = 0,1?

target_y <- 0.1
idx <- which.min(abs(pd$fit - target_y))
pd[idx,]
       fit se.fit x_grid
178 0.0997 0.0176  -1.23

respuesta: en x = -1,23 se obtiene y = 0,0997 (¿lo suficientemente cerca?) con e.s. de la predicción 0,0176.

Podría ser guionizado para acercarse cada vez más a su objetivo y.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X