使用“statsmodels”指定要作为基础的类别

20

我知道当我在模型中使用一个类别变量并将其传递给statsmodelsfit函数时,会自动生成针对类别的虚拟变量。例如,如果我有一个变量'Location',它的值为'IndianOcean','Thailand','China'和'Mars',那么我的模型中将会生成形式如下的变量:

Location[T.Thailand]

某个值没有被表示出来。默认情况下,排除的变量似乎是最不常见的变量。是否有一种方法可以指定——理想情况下在模型规范中——哪个值被视为“基准值”并被排除?


1
似乎在公式中使用 C(例如 ... + C(Location, Treatment) + ...)可以解决问题,但这会导致一些相当丑陋的类别名称,我想避免。 - orome
1
我不理解这个。如果你想让“印度洋”作为变量“位置”的参考类别,你会写例如C(Location,“IndianOcean”)吗? - Rasmus Larsen
3个回答

39

12
明确一点,语法是 "y ~ C(Location, Treatment(reference='China'))" - Piotr Migdal
2
@PiotrMigdal 谢谢你的澄清。我希望原始答案实际上包含代码。 - istewart
4
"y ~ C(Location, Treatment('China'))" 也能起作用。 - steven
3
@jseabold,我在执行上述两种方法时遇到了PatsyError:评估因子时出错:TypeError:'Series'对象不可调用的错误。你有什么想法吗? - Nayana Madhu
我也遇到了这个问题。"TypeError: 'Series'对象不可调用"。 - undefined

4
如果您使用单引号来包装字符串,则引用的参数需要用双引号包装。这是一个很容易犯的错误。我曾经在两个地方都使用了单引号。
例如:
'y ~ C(Location, Treatment(reference="China"))'

是正确的。

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

不正确。


3

好的,也许有人会发现这篇文章有用。我需要为因变量设置一个新的基准类别,但我不知道如何做。我搜索了很多内容,但没有找到答案,所以我只是在其他类别后面加了一个下划线"_",如果你有三个类别A,B,C,并且你想让基准类别为C,你只需要将标签从A和B改为_A和_B。它有效果。似乎基准类别由sorted()定义。

也许有人知道正确的方法,这种方法并不是很Pythonic,呵呵。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接