我正在尝试使用R拟合GLM的样条曲线。一旦拟合出样条曲线,我希望能够获取生成的模型并在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
)和思念你的代码打掉他们的工作。他们这样做有点愚蠢吗?是。但是让他们决定何时删除自己的变量还是有礼貌的。