这个计算的难点在于,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)