0

使用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什么?它只是表明存在常数项吗?如果是这样,考虑到我们总是可以看到常数项的存在/不存在,这不是多余的吗?还有其他角色吗?

提前感谢您的洞察力。

4

1 回答 1

1

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

Patsy 使用这些名称来提示正在使用的编码系统。当有“T”时,即为“治疗编码”,β 系数告诉您给定类别的响应某些基线类别有何不同。当没有“T”时,β系数不是差异,它们只是该类别的预测。

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

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

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

于 2019-01-06T02:44:06.280 回答