Estoy tratando de ajustar una spline para un GLM usando R. Una vez que ajuste la spline, quiero poder tomar mi modelo resultante y crear un archivo de modelado en un libro de Excel.
Por ejemplo, supongamos que tengo un conjunto de datos donde y es una función aleatoria de xy la pendiente cambia abruptamente en un punto específico (en este caso @ x = 500).
set.seed(1066)
x<- 1:1000
y<- rep(0,1000)
y[1:500]<- pmax(x[1:500]+(runif(500)-.5)*67*500/pmax(x[1:500],100),0.01)
y[501:1000]<-500+x[501:1000]^1.05*(runif(500)-.5)/7.5
df<-as.data.frame(cbind(x,y))
plot(df)
Ahora encajo esto usando
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
y mis resultados muestran
summary(spline1)
Call:
glm(formula = y ~ ns(x, knots = c(500)), family = Gamma(link = "log"),
data = df)
Deviance Residuals:
Min 1Q Median 3Q Max
-4.0849 -0.1124 -0.0111 0.0988 1.1346
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 4.17460 0.02994 139.43 <2e-16 ***
ns(x, knots = c(500))1 3.83042 0.06700 57.17 <2e-16 ***
ns(x, knots = c(500))2 0.71388 0.03644 19.59 <2e-16 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for Gamma family taken to be 0.1108924)
Null deviance: 916.12 on 999 degrees of freedom
Residual deviance: 621.29 on 997 degrees of freedom
AIC: 13423
Number of Fisher Scoring iterations: 9
En este punto, puedo usar la función de predicción dentro de r y obtener respuestas perfectamente aceptables. El problema es que quiero usar los resultados del modelo para construir un libro de trabajo en Excel.
Entiendo que la función de predicción es que, dado un nuevo valor de "x", r conecta esa nueva x en la función de spline apropiada (ya sea la función para valores superiores a 500 o la de valores inferiores a 500), luego toma ese resultado y se multiplica por el coeficiente apropiado y desde ese punto lo trata como cualquier otro término modelo. ¿Cómo obtengo estas funciones de spline?
(Nota: me doy cuenta de que un GLM gamma vinculado a un registro puede no ser apropiado para el conjunto de datos proporcionado. No estoy preguntando cómo o cuándo ajustar los GLM. Estoy proporcionando ese conjunto como un ejemplo para fines de reproducibilidad).
rm(list=ls())
), especialmente sin ninguna advertencia. Alguien puede copiar y pegar el código en una sesión abierta del R donde tienen ya algunas variables (pero ninguna llamadax
,y
,df
ospline1
) y la señorita que su código borra su trabajo. ¿Es un poco tonto para ellos hacer eso? Sí. Pero sigue siendo cortés dejarles decidir cuándo eliminar sus propias variables.