首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何阻止patsy创建范畴变量的冗余交互

如何阻止patsy创建范畴变量的冗余交互
EN

Stack Overflow用户
提问于 2017-11-22 21:57:49
回答 1查看 493关注 0票数 0

我使用patsy来拟合使用公式api的状态模型的回归。

我的问题是,我的设计矩阵是单数的,因为patsy创建了(本地的?)范畴的冗余交互作用。

代码语言:javascript
复制
import patsy
import pandas as pd
data = [('y',[2,5,6]),
        ('c1',['a','a','b']),
        ('c2',['g','f','g'])]
df = pd.DataFrame.from_items(data)#([y,c1,c2],columns=['y','c1','c2'])
formula = "y ~C(c1):C(c2)-1"
y,X = patsy.dmatrices(formula,df,return_type='dataframe')
print (X)

C(c1)[a]:C(c2)[f]   C(c1)[b]:C(c2)[f]   C(c1)[a]:C(c2)[g]   C(c1)[b]:C(c2)[g]
0   0.0 0.0 1.0 0.0
1   1.0 0.0 0.0 0.0
2   0.0 0.0 0.0 1.0

我想排除第二列,因为当c1有值f时,c2没有值f

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-23 05:18:35

Patsy将C(c1):C(c2)解释为“我想估计c1c2值的每一个组合的效果”。如果这些组合没有出现在你的数据中,那么它们就无法被估计,所以给出一个奇异矩阵至少指出了问题.

如果您只想估计现有组合的效果,一种简单的方法是为c1c2的每个组合创建一个新变量,该变量具有不同的值。这样做的原因是,patsy会推断出,可能的值集合正是实际出现的值--它不可能知道b.f可能发生了:

代码语言:javascript
复制
In [1]: df["c1_and_c2"] = df["c1"] + "." + df["c2"]

In [2]: patsy.dmatrix("c1_and_c2 - 1", df)
Out[2]: 
DesignMatrix with shape (3, 3)
  c1_and_c2[a.f]  c1_and_c2[a.g]  c1_and_c2[b.g]
               0               1               0
               1               0               0
               0               0               1
  Terms:
    'c1_and_c2' (columns 0:3)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47444502

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档