Python 这是patsy在构建无截距的两级分类变量的设计矩阵时的预期行为吗?

Python 这是patsy在构建无截距的两级分类变量的设计矩阵时的预期行为吗?,python,statistics,statsmodels,patsy,Python,Statistics,Statsmodels,Patsy,(patsy v0.4.1,python 3.5.0) 我想使用patsy(最好是通过statsmodels)来构建回归的设计矩阵 我想要的patsy风格的公式是 response ~ 0 + category 其中category是一个两级分类变量。0+…应该表示我不想要隐式截取项 我期望的设计矩阵有一列,列中有0和1,表示类别是具有基本级别(0)还是具有其他级别(1) 以下代码: import pandas as pd import patsy df = pd.DataFrame({'c

(patsy v0.4.1,python 3.5.0)

我想使用patsy(最好是通过statsmodels)来构建回归的设计矩阵

我想要的patsy风格的公式是

response ~ 0 + category
其中category是一个两级分类变量。
0+…
应该表示我不想要隐式截取项

我期望的设计矩阵有一列,列中有0和1,表示
类别
是具有基本级别(0)还是具有其他级别(1)

以下代码:

import pandas as pd
import patsy

df = pd.DataFrame({'category': ['A', 'B'] * 3})

patsy.dmatrix('0 + category', data=df)
产出:

DesignMatrix with shape (6, 2)
  category[A]  category[B]
            1            0
            0            1
            1            0
            0            1
            1            0
            0            1
  Terms:
    'category' (columns 0:2)
这是单数,不是我想要的

当我跑的时候

import pandas as pd
import patsy

df = pd.DataFrame({'category': ['A', 'B'] * 3})

patsy.dmatrix('category', data=df)
输出是

DesignMatrix with shape (6, 2)
  Intercept  category[T.B]
          1              0
          1              1
          1              0
          1              1
          1              0
          1              1
  Terms:
    'Intercept' (column 0)
    'category' (column 1)
这对于包含截距的模型是正确的,但仍然不是我想要的

没有截取的输出是否为预期行为?若然,原因为何? 我只是对这个设计矩阵应该如何与标准编码一起工作感到困惑吗


我知道我可以编辑设计矩阵,以使我的回归工作符合我的预期,但如果这是一个bug,我希望看到它在patsy中得到修复。

我还向pydata/patsy提交了一个问题。这是一个重复的问题,因为当前patsy的第二部分始终提供一整套列,如果数据中存在所有级别组合,则这些列是非单列的。(用户定义的截距应该或可能可以解决此问题。)
0+
-1
表示没有显式截距,截距仍然是隐式添加的。@user333700,你是说patsy中的公式仍然可以有隐式截距,即使我包含
0+
?我想知道为什么会是这样…?官方回答:因为这是迄今为止最常见的用例。(非官方回答:我猜是因为模仿了R。“魔术比显式好”)我还向pydata/patsy提交了一个问题。这是一个重复的问题,因为当前patsy的第二部分始终提供一整套列,如果数据中存在所有级别组合,则这些列是非单列的。(用户定义的截距应该或可能可以解决此问题。)
0+
-1
表示没有显式截距,截距仍然是隐式添加的。@user333700,你是说patsy中的公式仍然可以有隐式截距,即使我包含
0+
?我想知道为什么会是这样…?官方回答:因为这是迄今为止最常见的用例。(非正式的回答:我猜是因为模仿了R,“魔术比显式的好”)