我的模特是:
y = f(x) exp(E) where E~N(0,sig^2)
其中f(x)=分段线性模型(ax + bI(x-d)(x-d)) (a和b是参数,d =断点,I =指标函数)
s.t
log (y) = log(f(x)) + E
我编码:
lin.mod <- lm(y~x - 1,data=data)
startingVals <- 10000
seg.mod <- segmented(lin.mod, intercp=F, seg.Z = ~x, psi=startingVals)
一切运行得很好,但这适合模型假设高斯误差(y = f(x)+ E),而不是对数正态误差。
如何指定传递给分段的相应线性模型?
现在我已经编码了这个问题,我自己循环通过一个断点向量并优化loglikelihood给出断点,但它需要一段时间(我有一个很好的网格)。
我希望能够使用分段来加快速度,但目前还不清楚我将如何做到这一点。 感谢
答案 0 :(得分:0)
Firth(1988,JRSSB p.266-268)讨论了log Normal和Gamma分布之间的相似性。因此,第一种(近似)方法可以是使用具有Gamma族和身份链接的GLM。分段与GLM合作。
library(segmented)
o<-glm(y~x, family=Gamma(link="identity"))
os<-segmented(o, ~x) #for 1 breakpoint the starting value for psi could be omitted
当拟合'o'时,它可以帮助提供起始值。例如,
beta0<-coef(lm(log(y)~x))
glm(y~x, family=Gamma(link="identity"), start=beta0)