Ich versuche, mithilfe von R einen Spline für eine GLM anzupassen. Sobald ich den Spline angepasst habe, möchte ich in der Lage sein, mein resultierendes Modell zu nehmen und eine Modellierungsdatei in einer Excel-Arbeitsmappe zu erstellen.
Angenommen, ich habe eine Datenmenge, in der y eine Zufallsfunktion von x ist und die Steigung sich an einem bestimmten Punkt abrupt ändert (in diesem Fall @ 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)
Ich passe das jetzt mit an
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
und meine Ergebnisse zeigen
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
Zu diesem Zeitpunkt kann ich die Vorhersagefunktion in r verwenden und absolut akzeptable Antworten erhalten. Das Problem ist, dass ich die Modellergebnisse verwenden möchte, um eine Arbeitsmappe in Excel zu erstellen.
Mein Verständnis der Vorhersagefunktion ist, dass r bei einem neuen "x" -Wert dieses neue x in die entsprechende Spline-Funktion (entweder die Funktion für Werte über 500 oder die für Werte unter 500) einfügt, dieses Ergebnis dann aufnimmt und multipliziert Es wird mit dem entsprechenden Koeffizienten behandelt und von diesem Punkt an wie jeder andere Modellbegriff. Wie bekomme ich diese Spline-Funktionen?
(Hinweis: Ich stelle fest, dass ein log-verknüpftes Gamma-GLM möglicherweise nicht für den bereitgestellten Datensatz geeignet ist. Ich frage nicht, wie oder wann GLMs angepasst werden sollen. Ich stelle diesen Satz als Beispiel für Reproduzierbarkeitszwecke bereit.)
rm(list=ls())
) löscht , insbesondere nicht ohne Vorwarnung. Jemand kann Ihren Code in eine offene Sitzung von R copy-paste , wo sie einige Variablen haben bereits (aber keine genanntx
,y
,df
oderspline1
) und vermisst , dass Ihr Code tilgt ihre Arbeit. Ist es ein bisschen dumm für sie, das zu tun? Ja. Trotzdem ist es höflich, sie entscheiden zu lassen, wann sie ihre eigenen Variablen löschen.