这是在没有拦截的情况下构建两级分类变量的设计矩阵时patsy的预期行为吗?

时间:2016-03-11 16:07:51

标签: python statistics statsmodels patsy

(patsy v0.4.1,python 3.5.0)

我想使用patsy(理想情况下通过statsmodels)来构建回归设计矩阵。

我想要的patsy式公式是

response ~ 0 + category

其中category是两级分类变量。 0 + ...应该表示我不想要隐式拦截术语。

我期望的设计矩阵有一个零的列,一个列表示category是基数级别(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)

对于包含拦截的模型是正确的,但仍然不是我想要的。

输出是否没有拦截预期的行为?如果是这样,为什么? 我只是对这个设计矩阵如何与标准编码一起工作感到困惑?

我知道我可以编辑设计矩阵,使我的回归按照我想要的方式工作,但如果这是一个错误,我希望将其修复为patsy。

0 个答案:

没有答案