问题描述
我正在学习使用PyMC3对B样条曲线建模的知识。花键的设计矩阵(显然)可能会变得非常复杂,因此将这种构造委托给API Patsy更容易。在B样条曲线的背景下,我不明白应该使用类似公式的字符串。
我正在关注的教程(请参阅https://github.com/pymc-devs/resources/blob/master/Rethinking_2/Chp_04.ipynb中的4.74节)使用Patsy的dmatrix来构建其设计矩阵。我不太“明白”。
我创建了一些综合数据,即列,年份和值。在下面的综合数据中,我为每个观察值使用了一个结,度数为0(没有观察到超过1个样条线的影响),希望可以使事情变得简单。
综合数据
fake = pd.DataFrame({'year':[1,2,3],'value':[1,1,1]})
k = [1,3]
没有拦截:
dmatrix(
"bs(year,knots=knots,degree=0,include_intercept=False) ",{"year": fake.year.values,"knots": k},).view()
>>>
array([[1.,1.,0.,0.],[1.,1.]])
没有拦截-1:
dmatrix(
"bs(year,include_intercept=False) -1",[0.,1.]])
使用拦截:
dmatrix(
"bs(year,include_intercept=True) ",1.]])
拦截为-1:
dmatrix(
"bs(year,include_intercept=True) -1",).view()
>>>
array([[0.,1.]])
API参考: https://patsy.readthedocs.io/en/latest/spline-regression.html https://patsy.readthedocs.io/en/latest/API-reference.html
据我所知,默认行为是包含全1的第一列。通过在“类似于公式的”字符串对象的末尾包含-1
,将删除这一列。同样,默认情况下,第二列都是零,而include_intercept=False
会删除此列零。
对于样条回归,我想知道:(A)零的列是什么(拦截?),为什么都是零?同样,(B)所有的列是什么? (我猜想那个代表拦截,但是我想这是错误的。)
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)