gpt4 book ai didi

r - 具有不连续数据的分段线性回归

转载 作者:行者123 更新时间:2023-12-02 03:53:12 30 4
gpt4 key购买 nike

我有一个看起来是分段线性的数据集。我想在 R 中执行分段线性回归。问题是断点处存在不连续性。通过使用 this question 中的一些代码我设法得到了一些东西,但我并不满足。

数据集

这是一个虚拟数据集。

equation of the dataset

NB = 100
A1 = 2 # coeff for first part
A2 = 1 # coeff for second part
B1 = 0 # intercept for first part
B2 = 300 # intercept for second part
df = data.frame(n=1:NB)
df$n = sample(500, size=NB, replace=TRUE)
df$noise = sample(20, size=NB, replace=TRUE)-10
my_func <- function(n, noise) {
if(n < 100) {
return(A1*n+B1 + noise)
}
else {
return(A2*n+B2 + noise)
}
}
df$fn = mapply(my_func, df$n, df$noise)

使用分段

这非常简单,我们只需执行经典线性回归并将其赋予分段

library(segmented)
library(ggplot2)
model_segmented = segmented(lm(fn~n, data=df), seg.Z = ~ n)
predict_segmented = data.frame(n = df$n, fn = broken.line(model_segmented)$fit)
ggplot(df, aes(x = n, y = fn)) +
geom_point() + geom_line(data = predict_segmented, color = 'blue')

给予:

plot of the raw data and its linear regression using segmented

显然,segmented 期望数据是连续的。这里的情况并非如此,因此回归不正确。

“手动”方法

这种方法比较繁琐。首先,我们通过尝试所有可能的断点并保留产生最低残差的断点来计算断点。然后,我们在线性回归中添加一个新因子,它告诉预测变量是大于还是小于该断点。

# Computation of the break-point
Break<-sort(unique(df$n))
Break<-Break[2:(length(Break)-1)]
d<-numeric(length(Break))
for (i in 1:length(Break)) {
model_manual<-lm(fn~(n<Break[i])*n + (n>=Break[i])*n, data=df)
d[i]<-summary(model_manual)[[6]]
}
breakpoint = Break[which.min(d)]

# Linear regression using this break-point
df$group = df$n >= breakpoint
model_manual<-lm(fn~n*group, data=df)
dat_pred = data.frame(n = df$n, fn = predict(model_manual, df))
ggplot(df, aes(x = n, y = fn)) +
geom_point() +
geom_line(data=dat_pred[dat_pred$n < breakpoint,], color = 'blue') +
geom_line(data=dat_pred[dat_pred$n >= breakpoint,], color = 'blue')

给予:

enter image description here

这里,回归很棒。

问题

有没有更好的方法来实现这个目标? segmented 包可以获取不连续的数据吗?或者是否有一个包可以做到这一点?

我担心的是第二种方法有点长而且可读性不太好。

最佳答案

在花费了大量时间进行挖掘之后,我相信 chngpt 包是最好的选择。它可以进行连续和不连续分段回归。链接在这里:https://cran.r-project.org/web/packages/chngpt/vignettes/chngpt-vignette.pdf

关于r - 具有不连续数据的分段线性回归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44778954/

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