2017-11-22 15 views
0

私はpatsyを使ってregsをstatsmodelsに適合させています。patsyがカテゴリ変数の冗長な対話を作成するのを止める方法

私の問題は、patsyがカテゴリカルな相互作用を(ローカルに)作成するため、私のデザインマトリックスが特異だということです。

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 

c1c2が値を持っているとき、値bf

答えて

2

パッツィは、私はc1のすべての組み合わせの効果を推定したい」という意味としてC(c1):C(c2)を解釈していないので、私は2番目の列を除外したいと思います「c2値」となります。それらの組み合わせのいくつかがあなたのデータに表示されない場合、それらは推定できませんので、特異行列を少なくとも問題点を指摘してください...

1つの簡単な方法は、c1c2の組み合わせごとに異なる値をとる新しい変数を作成することです。これがうまくいく理由は、patsyは、可能な値のセットが実際に現れる値であることを推測します。b.fが起こった可能性があることを知る方法はありません。

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) 
関連する問題