<python + =“” patsy =“”>为什么带/不带T的虚拟变量名称?

时间:2019-01-05 03:35:16

标签: python patsy

使用patsy,我注意到它有时用T命名伪变量,而在其他情况下则用T命名。今天,我意识到当回归方程中存在常数项时,会附加T,而没有常数项的情况下将没有T。例如,比较以下代码中由z[T.1]表示的z[0]z[1]OUTPUT

import pandas as pd
import patsy

data = {'z': ['1', '0', '0'],
        'y': [150, 200, 50],
        'x': [200, 210, 90]}
df = pd.DataFrame(data)

# with constant -----------------------
form_const = 'y ~ x + z'
y_const, X_const = patsy.dmatrices(form_const, df, return_type='dataframe')
print(X_const.columns.tolist())

# ['Intercept', 'z[T.1]', 'x'] <- OUTPUT

# withOUT constant --------------------
form_no_const = 'y ~ -1 + x + z'
y_no_const, X_no_const = patsy.dmatrices(form_no_const, df, return_type='dataframe')
print(X_no_const.columns.tolist())

# ['z[0]', 'z[1]', 'x'] <- OUTPUT

问题

T的作用是什么?它只是表明常数项的存在吗?如果是这样,鉴于我们总是可以看到常数项的存在与否,这是否是多余的?还有其他角色吗?

您的见解会得到赞赏。

1 个答案:

答案 0 :(得分:1)

有很多不同的方法可以在回归中编写分类变量。它们产生相同的预测,但实际的beta系数不同,并且,如果您要解释beta或对其进行假设检验,则需要知道使用了哪种编码。

Patsy使用这些名称作为使用哪个编码系统的提示。当出现“ T”时,即为“处理编码”,并且beta系数告诉您给定类别 的响应与某些基线类别之间的差异。如果没有“ T”,则beta系数就不是差异,它们只是该类别的预测。

patsy有时使用一个而有时使用另一个的原因是patsy会自动尝试查找完整的编码,其中beta都具有唯一且可解释的值。 (另一种选择是“过度确定”模型,其中有无限多个beta给出相同的预测,并且您需要添加一些额外的任意约束以适合该模型。)如果您的模型中有一个拦截项,则可以提供一开始是一个自由度,当patsy添加分类变量时,它会检测到该变量并使用(n-1)维编码,例如处理编码,然后得到“ T”。如果没有拦截项,则使用n维编码,而您不会得到“ T”。

Patsy还允许您选择不同的编码方案,甚至定义自己的编码方案:https://patsy.readthedocs.io/en/latest/API-reference.html#handling-categorical-data

有关patsy和一般编码方案的详细信息,请参阅: