<Python + Patsy> 为什么虚拟变量的名称 with/without T?

<Python + Patsy> Why Name of dummy variables with/without T?

使用 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的作用是什么?它是否只是表明常数项的存在?如果是这样,那岂不是多余,因为我们总能看到常数项的presence/absence?还有其他角色吗?

提前感谢您的见解。

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

Patsy 使用这些名称作为正在使用的编码系统的提示。当存在 "T" 时,即 "treatment coding",并且 beta 系数告诉您给定类别 的响应与某个基线类别有何不同。当没有 "T" 时,beta 系数不是差异,它们只是该类别的预测。

patsy 有时使用一种而有时使用另一种的原因是 patsy 会自动尝试找到全等级编码,其中所有 beta 都具有唯一且可解释的值。 (另一种选择是 "overdetermined" 模型,其中有无限多的 beta 给出相同的预测,您需要添加一些额外的任意约束来拟合模型。)如果您的模型中有截距项,则它提供了一个开始的自由度,当 patsy 去添加分类变量时,它检测到并使用 (n-1) 维编码,如治疗编码,你得到 "T"。如果没有截距项,则它使用 n 维编码,并且您不会得到 "T".

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

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