Python PyMC3中B样条的Patsy公式

Python PyMC3中B样条的Patsy公式,python,bayesian,spline,pymc3,patsy,Python,Bayesian,Spline,Pymc3,Patsy,我正在学习使用PyMC3建模B样条曲线。样条曲线的设计矩阵(显然)可能变得非常复杂,因此将此构造委托给API Patsy更容易。在B样条曲线的上下文中,我不明白像字符串这样的公式应该做什么 我下面的教程(参见中的第4.74节)使用Patsy的dmatrix来构建其设计矩阵。我不太明白 我创建了一些合成数据,即列、年份和值。在下面的合成数据中,我使用了每个观测值一个结和0度(没有观测值受到超过1条样条线的影响),希望能保持简单 合成数据 false=pd.DataFrame({'year':[1,

我正在学习使用PyMC3建模B样条曲线。样条曲线的设计矩阵(显然)可能变得非常复杂,因此将此构造委托给API Patsy更容易。在B样条曲线的上下文中,我不明白像字符串这样的公式应该做什么

我下面的教程(参见中的第4.74节)使用Patsy的dmatrix来构建其设计矩阵。我不太明白

我创建了一些合成数据,即列、年份和值。在下面的合成数据中,我使用了每个观测值一个结和0度(没有观测值受到超过1条样条线的影响),希望能保持简单

合成数据

false=pd.DataFrame({'year':[1,2,3],'value':[1,1,1]})
k=[1,2,3]
无截获:

dmatrix(
“bs(年份,节=节,度=0,包括截距=假)”,
{“year”:fake.year.values,“knots”:k},
).view()
>>>
数组([[1,1,0,0.]),
[1., 0., 1., 0.],
[1., 0., 0., 1.]])
无截距-1:

dmatrix(
“bs(年份,节=节,度=0,包括截距=假)-1”,
{“year”:fake.year.values,“knots”:k},
).view()
>>>
数组([[1,0,0.]),
[0., 1., 0.],
[0., 0., 1.]])
带截距:

dmatrix(
“bs(年份,节=节,度=0,包括截距=真)”,
{“year”:fake.year.values,“knots”:k},
).view()
>>>
数组([[1,0,1,0,0.]),
[1., 0., 0., 1., 0.],
[1., 0., 0., 0., 1.]])
使用截距-1:

dmatrix(
“bs(年份,节=节,度=0,包括截距=真)-1”,
{“year”:fake.year.values,“knots”:k},
).view()
>>>
数组([[0,1,0,0.]),
[0., 0., 1., 0.],
[0., 0., 0., 1.]])
API参考资料:

据我所知,默认行为是包含所有1的第一列。通过将
-1
包含在“类似公式”的字符串对象的末尾,可以删除这一列。同样,默认情况下,第二列为全零,
include_intercept=False
删除这一列的零

我想知道,在样条曲线回归的背景下:(A)零列(截距?)的用途是什么,为什么都是零?同样,(B)所有“一”的列是什么?(我本可以猜到那些代表截获,但我猜这是错误的。)