J'essaie d'adapter une spline pour un GLM à l'aide de R. Une fois que j'ai ajusté la spline, je veux pouvoir prendre mon modèle résultant et créer un fichier de modélisation dans un classeur Excel.
Par exemple, supposons que j'ai un ensemble de données où y est une fonction aléatoire de x et la pente change brusquement à un point spécifique (dans ce cas @ 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)
J'adapte maintenant ceci en utilisant
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
et mes résultats montrent
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
À ce stade, je peux utiliser la fonction de prédiction dans r et obtenir des réponses parfaitement acceptables. Le problème est que je veux utiliser les résultats du modèle pour créer un classeur dans Excel.
Ma compréhension de la fonction prédire est que, étant donné une nouvelle valeur "x", r branche ce nouveau x dans la fonction spline appropriée (soit la fonction pour les valeurs supérieures à 500 ou celle pour les valeurs inférieures à 500), alors il prend ce résultat et multiplie il par le coefficient approprié et à partir de ce point le traite comme tout autre terme de modèle. Comment obtenir ces fonctions splines?
(Remarque: je me rends compte qu'un GLM gamma lié au journal peut ne pas être approprié pour l'ensemble de données fourni. Je ne demande pas comment ni quand adapter les GLM. Je fournis cet ensemble comme exemple à des fins de reproductibilité.)
rm(list=ls())
), surtout pas sans avertissement. Quelqu'un peut copier-coller votre code dans une session ouverte de R où ils ont des variables déjà (mais pas appelésx
,y
,df
ouspline1
) et manque que votre code efface leur travail. Est-ce un peu stupide pour eux de faire ça? Oui. Mais il est toujours poli de les laisser décider quand supprimer leurs propres variables.