如何实现滑动窗口ols取r2值?

我有两个矩阵,相同大小的,希望矩阵的每一列对应做ols,如何实现滑动窗口ols取r2值?窗口大小为20. 我希望实现出如mbeta这样的效果。

请先 登录 后评论

最佳答案 2022-05-26 17:34

这个计算的难点在于,moving函数需要聚合,而ols不是聚合函数;each的参数不能如moving函数这样传参。

故在写的时候,需要先将ols取r2的值进行封装,使其为自定义聚合函数。

再将moving函数封装,最后each调用。

具体可以参考以下:

defg getR2(x,y){
        return ols(x,y,,2).RegressionStat[0,1]
        }
def movingR2(x , y, window){
        return moving(getR2, [x, y], window)
}
x=matrix([1..100,10..109,100..199])
y=matrix([100..199,20..119,0..99])
window=20
each(movingR2{,,window},x, y)

也可以用lamda表达式写,代码可以更简洁,参考:

each(def(m,n) -> moving(getR2, [m,n], 20), x, y)
请先 登录 后评论

其它 0 个回答