【发布时间】:2021-09-28 06:56:33
【问题描述】:
我的数据框按组分隔。我想对每个组执行分段线性回归,为此我打算使用 segmented 包。
首先,我使用dplyr 包为每个组创建了线性模型。下一步是分割这些模型,但这是我遇到的问题。任何提示或其他方式来做到这一点?最终目标是使用这些细分来制作图表。
library(dplyr)
library(segmented)
Group <- c("A", "B")
x <- 0:10
y <- c(0, 0.4, 0.6, 0.8, 0.9, 0.9, 0.95, 0.97, 0.98, 0.99, 1,
0, 0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07, 0.08, 0.09, 0.1)
df <- expand.grid(x = x,
Group = Group)
df$y <- y
Segment <- df %>%
group_by(Group) %>%
do(my.lm = lm(data = .,
formula = y ~ x))
不成功的尝试:
Segment <- df %>%
group_by(Group) %>%
do(my.lm = lm(data = .,
formula = y ~ x),
my.seg = segmented(my.lm,
seg.Z = x))
Segment <- df %>%
group_by(Group) %>%
do(my.lm = lm(data = .,
formula = y ~ x)) %>%
do(my.seg = segmented(my.lm,
seg.Z = x))
Segment <- df %>%
group_by(Group) %>%
do(my.lm = lm(data = .,
formula = y ~ x)) %>%
mutate(my.seg = segmented(my.lm,
seg.Z = x))
【问题讨论】:
-
我认为您的数据也不正确。例如。对于第二组“B”,它会抛出错误
Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases -
@akrun 在我的电脑上没有出现这个错误。此外,您似乎正在使用我没有使用过的
lm.fit()函数。您能否更具体地说明错误在哪里? -
这里是错误
tmp <- subset(df, Group == 'B'); obj1 <- lm(y ~ x, tmp); segmented(obj1, seg.Z = ~ x)#Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 0 (non-NA) cases。如果你对Group == 'A'做同样的事情,它会起作用
标签: r dplyr linear-regression segment piecewise