segmented.lme()

时间:2017-03-02 14:33:48

标签: r predict threshold mixed-models nlme

我以前在包lme4中使用glmer()运行混合模型分析。我在包MuMIn中应用函数dredge()和get.models()来量化top.models。然后我在包MuMIn中使用了model.avg()方法来为函数predict()创建一个拟合对象。最后,我创建了一个名为newdat的newdata对象,即每个预测器的新对象。

然后我使用了newdatfinal <- predict(avModX, newdata = newdat, se.fit=TRUE, re.form=NA),其中avModX显示了从subset.top.models <- c(top.models[[1]],top.models[[1]])avModX <- model.avg(subset.top.models)派生的拟合模型。一切正常。

我现在需要在segmented.lme()对象上使用predict()。函数segmented.lme()的代码可以在这里找到:https://www.researchgate.net/publication/292986444_segmented_mixed_models_in_R_code_and_data。参考工作文件可在此处获取:https://www.researchgate.net/publication/292629179_Segmented_mixed_models_with_random_changepoints_in_R。该功能允许检测斜率差异并提供变化点估计,即数据中断点的测试。

我首先使用了函数

global.model.lme <- lme(response ~ predictor1*predictor2*predictor3*
                              predictor4 + covariate1 + covariate2 + covariate3,
                            data = mydat,
                            random = list(block = pdDiag(~ 1 + predictor1),
                                          transect = pdDiag(~ 1 + predictor1)),
                            na.action="na.fail") 

后跟功能

global.model.seg <- segmented.lme(global.model.lme, 
                                      Z = predictor1, 
                                      random = list(block = pdDiag(~ 1 + predictor1 + U + G0),
                                                    transect = pdDiag(~ 1 + predictor1 + U + G0)),
                                      psi.link = "identity")

Z =&#39;分段&#39;协变量与响应具有分段关系,U =斜率差,G0 =变化点的随机效应公式(变化点估计)

我现在想在函数predict()中使用segmented.lme()对象,例如newdatfinal <- predict(global.model.seg, newdata = newdat, se.fit=TRUE, re.form=NA)

我目前收到错误消息: UseMethod出错(&#34;预测&#34;):   没有适用的方法来预测&#39;应用于类&#34; segmented.lme&#34;

的对象

这是原始数据的可重现子集:

structure(list(block = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8"), class = "factor"), transect = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("B1L", "B1M", "B1S", "B2L", "B2M", "B2S", "B3L", "B3M", "B3S", "B4L", "B4M", "B4S", "B5L", "B5M", "B5S", "B6L", "B6M", "B6S", "B7L", "B7M", "B7S", "B8L", "B8M", "B8S"), class = "factor"), predictor1 = c(28.63734661, 31.70995133, 27.40407982, 25.48842992, 21.81094637, 24.02032756), predictor2 = c(5.002945364, 6.85567854, 0, 22.470422, 0, 0), predictor3 = c(3.72, 3.55, 3.66, 3.65, 3.53, 3.66), predictor4 = c(504.8, 547.6, 499.7, 497.8, 473.8, 467.5), covariate1 = c(391L, 394L, 351L, 336L, 304L, 335L), covariate2 = c(0.96671086, 2.81939707, 0.899512367, 1.024730094, 1.641161861, 1.419433714), covariate3 = c(0.787505444, 0.641693911, 0.115804751, -0.041146951, 1.983567486, -0.451039179), response = c(0.81257636, 0.622662116, 0.490330786, 0.709929461, -0.156398286, -1.185175095)), .Names = c("block", "transect", "predictor1", "predictor2", "predictor3", "predictor4", "covariate1", "covariate2", "covariate3", "response"), row.names = c(NA, 6L), class = "data.frame")

和newdat数据的可重现子集:

structure(list(predictor1 = c(-0.441935, -0.433467318435754,0.424999636871508, -0.416531955307263, -0.408064273743017, -0.399596592178771), covariate1 = c(0L, 0L, 0L, 0L, 0L, 0L), covariate2 = c(0L, 0L, 0L, 0L, 0L, 0L), covariate3 = c(0L, 0L, 0L, 0L, 0L, 0L), 
predictor2 = c(0L, 0L, 0L, 0L, 0L, 0L), predictor3 = c(0L, 
0L, 0L, 0L, 0L, 0L), predictor4 = c(0L, 0L, 0L, 0L, 0L, 0L
)), .Names = c("predictor1", "covariate1", "covariate2", "covariate3", "predictor2", "predictor3", "predictor4"), row.names = c(NA, 6L), class = "data.frame")

非常感谢任何建议。

1 个答案:

答案 0 :(得分:1)

segmented.lme处于初级阶段,因此目前没有预测方法功能。但是,由于算法依赖于工作线性模型,您可以使用最后一个(在收敛时)进行预测,

FirebaseRecyclerOptions

应仔细检查结果。