Я намагаюся встановити сплайн для GLM за допомогою R. Після того, як я підганяю сплайн, я хочу мати змогу взяти отриману модель і створити файл моделювання в робочій книжці Excel.
Наприклад, скажімо, у мене є набір даних, де y - випадкова функція x, а нахил різко змінюється в певній точці (в даному випадку @ 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)
Я зараз підхожу до цього, використовуючи
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
і мої результати показують
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
На цьому етапі я можу використовувати функцію передбачення в межах r і отримувати цілком прийнятні відповіді. Проблема полягає в тому, що я хочу використовувати результати моделей для створення робочої книги в Excel.
Моє розуміння функції передбачення полягає в тому, що, отримавши нове значення "x", r додає новий x у відповідну функцію сплайну (або функцію для значень вище 500, або функцію для значень нижче 500), тоді вона бере цей результат і множиться він за відповідним коефіцієнтом і з цього моменту трактує його як будь-який інший модельний термін. Як отримати ці функції сплайну?
(Примітка. Я розумію, що пов'язана з журналом гамма GLM може не відповідати наданому набору даних. Я не запитую про те, як і коли потрібно підходити до GLM. Я надаю цей набір як приклад для цілей відтворення.)
rm(list=ls())
), особливо не без попередження. Хто - то може скопіювати і вставити код в відкриту сесію R , де у них є деякі змінні вже (але жоден званіx
,y
,df
абоspline1
) і пропустити , що ваш код витирає свою роботу. Хіба це для них щось німо? Так. Але все одно ввічливо дозволяти їм вирішувати, коли видалити власні змінні.