gpt4 book ai didi

r - 分段包中的错误 : breakpoints confusion

转载 作者:行者123 更新时间:2023-12-04 10:49:53 27 4
gpt4 key购买 nike

使用分段包创建分段线性回归我在尝试设置自己的断点时看到错误;似乎只有当我尝试设置两个以上时。

(编辑)这是我正在使用的代码:

# data
bullard <- structure(list(Rt = c(0, 4.0054, 25.1858, 27.9998, 35.7259, 39.0769,
45.1805, 45.6717, 48.3419, 51.5661, 64.1578, 66.828, 111.1613,
114.2518, 121.8681, 146.0591, 148.8134, 164.6219, 176.522, 177.9578,
180.8773, 187.1846, 210.5131, 211.483, 230.2598, 262.3549, 266.2318,
303.3181, 329.4067, 335.0262, 337.8323, 343.1142, 352.2322, 367.8386,
380.09, 388.5412, 390.4162, 395.6409), Tem = c(15.248, 15.4523,
16.0761, 16.2013, 16.5914, 16.8777, 17.3545, 17.3877, 17.5307,
17.7079, 18.4177, 18.575, 19.8261, 19.9731, 20.4074, 21.2622,
21.4117, 22.1776, 23.4835, 23.6738, 23.9973, 24.4976, 25.7585,
26.0231, 28.5495, 30.8602, 31.3067, 37.3183, 39.2858, 39.4731,
39.6756, 39.9271, 40.6634, 42.3641, 43.9158, 44.1891, 44.3563,
44.5837)), .Names = c("Rt", "Tem"), class = "data.frame", row.names = c(NA,
-38L))

library(segmented)

# create a linear model
out.lm <- lm(Tem ~ Rt, data=bullard)

o<-segmented(out.lm, seg.Z=~Rt, psi=list(Rt=c(200,300)), control=seg.control(display=FALSE))

使用 psi选项,我尝试了以下方法:
psi = list(x = c(150, 300)) -- OK
psi = list(x = c(100, 200)) -- OK
psi = list(x = c(200, 300)) -- OK
psi = list(x = c(100, 300)) -- OK
psi = list(x = c(120, 150, 300)) -- error 1 below
psi = list(x = c(120, 300)) -- OK
psi = list(x = c(120, 150)) -- OK
psi = list(x = c(150, 300)) -- OK
psi = list(x = c(100, 200, 300)) -- error 2 below

(1) Error in segmented.lm(out.lm, seg.Z = ~Rt, psi = list(Rt = c(120, 150, :
only 1 datum in an interval: breakpoint(s) at the boundary or too close

(2) Error in diag(Cov[id, id]) : subscript out of bounds
我已经列出了我的数据 at this question ,但作为指导,x 数据的限制约为 0--400。

与此相关的第二个问题是:如何使用此分段包实际修复断点?

最佳答案

这里的问题似乎是 segmented 中的错误陷阱包裹。查看 segmented.lm 的代码允许一些调试。例如,在 psi = list(x = c(100, 200, 300)) 的情况下,一个增广线性模型拟合如下:

lm(formula = Tem ~ Rt + U1.Rt + U2.Rt + U3.Rt + psi1.Rt + psi2.Rt + 
psi3.Rt, data = mf)

Call:
lm(formula = Tem ~ Rt + U1.Rt + U2.Rt + U3.Rt + psi1.Rt + psi2.Rt +
psi3.Rt, data = mf)

Coefficients:
(Intercept) Rt U1.Rt U2.Rt U3.Rt psi1.Rt
15.34303 0.04149 0.04591 742.74186 -742.74499 1.02252
psi2.Rt psi3.Rt
NA NA

如您所见,拟合具有 NA值,然后导致退化的方差-协方差矩阵(在代码中称为 Cov)。该函数不会对此进行检查并尝试从 Cov 中提取对角线条目。并失败并显示错误消息。至少第一个错误,虽然可能不是很有帮助,但被函数本身捕获并表明断点太近了。

在函数中没有更好的错误捕获的情况下,我认为你所能做的就是采用试错法(并避免太接近的断点)。例如, psi = list(x = c(50, 200, 300))似乎工作正常。

关于r - 分段包中的错误 : breakpoints confusion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12135400/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com