Sto cercando di adattare una spline per un GLM usando R. Una volta adattato alla spline, voglio essere in grado di prendere il mio modello risultante e creare un file di modellazione in una cartella di lavoro di Excel.
Ad esempio, supponiamo di avere un set di dati in cui y è una funzione casuale di x e la pendenza cambia bruscamente in un punto specifico (in questo 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)
Ora mi adatto a questo usando
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
e i miei risultati mostrano
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
A questo punto, posso usare la funzione di previsione all'interno di r e ottenere risposte perfettamente accettabili. Il problema è che voglio usare i risultati del modello per creare una cartella di lavoro in Excel.
La mia comprensione della funzione di previsione è che, dato un nuovo valore "x", r inserisce quella nuova x nella funzione spline appropriata (o la funzione per valori superiori a 500 o quella per valori inferiori a 500), quindi prende quel risultato e si moltiplica per il coefficiente appropriato e da quel momento lo tratta come qualsiasi altro termine modello. Come posso ottenere queste funzioni spline?
(Nota: mi rendo conto che un GLM gamma collegato al log potrebbe non essere appropriato per il set di dati fornito. Non sto chiedendo come o quando adattarsi ai GLM. Sto fornendo tale set come esempio a fini di riproducibilità.)
rm(list=ls())
), soprattutto non senza alcun avviso. Qualcuno può copiare e incollare il codice in una sessione aperta di R dove hanno alcune variabili già (ma nessuno chiamatix
,y
,df
ospline1
) e perdere che il codice spazza via il loro lavoro. È un po 'stupido per loro farlo? Sì. Ma è ancora educato lasciare loro decidere quando eliminare le proprie variabili.