将 mob() 树(partykit 包)与 nls() 模型结合使用

2024-04-24

我正在尝试使用基于模型的递归分区(MOB)mob()函数(从partykit包)来分离使用导出的几条曲线nls()功能。我必须定义我的模型并确定起始值。我一直在尝试看看这是否可以与mob()功能无济于事。

我尝试按照第 7 页上的示例进行操作:https://cran.r-project.org/web/packages/partykit/vignettes/mob.pdf https://cran.r-project.org/web/packages/partykit/vignettes/mob.pdf我创建了一个拟合函数来估计起始值并返回估计值等nls()。但在那之后我似乎无法再做任何事情了。我想知道是否可以使用带有系数以及因变量和自变量的自定义模型,并将它们包含在mob()并让它发挥作用。我尝试过lmtree()函数,但当然这只会给出一条直线。

我的代码如下。基本上,我使用分段线性回归来获取我正在使用的双指数曲线的起始值。这基本上是我能到达的最远的距离。参数估计会给出错误等,如果你甚至超过了它就不会运行。我只需要知道是否有可能mob()要运行的函数nls().

我加载了示例数据,但如果可以使用nls()

    photo.try <- function(y, x,start = NULL, weights = NULL, offset = NULL, estfun = FALSE, object = TRUE) 
        {
            lin.mod1 <- lm(y ~ x)
            segmented.mod.2 <- segmented(lin.mod1, seg.Z = ~x, psi=1)
            segmented.mod1 <- segmented(lin.mod1, seg.Z = ~x, psi =  segmented.mod.2$psi[1,2])
            nls(y ~ (a*exp(-b * x) - c* exp(-d* x)), start = list(a = -1*(intercept(segmented.mod1)[[1]][1,1]) , b = slope(segmented.mod1)[[1]][1,1], 
            c = -1*(intercept(segmented.mod1)[[1]][2,1]), 
            d = -1*slope(segmented.mod1)[[1]][2,1]))

        }

photo_form <- Pn ~ (a*exp(-b * PAR) - c* exp(-d* PAR))| Species


photo_tree <- mob(photo_form, data = eco, fit = (photo.try))

这是我的示例数据:

eco <- structure(list(Species = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 
2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 4L, 
4L, 4L, 4L, 4L, 4L, 4L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 5L, 
5L, 5L, 5L, 5L, 5L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L, 
6L, 6L, 6L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 
7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L, 7L), .Label = c("Bogum", 
"Clethra", "Eugene", "Guarria", "Melo", "Santa", "Sapium"), class = "factor"), 
    PAR = c(0, 58.6, 101.4, 228.6, 462.4, 904.7, 1565.8, 1992.1, 
    2395.9, 0, 72.8, 125.9, 232.8, 411, 841.1, 1669.6, 2394.5, 
    2394.9, 0, 53.5, 122.1, 231.6, 451, 808.5, 1575, 2394.6, 
    2395.1, 0, 70.9, 104.8, 251.1, 474.6, 858.3, 1612.3, 2393.3, 
    2395.1, 0, 63.1, 124.6, 277.1, 417.7, 824.4, 1649.6, 2377.7, 
    2381.9, 0, 31, 46.5, 115.7, 228.1, 424.3, 822.5, 1644.2, 
    2380.7, 2381.2, 0, 50.1, 118.1, 203.3, 413.2, 804.5, 1587.3, 
    2385.3, 0, 28.8, 36.9, 101.2, 211.7, 423.1, 793, 0, 43.6, 
    106.7, 200.8, 468.6, 808.4, 1567, 2367.1, 2376.5, 0.1, 40.4, 
    104.1, 202.2, 447.3, 794.7, 1546, 2391.8, 2393.3, 0.1, 44.1, 
    107.5, 227.4, 429.6, 802.5, 1668.4, 2391, 0, 42.2, 125.3, 
    126.2, 127.3, 240.3, 433.4, 791, 1600, 2396.8, 2397, 2399.3, 
    0, 72.7, 118.1, 236.9, 425, 828.4, 1613.3, 1615.4, 2396.1, 
    2396.5, 2397.2, 2397.5, 0, 62, 116.2, 235.5, 401.7, 879, 
    879.8, 1552.2, 1553.9, 2394.3, 2394.4, 2394.7, 2396.6, 0, 
    84.8, 135, 209.8, 425.3, 859.1, 1597.6, 2377.3, 2379.5, 2385.1, 
    0.1, 62, 106.3, 226.2, 442.9, 822.5, 1462.3, 2389.8, 2392.1, 
    0.1, 0.1, 73.9, 126, 249.8, 428.5, 846.5, 1555.3, 2390.1, 
    2390.7, 2390.8, 0, 68.7, 121.5, 209.7, 426.2, 803, 1525.9, 
    2389.8, 0, 52.8, 96.9, 211.1, 441.3, 787.9, 1566.5, 2415.2, 
    2415.3, 2415.5, 2417.5, 2417.7, 2418.5, 0.1, 46.5, 108.4, 
    233.5, 461.7, 792.3, 1635.7, 2415.1, 2415.6, 2415.6, 2416.5, 
    2416.6, 2417.8, 0.1, 68.3, 110, 239.5, 531.7, 847.2, 1591.4, 
    2387.3, 2387.6, 2389.7, 0, 49.7, 114.6, 230.6, 397.7, 398.2, 
    817.7, 1596.4, 2376.2, 2376.4, 2380.9, 0, 62.9, 65.5, 117, 
    209, 431.2, 854.5, 1611.3, 2387.3, 2388.5, 2390.3, 0, 49.1, 
    108.9, 200.3, 408.8, 842.2, 1630.2, 2386.5, 2386.8, 2388.2, 
    0, 64.8, 122.9, 226, 422.9, 801.6, 1635.7, 2383.6, 2383.6, 
    2384.3, 2386.1, 0, 36.7, 143.2, 213.7, 444.9, 814.9, 816.2, 
    1496.5, 2384.7, 2386.5, 2388.6, 0.1, 45.6, 105.2, 206.7, 
    494.8, 901.2, 1610.9, 2388, 2388.1, 2388.3, 2388.6, 0, 0.1, 
    45.9, 48.5, 100.2, 209.4, 432.4, 778, 1600.3, 2408.8, 2408.8, 
    0, 71.8, 121.6, 216.4, 404.3, 815.2, 1622, 2414.9, 2415.1, 
    2416.1, 2416.1, 0, 36.2, 97.5, 186.7, 417.9, 840.4, 1597.5, 
    2390.7, 2390.9, 2391.2, 2391.2, 2391.5, 2392.1, 2392.5, 0, 
    53.8, 138.2, 227, 403.6, 800.8, 1642.3, 2396.9, 2397.1, 0, 
    57.9, 95.1, 246.6, 466.8, 796.2, 1574.2, 2395.5, 2397.3, 
    0, 54.9, 94.9, 201.7, 408.1, 822.6, 1596, 2384.1, 0, 55.6, 
    131, 202.5, 419.8, 798.5, 1614, 2387.4, 2387.8, 0, 39.1, 
    109.6, 197.1, 403.3, 835.4, 836.9, 1725.9, 1727.4, 1729.3, 
    1730.6, 54.5, 58.6, 125.4, 226.9, 409, 806.8, 1578.8, 2377.2, 
    2380.1, 2388.3, 0, 68, 127.4, 206.9, 510.5, 814.9, 1561, 
    2404.1, 2404.8, 0, 58.4, 95.3, 229.6, 457.2, 781.5, 1634.4, 
    2399.8, 2401, 2403, 0.1, 56.5, 101.9, 221.8, 394.3, 815.1, 
    1655.4, 2411.8, 2411.9, 0, 50.2, 107.3, 220.5, 434.4, 819.8, 
    1630.6, 2412.4, 2412.6, 0, 48.4, 117.7, 195.3, 403.2, 801, 
    1632.7, 2388.9, 2389.3, 2390.7, 0, 50.4, 120.3, 234.7, 460.3, 
    829.1, 1581.7, 2398.5, 2402.3, 0, 60.8, 105.8, 215.8, 466.6, 
    826, 828.3, 1570.8, 2405.6, 2406.1, 2408.8, 0, 52.6, 106.9, 
    206.5, 414.3, 868.4, 1629.9, 1655.1, 2409.1, 2413, 0, 49.5, 
    100.6, 232.9, 389.4, 808.2, 1588.2, 2412.4, 2413.3, 2415.9, 
    0.1, 70.9, 110.5, 208.4, 409, 807.5, 1579.9, 2382.2, 2382.5, 
    2383.6, 2383.8, 0, 61.5, 106.5, 213.9, 473.8, 814.2, 1561.9, 
    2390.7, 2391.9, 2393.1, 0, 59.9, 64, 112, 216, 397.6, 807.4, 
    1625, 2392.3, 2395.1, 0, 74, 108.8, 109.7, 236.1, 433.6, 
    794.7, 1590.3, 2381.9, 2382.5, 0.1, 56.3, 114.5, 254.1, 487.7, 
    864.3, 1593.5, 2369.3, 2369.3, 2372.3, 2373.9, 0.2, 57.1, 
    110, 201.4, 402.7, 807.2, 1572.9, 2392.8, 2393.5, 0.1, 56.4, 
    122.5, 224.5, 420.2, 853.7, 1502.1, 2390.3, 2392.9, 0, 50.5, 
    53.7, 118.2, 230, 462.8, 794.3, 1513.4, 2391.4, 2392.3, 2393.4, 
    2393.4, 2394.1, 0.1, 49.7, 98.3, 208.3, 383.2, 850.7, 1653.5, 
    2395.3, 2396, 2397.1, 0, 48.4, 121.2, 228.8, 423.9, 817, 
    1708.5, 2389.9, 2389.9, 0, 66.4, 129.7, 209.4, 431.5, 794.1, 
    1673.7, 2383.7, 2384.2, 0, 57, 122.6, 215, 434.1, 838.5, 
    1657.5, 2386.4, 0.1, 22.6, 127.8, 220.4, 404.3, 810.9, 1592.3, 
    2386.7, 2388.7, 0, 49.8, 119.7, 200.5, 463.8, 828.7, 1560.7, 
    2384.5, 2385.7, 2391.2, 0, 73.1, 138.2, 226.6, 408.5, 815.3, 
    1627.3, 2390.2, 2395.4, 0, 61.2, 108.8, 233.8, 417.7, 824.5, 
    1502.7, 2395, 2396.2, 0, 56, 101.4, 226.3, 282.1, 412.9, 
    873.8, 1672.6, 2380.4, 2380.9, 2381.5, 0.1, 70.7, 138, 246, 
    444.4, 817.1, 1643.2, 2391.5, 2391.8, 2392), Pn = c(-0.95, 
    0.75, 0.94, 1.27, 1.5, 1.9, 2.14, 2.35, 2.38, 1.48, 3.51, 
    3.7, 3.99, 4.4, 4.32, 4.52, 4.73, 4.72, 1.97, 3.24, 4.23, 
    4.35, 4.41, 4.66, 4.57, 4.68, 4.88, 1.16, 3.64, 4.05, 4.75, 
    5.42, 5.57, 5.55, 5.89, 5.8, 1.48, 3.89, 4.7, 5.34, 5.47, 
    5.62, 5.71, 5.7, 6.08, 1.26, 0.59, 2.96, 4.34, 5, 4.82, 5.22, 
    5.2, 5.33, 5.51, 1.2, 2.95, 3.67, 3.9, 4.06, 4.59, 4.6, 4.62, 
    2.01, 1.92, 2.41, 2.19, 2.22, 2.41, 2.21, 1.6, 3.29, 3.97, 
    4.39, 4.89, 5.12, 4.93, 5.12, 5.1, 2.39, 3.84, 4.45, 4.63, 
    4.43, 4.93, 4.78, 4.73, 5.04, 3.09, 3.74, 4.03, 3.89, 4.52, 
    4.43, 4.24, 4.26, 1.5, 2.73, 2.83, 3.14, 2.89, 3.39, 2.89, 
    2.84, 3.34, 3.11, 3.16, 3.31, 0.1, 1.17, 1.72, 1.61, 1.64, 
    2.06, 2.17, 1.99, 2.31, 2.14, 2.27, 2.08, 0.17, 1.17, 1.32, 
    1.33, 1.4, 1.8, 1.48, 2, 1.81, 1.95, 2.09, 1.73, 1.85, 2.95, 
    4.33, 4.82, 4.98, 4.97, 5.03, 5.08, 5.22, 5.32, 4.88, 2.17, 
    3.08, 3.32, 3.42, 3.45, 3.67, 3.64, 3.71, 3.71, 2.85, 2.33, 
    3.15, 2.81, 3.22, 2.99, 3.16, 3.33, 3.56, 3.61, 3.63, 2.52, 
    3.55, 4.07, 4.1, 4.17, 4.41, 4.53, 4.56, 2.06, 2.57, 2.91, 
    2.61, 3.08, 3.29, 3.99, 6.49, 5.23, 6.08, 5.74, 4.41, 6.5, 
    1.59, 3.22, 3.59, 3.75, 3.84, 4.5, 4.93, 6.87, 6.75, 6.97, 
    6.53, 6.04, 6.82, 1.28, 3.56, 4.39, 5.27, 5.51, 6.38, 7.05, 
    7.46, 7.16, 7.24, 0.87, 2.45, 3.86, 4.32, 4.57, 4.43, 4.68, 
    4.71, 4.86, 4.36, 4.68, 1.06, 2.79, 4.05, 4.86, 5.48, 5.9, 
    6.38, 6.79, 7.46, 7.12, 7.03, 2.76, 3.92, 3.96, 4.07, 4.2, 
    4.5, 4.91, 5.52, 5.49, 5.33, 2.84, 4.78, 4.83, 4.76, 4.74, 
    4.84, 5.19, 5.59, 5.74, 5.7, 5.65, 3.02, 3.61, 4.14, 4.23, 
    4.45, 4.37, 4.5, 4.6, 4.78, 4.79, 4.85, 2.71, 4.26, 5.42, 
    6.24, 6.58, 6.63, 6.55, 7.29, 7.43, 7.24, 7, 3.36, 2.19, 
    2.86, 2.87, 2.37, 3.16, 2.68, 3, 3.4, 3.6, 4.35, 1.28, 2.62, 
    2.92, 3.3, 3.35, 3.58, 3.73, 4.02, 4, 3.7, 3.75, 1.61, 2.26, 
    2.5, 2.52, 2.71, 2.61, 2.75, 3.19, 2.92, 3.99, 4.36, 3.67, 
    4.14, 4.37, -0.28, 1.91, 2.78, 2.84, 2.96, 3.04, 3.24, 3.44, 
    3.58, 1.78, 4.12, 4.58, 4.33, 4.8, 4.7, 5.02, 5.09, 5.22, 
    2.79, 4.71, 4.89, 4.93, 4.87, 4.92, 4.83, 4.81, 1.66, 3, 
    4.04, 4.35, 4.56, 4.75, 4.75, 4.66, 4.89, 1.56, 2.77, 3.86, 
    3.58, 3.7, 3.76, 3.58, 4.55, 4.63, 4.05, 3.73, 1.76, 2.71, 
    2.98, 3.01, 3.06, 3.22, 2.99, 3.15, 3.32, 3.34, 1.58, 3.76, 
    4.97, 5.21, 5.29, 5.5, 5.59, 5.71, 5.74, 1.89, 2.67, 3.01, 
    3.14, 3.39, 3.57, 3.45, 3.91, 4.11, 3.94, 1.15, 2.88, 3.63, 
    4.32, 4.09, 4.43, 4.58, 4.61, 4.63, 1.23, 2.26, 3.15, 3.33, 
    3.3, 3.61, 3.46, 3.65, 3.67, 0.19, 2.23, 3.43, 4.1, 4.85, 
    5.21, 5.8, 6.27, 6.34, 6.08, 1.94, 3.72, 4.88, 5.51, 6.71, 
    6.51, 6.96, 7.01, 7.4, 0.48, 2.29, 2.5, 2.87, 3.18, 3.51, 
    3.13, 3.86, 4.13, 4.34, 4.03, 1.63, 3.64, 5.15, 5.95, 6.43, 
    6.57, 6.61, 6.51, 6.65, 6.56, 1.93, 3.95, 4.63, 5.66, 6.03, 
    6.28, 6.67, 6.69, 6.95, 6.75, 0.93, 3.14, 3.46, 3.9, 4.19, 
    4.27, 4.77, 5.39, 5.36, 5.24, 5.02, 1.71, 3.31, 3.86, 4.02, 
    4.02, 4.29, 4.36, 4.73, 4.88, 4.59, 1.63, 2.65, 2.63, 2.48, 
    2.93, 3.45, 4.01, 4.67, 5.02, 5.08, 1.93, 3.54, 3.8, 3.81, 
    4.04, 4.17, 4.38, 4.55, 4.99, 4.99, 1.29, 2.73, 3.32, 3.66, 
    3.77, 3.79, 4.14, 4.37, 4.22, 4.1, 4.14, 1.06, 2.89, 3.65, 
    4.01, 4.11, 4.19, 4.66, 5.03, 5.12, 0.97, 2.45, 2.99, 3.32, 
    3.34, 3.35, 3.47, 3.12, 3.38, 2.29, 1.72, 4.33, 5.49, 6.44, 
    6.96, 7.91, 7.49, 8.45, 8.21, 8.17, 8.71, 8.35, 0.29, 2.99, 
    3.93, 4.52, 5.69, 6.23, 6.23, 6.81, 6.96, 6.68, 0.99, 3.67, 
    4.62, 5.52, 5.86, 6.23, 5.91, 6.64, 6.29, -0.08, 3.34, 4.89, 
    6.02, 6.37, 6.59, 6.99, 6.95, 7.2, 0.99, 2.28, 2.72, 2.67, 
    2.99, 3.18, 3.55, 3.58, 1.31, 2.18, 5.55, 7.37, 8.42, 9.14, 
    9.44, 9.26, 9.5, 1.23, 3.11, 5.01, 6.21, 7.14, 7.44, 7.79, 
    7.73, 8.1, 7.96, 1.35, 3.33, 5.67, 6.58, 7.05, 7.36, 7.73, 
    7.75, 7.99, 0.4, 2.25, 2.83, 3.31, 3.55, 3.66, 3.96, 3.54, 
    3.77, 1.46, 2.91, 3.51, 3.64, 4.5, 3.83, 3.96, 4.17, 4.66, 
    4.09, 4.44, 2.41, 4.77, 5.49, 6.05, 6.15, 6.28, 6.6, 6.76, 
    6.75, 6.78)), .Names = c("Species", "PAR", "Pn"), class = "data.frame", row.names = c(NA, 
-628L))

我们可以! ;-)

原则上,你试图做正确的事情,但有几个方面不太正确。主要问题是如何传递数据和公式:mob()对路一无所知nls()指定其公式,一个简单的公式Pn ~ PAR | Species需要使用然后fit函数需要知道如何处理数据。提供的预处理mob()可以设置模型矩阵(带有截距、虚拟/对比编码等)或模型框架(其中因子仍然是因子等)。在这种情况下,最简单的方法是使用默认模型矩阵,然后在拟合函数中省略截距。

您的代码的第二个问题是您使用了扩展规范fit功能(与estfun and object参数)但仅提供拟合的模型对象。有了这个规格mob()预计fit函数设置一个合适的列表coefficients and objfun etc.

结合起来,这意味着您的fit函数应该是这样的:

photofit <- function(y, x = NULL, start = NULL, weights = NULL, offset = NULL, ...,
  estfun = FALSE, object = FALSE)
{
  ## only use first real regressor (without intercept)
  x <- x[, 2]

  ## obtain starting values if necessary
  if(is.null(start)) {
    aux_lm <- lm(y ~ x)
    aux_seg_2 <- segmented::segmented(aux_lm, seg.Z = ~ x, psi = 1)
    aux_seg_1 <- segmented::segmented(aux_lm, seg.Z = ~ x, psi = aux_seg_2$psi[1, 2])
    start <- list(
      a = -1 * (segmented::intercept(aux_seg_1)[[1]][1, 1]),
      b =           segmented::slope(aux_seg_1)[[1]][1, 1], 
      c = -1 * (segmented::intercept(aux_seg_1)[[1]][2, 1]), 
      d = -1 *      segmented::slope(aux_seg_1)[[1]][2, 1]
    )
  } else {
    start <- as.list(start)
  }

  ## estimate NLS model
  rval <- nls(y ~ (a * exp(-b * x) - c * exp(-d * x)), start = start)

  ## return processed information for mob()
  list(
    coefficients = coef(rval),
    objfun = deviance(rval),
    estfun = if(estfun) sandwich::estfun(rval) else NULL,
    object = if(object) rval else NULL    
  )
}

然后你就可以种植 MOB 树了。指定verbose = TRUE控制选项将在您等待时为您提供一些进度信息:

photomob <- mob(Pn ~ PAR | Species, data = eco, fit = photofit,
  control = mob_control(verbose = TRUE))
coef(photomob)
##           a             b         c             d
## 4  2.967680 -3.216708e-05  1.519680  1.076879e+01
## 5 -1.811596  1.967366e-02 -3.573079 -4.877852e-05
## 6 -2.772783  1.438087e-02 -4.177953 -7.821814e-05
## 8 -2.427253  1.757744e-02 -4.449105 -1.328930e-04
## 9 -4.579248  1.020021e-02 -5.714575 -7.502393e-05

然后您还可以可视化这棵树。默认情况下,每个节点中都会显示数字摘要,但您也可以轻松显示拟合曲线:

plot(photomob)
plot(photomob, terminal_panel = node_bivplot, tnex = 2)

正如您所看到的,树选择了具有不同参数的五个终端节点。我建议您对模型在不同节点中的拟合程度进行更多诊断,因为我不确定所有参数的识别效果如何。我对 NLS 不太熟悉,可能完全错误,但似乎并不总是可以可靠地确定所有参数。

作为一个例子,我执行以下操作:我提取所有九个拟合的nls树上的物体。对于来自根节点(节点 1)的模型,我通过对所有观察方向的梯度贡献求和来计算梯度(由estfun()方法):

photonls <- refit.modelparty(photomob)
library("sandwich")
colSums(estfun(photonls[[1]]))
##             a             b             c             d 
##  2.010552e-05  5.753230e-02 -1.166331e-04  6.771585e+00 

参数 a-c 的梯度相当接近于零,但对于 d 则不然。这也可能会影响推理mob()这是基于观察方面的梯度贡献(又名模型分数或估计函数)。

简而言之:你想做的事,就能做到!但我建议考虑一个更简单的模型。如果这样做,您只需要修改photofit()相应地运行并运行它mob() again.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 mob() 树(partykit 包)与 nls() 模型结合使用 的相关文章

  • 通过 R 中的数据子集执行计算

    我想对数据框的 PERMNO 列中的每个公司编号进行计算 其摘要可以在此处查看 gt summary companydataRETS PERMNO RET Min 10000 Min 0 971698 1st Qu 32716 1st Qu
  • 汇总表中各列的字符值比例

    在这种数据框中 df lt data frame w1 c A A B C A w2 c C A A C C w3 c C A B C B 我需要计算所有列中字符值的列内比例 有趣的是 以下代码适用于大型实际数据集 但对上述玩具数据会引发错
  • 按不规则时间间隔对数据进行分组求和(R语言)

    我正在看这里的 stackoverflow 帖子 R 计算一组内的观察次数 https stackoverflow com questions 65366412 r count number of observations within a
  • 在 igraph 中为社区分配颜色

    我在 igraph 中使用 fastgreedy community 检测算法在 R 中生成社区 代码返回 12 个社区 但是在绘图时很难识别它们 因为它返回的图的颜色数量有限 我怎样才能用十二种不同的颜色绘制这个图表 l2 lt layo
  • 如何自动启动我的 ec2 实例、运行命令然后将其关闭?

    我想每周对 redshift postgres 数据库中的数据运行一次机器学习模型 我使用以下命令将 R 脚本设置为休息 apiplumbr然后我将其设置为一项任务来管理pm2 我有它 所以任务会在ec2实例启动然后继续运行 要让 R 脚本
  • 合并数据框而不重复行

    我想合并两个数据框 但如果有多个匹配项 则不想重复行 相反 我想总结一下那天的观察结果 来自 合并 提取两个数据框中与指定列匹配的行并将其连接在一起 如果有多个匹配项 则所有可能的匹配项各贡献一行 这是一些示例代码 days lt as d
  • 从 R 中的方差分析 (glm) 中提取残余偏差

    我在 R 中安装了一个 glm 模型并采用了方差分析表 我需要提取 残余偏差 列 但它会产生错误 以下是代码 创建数据 counts lt c 18 17 15 20 10 20 25 13 12 outcome lt gl 3 1 9 t
  • 使用大矩阵操作

    我必须使用 big matrix 对象 并且无法计算某些函数 让我们考虑以下大矩阵 create big matrix object x lt as big matrix matrix sample 1 10 20 replace TRUE
  • 如何在ubuntu的conda环境中更改Rstudio中的R版本

    我在基本系统中安装了 R 4 3 和 Rstudio 在 conda 环境中安装了旧版本的 R 4 2 3 命令which R返回环境中安装的 R 的目录 home 用户 miniconda3 envs anndata2ri pip bin
  • 跟踪循环迭代

    抛硬币 成功 你赢100 否则你输50 你会一直玩 直到你口袋里有钱a 的价值如何a在任何迭代中都被存储 a lt 100 while a gt 0 if rbinom 1 1 0 5 1 a lt a 100 else a lt a 50
  • 如何在 Caret 中绘制随机森林(护林员)树

    我生成了如下所示的随机森林树 并尝试绘制它 但出现错误 我在哪里犯了错误 我怎样才能以正确的方式绘制它 Actmodel lt train Activity Section Author data CB1 method ranger trC
  • R、Rcpp 与 Armadillo 中矩阵 rowSums() 与 colSums() 的效率

    背景 来自 R 编程 我正在扩展到 C C 形式的编译代码Rcpp 作为循环交换 以及一般的 C C 效果的实践练习 我实现了 R 的等效项rowSums and colSums 矩阵的函数Rcpp 我知道它们以 Rcpp 糖的形式存在 并
  • 如何在 R 中合并同名列表中的数据框?

    我有一个包含很多数据框的列表 如果它们具有相同的名称 我想合并它们 即合并所有具有相同名称 a 和 b 的数据框 像这样 a lt aaaaa b lt bbbbb c lt ccccc g lt list df1 lt data fram
  • 将字符串列拆分为多个虚拟变量

    作为 R 中 data table 包的相对缺乏经验的用户 我一直在尝试将一个文本列处理为大量指示符列 虚拟变量 每列中的 1 表示特定的子字符串是在字符串列中找到 例如我想处理这个 ID String 1 a b 2 b c 3 c 进入
  • R中的重叠矩阵

    我有以下数据框 id channel 1 a 1 b 1 c 2 a 2 c 3 a 我想创建并重叠矩阵 它基本上是一个方阵 行和列标签为 a b c 表中的每个条目显示每个通道共有多少个 id 例如 在上面的例子中 矩阵看起来像 a b
  • 列出 R 数据文件的内容而不加载

    我有时用print load myDataFile RData 当我加载数据文件时列出它的内容 有没有办法列出内容而不加载数据文件中包含的对象 我认为如果不加载对象就无法做到这一点 解决方案可能是使用包装器将 R 对象保存到save 该函数
  • R 中两个时间戳之间的左连接

    我的目标是执行左连接intervals哪里的bike id比赛和created at时间戳在records在 之间start and end in the intervals table gt class records 1 data ta
  • R 闪亮仪表板中的动态重复条件面板

    我正在尝试创建一个动态条件面板 所以我的条件如下 在用户界面中输入 selectInput inpt Input Number seq 1 50 1 selectize FALSE 我的条件面板 UI 输入是 conditionalPane
  • 警告消息 - 来自 dummies 包的 dummy

    我正在使用 dummies 包为分类变量生成虚拟变量 其中一些变量具有两个以上类别 testdf lt data frame A as factor c 1 2 2 3 3 1 B c A B A B C C C c D D E D D E
  • 如何按时间间隔匹配数据帧?

    这是我从数据记录器导入原始数据时经常出现的问题 温度记录仪设置为每十分钟记录一次温度 单独的气体记录仪设置为记录最后十分钟间隔内使用的气体 我想将这两个记录器的数据合并到一个数据框中进行绘图和分析 但时间并不完全一致 我希望每十分钟的时间段

随机推荐

  • CultureAndRegionInfoBuilder 不存在

    好吧 这是一个奇怪的事情 我正在尝试使用以下方法创建自定义文化 using System Globalization var x new CultureAndRegionInfoBuilder 但我收到了令人讨厌的红色 Resharper
  • 在 Firebase 项目中集成 Gmail 连接

    我开发了一个应用程序 它使用 gmail api 来获取来自用户的所有邮件 然后我将此应用程序分为一个示例 几乎是空的 和一个执行所有操作的片段 这样我以后就可以轻松地将我的片段集成到我团队的项目设置中 现在我的片段位于另一个项目中 gma
  • 从 Lambda 向 AWS IoT Core 发布 MQTT 消息

    我是 AWS 世界的新手 目前正在开发一项 Alexa 技能 该技能只需向 AWS IoT Core 代理发布一条 mqtt 消息 与之前创建的 事物 和主题进行交互 目前我正在使用 boto3 但我不确定这是正确的路径 这是代码 但在部署
  • 移动 Safari - 视口设备高度未按预期工作

    我有一个网络应用程序 我试图在 iPad 3 上运行 当我拉起它时 该应用程序允许垂直滚动 但实际上不应该 我已经对其他网络应用程序执行了相同的过程 没有任何问题 并且不确定这次我错过了什么 在我的 html 的 head 元素内 我有以下
  • 如何使用 EditTextPreference 作为屏蔽密码文本字段?

    我有一个非常简单的问题 我有一个EditTextPreference我想用它来获取用户的密码 并且我希望它被屏蔽 我怎样才能做到这一点 下面是一个使用 xml 的简短示例
  • 对象切片,有优势吗?

    对象切片是指当子类被分配给基类时 对象失去一些属性或功能 就像是 Class A Class B extends A Class SomeClass A a new A B b new B Some where if might happe
  • 使用“in”关键字迭代 Javascript 数组

    貌似没明白这句话的意思inJavaScript 中的关键字 看看这个代码片段 http jsfiddle net 3LPZq http jsfiddle net 3LPZq var x 1 2 for i in x document wri
  • Onvif - 尝试了解它是如何工作的

    首先 我完全没有使用ONVIF的经验 我在一家公司获得了奖学金 并被要求与它一起工作 控制一些相机并从它们那里获取照片 但他们也不知道它是如何工作的 所以没有人可以帮助我很多 我正在阅读 ONVIF 网页上提供的规范 但我不太明白 我知道我
  • iOS 自定义标签栏

    我刚刚开始 iOS 开发 只是在玩 atm 我正在尝试将默认的选项卡栏按钮转换为更自定义的按钮 经过一番查看后 我发现您可以为每个按钮创建自定义状态 所以我这样做了 UIImage selectedImage0 UIImage imageN
  • 合并多个表

    我有很多表格描述了我的小公司的不同类型的支出和收益 并且我发现没有简单的方法来合并我的表格 就像我制作的这个例子一样 我希望在更新最后一个表时自动填充其他表的行 这样我就可以及时预见费用和收益 通过按日期升序自动排序绿色表 到目前为止 我发
  • python 中的结构体对象

    我想创建一个一次性的 结构 对象来保留各种状态标志 我的第一个方法是这样的 javascript风格 gt gt gt status object gt gt gt status foo 3 Traceback most recent ca
  • 如何在 Docker-Compose 中一起使用主机网络和任何其他用户定义的网络?

    我想将 Docker Compose 文件中定义的两个 Docker 容器相互连接 app and db 其中之一 app 也应该连接到host网络 容器应连接到通用的用户定义网络 appnet or default 使用嵌入式DNS来自
  • 如何在显示模态表时禁用 Cocoa 的默认动画?

    我想禁用 Cocoa 在显示模式表时执行的动画 Apple s 表编程指南 http developer apple com mac library documentation Cocoa Conceptual Sheets Concept
  • MySQL:什么是页面?

    在 MySQL 数据库的上下文中 我一辈子都不记得页面是什么 当我看到 8KB 页之类的内容时 这是否意味着每行 8KB 还是 数据库页是组织数据库文件中数据的内部基本结构 以下是有关 InnoDB 模型的一些信息 From 13 2 11
  • 使用 Apache Pig 的数据透视表

    我想知道是否可以在 Apache Pig 中一次性旋转一张表 Input Id Column1 Column2 Column3 1 Row11 Row12 Row13 2 Row21 Row22 Row23 Output Id Name V
  • 如何使 gradle processResources 任务更快

    我正在研究 Spring Boot 项目 并且我正在遭受构建时间的困扰 我的项目的 processResources 任务花费的时间太长 如果资源文件是最新的 大约只需要10秒 但如果文件至少更改一个 则需要几分钟的时间 这是因为一个资源库
  • Python 中图外的图例 - matplotlib

    我试图在 matplotlib 中的绘图之外放置一个相当广泛的图例 图例有相当多的条目 每个条目可能很长 但我不知道具体有多长 显然 这很容易使用 legendHandle plt legend loc center left bbox t
  • 使用毕加索库时目标不能为空

    我实现了一个listView使用 Picasso Library 2 4 0 我遇到了一个问题 发生了什么 我使用 Android Studio 启动应用程序 然后转到我实现的特定片段listView 一切看起来都很好 所有图像都正在加载
  • C# asp.net 中的 EVAL

    我将动态内容放置在绑定到对象数据源的数据列表中的内容占位符中 问题是我需要检查 EVAL 的值 这是代码
  • 将 mob() 树(partykit 包)与 nls() 模型结合使用

    我正在尝试使用基于模型的递归分区 MOB mob 函数 从partykit包 来分离使用导出的几条曲线nls 功能 我必须定义我的模型并确定起始值 我一直在尝试看看这是否可以与mob 功能无济于事 我尝试按照第 7 页上的示例进行操作 ht