使用带有对数正态误差的R分段包

时间:2018-02-06 16:38:50

标签: r regression piecewise

我的模特是:

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给出断点,但它需要一段时间(我有一个很好的网格)。

我希望能够使用分段来加快速度,但目前还不清楚我将如何做到这一点。 感谢

1 个答案:

答案 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)