如何使用转轮计算rlm的运行坡度?

如何使用转轮计算rlm的运行坡度?,r,regression,runner,singular,R,Regression,Runner,Singular,我有一个“客户”数据框架,包括客户id、月份和当月的总购买量。 我试图用稳健回归法计算12个月的运行斜率 我尝试了以下方法: Coef <- function(x) {return(rlm(cbind(x)~cbind(1:length(x)))$coefficients[2])} customer_slope = customers %>% mutate(slope = runner(x=total_purchases,k=12,f=Coef)) cbind(1:长度(x)) 0

我有一个“客户”数据框架,包括客户id、月份和当月的总购买量。 我试图用稳健回归法计算12个月的运行斜率

我尝试了以下方法:

Coef <- function(x) {return(rlm(cbind(x)~cbind(1:length(x)))$coefficients[2])}
customer_slope = customers %>% mutate(slope = runner(x=total_purchases,k=12,f=Coef))
cbind(1:长度(x)) 0.6888112


所以我遇到了类似的问题,最后使用slider找到了下面的解决方案。这提供了一个3天的滚动估计(当然,您可以根据需要进行更改)。这并不完全符合您的答案(您可能可以通过循环得到),但大多数情况下都是这样

library(MASS)
library(dplyr)
library(slider)

dat <- tibble::tibble(customers = c(4,11,7,15,5,14,8,9,14,17,14,13)) %>% 
  mutate(t = 1:n() %>% as.numeric())

dat %>% 
  mutate(results = slide_dbl(.x = .,
                             .f = ~rlm(customers ~ t, k = 12, data = .x)$coefficients[2],
                             .before = 2,
                             .complete = T))
库(MASS)
图书馆(dplyr)
库(滑块)
dat%
变异(t=1:n()%>%as.numeric())
dat%>%
突变(结果=slide_dbl(.x=。)。,
.f=~rlm(客户~t,k=12,数据=.x)$系数[2],
.before=2,
(完成=T))

看起来这就是我们要走的路,谢谢! 看起来造成这种奇异性的原因是我没有改变默认值。 因此,结合您的建议,这就是我的工作方式(300万排花了大约两个小时,但涉及的团队更为复杂,如下所示)

斜率%mutate(t=1:n()%%>%as.numeric()) 返回(rlm(数据t,数据=prep)$系数[2]) } 客户_rlm=客户%>% 变异(cust_rlm_12=幻灯片_dbl(总购买量,斜率,.before=11,.complete=T))
考虑两个客户的数据,数据跨度为1000天<代码>总采购量按客户累计,每个采购量为~POI(5)

set.seed(1)
客户%
分组依据(id)%>%
变异(
采购总额=总和(RPOI(n(),λ=5))
)
在滚动窗口中使用计算回归时,请确保您处理了由于自由度不足、奇异性等引起的错误-这就是为什么我将
tryCatch
放在
rlm
调用周围-如果有任何错误,函数将返回失败窗口的NA。 下面的数据按
id
进行分组,这意味着模型是按每个客户计算的。年度滚动回归应收敛到
斜率=5
(+/-随机误差)


客户%>%
分组依据(id)%>%
变异(
坡度=转轮(
x=。,
f=函数(x){
tryCatch(
rlm(x$采购总额~序号(nrow(x))$系数[2],
错误=函数(e)NA
)
},
idx=“日期”,
k=“年”
)
)
及时为客户绘制坡度图

ggplot(客户、aes(x=日期,y=斜率,颜色=id,组=id))+
geom_线()+
geom_hline(yintercept=5,color=“red”)

查看要使用mutate(value=slide\u dbl(total\u purchases,Cord,.before=2)的可用幻灯片软件包。Hi,slide\u dbl返回的错误与singularity@Alex尝试此函数调试:
Coef
library(MASS)
library(dplyr)
library(slider)

dat <- tibble::tibble(customers = c(4,11,7,15,5,14,8,9,14,17,14,13)) %>% 
  mutate(t = 1:n() %>% as.numeric())

dat %>% 
  mutate(results = slide_dbl(.x = .,
                             .f = ~rlm(customers ~ t, k = 12, data = .x)$coefficients[2],
                             .before = 2,
                             .complete = T))
slope_rlm <- function(x) {
  x=as.numeric(x)
  prep = tibble(data=x)%>%mutate(t=1:n()%>%as.numeric())
  return(rlm(data~t,data=prep)$coefficients[2])
}


customers_rlm = customers %>% 
  mutate(cust_rlm_12=slide_dbl(total_purchases,slope_rlm,.before=11,.complete=T))