使用'statsmodels'指定哪个类别作为基准

21 投票
3 回答
18109 浏览
提问于 2025-04-17 22:29

我明白当我在一个模型中使用分类变量,并把它传给 statsmodelsfit 方法时,程序会自动为这些分类生成虚拟变量。举个例子,如果我有一个变量叫“地点”,它的值是“印度洋”、“泰国”、“中国”和“火星”,那么在我的模型中会出现类似下面的变量:

Location[T.Thailand]

其中有一个值不会被表示出来。默认情况下,似乎是最少见的那个值被排除掉了。有没有办法指定——最好是在模型设置中——哪个值被当作“基准值”并排除掉呢?

3 个回答

3

好吧,也许有人会觉得这个方法有用。我需要为我的依赖变量设置一个新的基准类别,但我完全不知道该怎么做。我搜索了一下,什么都没找到,于是我简单地给其他类别加了一个下划线。如果你有三个类别 A、B、C,想把基准设置为 C,你只需要把 A 和 B 的标签改成 _A 和 _B。这样就可以了。看起来基准类别是通过 sorted() 来定义的。

也许有人知道更好的方法,这样做不是很符合 Python 的风格,哈哈。

4

如果你用单引号来包裹你的字符串,那么引用的参数就需要用双引号来包裹。这是一个很容易犯的错误。我之前就是在两个地方都用了单引号。

举个例子:

'y ~ C(Location, Treatment(reference="China"))'

这是正确的写法。

'y ~ C(Location, Treatment(reference='China'))'

这是不正确的写法。

40

你可以给Treatment对比传递一个reference参数,使用的语法像这样:

"y ~ C(Location, Treatment(reference='China'))"

http://patsy.readthedocs.org/en/latest/API-reference.html#patsy.Treatment

如果你对命名规则有更好的建议,请向patsy反馈。

撰写回答