Saya mencoba menyesuaikan spline untuk GLM menggunakan R. Setelah saya cocok dengan spline, saya ingin dapat mengambil model yang saya hasilkan dan membuat file pemodelan dalam buku kerja Excel.
Sebagai contoh, katakanlah saya memiliki kumpulan data di mana y adalah fungsi acak x dan kemiringan berubah secara tiba-tiba pada titik tertentu (dalam hal ini @ 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)
Saya sekarang cocok menggunakan ini
library(splines)
spline1 <- glm(y~ns(x,knots=c(500)),data=df,family=Gamma(link="log"))
dan hasil saya menunjukkan
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
Pada titik ini, saya dapat menggunakan fungsi prediksi dalam r dan mendapatkan jawaban yang bisa diterima. Masalahnya adalah saya ingin menggunakan hasil model untuk membangun buku kerja di Excel.
Pemahaman saya tentang fungsi prediksi adalah bahwa diberi nilai "x" baru, r memasukkan x baru itu ke fungsi spline yang sesuai (baik fungsi untuk nilai di atas 500 atau yang untuk nilai di bawah 500), maka dibutuhkan hasil dan dikalikan dengan koefisien yang sesuai dan sejak saat itu memperlakukannya seperti istilah model lainnya. Bagaimana cara mendapatkan fungsi spline ini?
(Catatan: Saya menyadari bahwa GLM gamma terkait-log mungkin tidak sesuai untuk set data yang disediakan. Saya tidak bertanya tentang bagaimana atau kapan agar sesuai dengan GLM. Saya menyediakan set itu sebagai contoh untuk tujuan reproduktifitas.)
rm(list=ls())
), terutama bukan tanpa peringatan. Seseorang mungkin copy-paste kode Anda ke sesi terbuka R di mana mereka memiliki beberapa variabel yang sudah (tapi tidak disebutx
,y
,df
atauspline1
) dan miss bahwa kode Anda menghapuskan pekerjaan mereka. Apakah agak bodoh bagi mereka untuk melakukan itu? Iya nih. Tetapi masih sopan untuk membiarkan mereka memutuskan kapan harus menghapus variabel mereka sendiri.