[解決済み】dmatricesにカラムが表示されない
質問
dfのRegion列にはW,E,N,S,Cの5つの変数がありますが、結果のデータフレームにはW,E,N,Sとintercept列だけがあります。
import statsmodels.api as sm
from patsy import dmatrices
df = sm.datasets.get_rdataset('Guerry','HistData').data
vars = ['Department','Lottery','Literacy','Wealth','Region']
df = df[vars]
df = df.dropna()
# Department Lottery Literacy Wealth Region
# 0 Ain 41 37 73 E
# 1 Aisne 38 51 22 N
# 2 Allier 66 13 61 C
# 3 Basses-Alpes 80 46 76 E
# 4 Hautes-Alpes 79 69 83 E
y, X = dmatrices('Lottery ~ Literacy + Wealth + Region', data=df, return_type='dataframe')
print(X.columns.tolist())
# ['Intercept', 'Region[T.E]', 'Region[T.N]', 'Region[T.S]', 'Region[T.W]', 'Literacy', 'Wealth']
最後の行を以下のように変更すると、正常に動作し、5つのリージョン値が表示されます。 のデータフレームが表示されます。
y, X = dmatrices('Literacy + Wealth + Region ~ Lottery', data=df, return_type='dataframe')
print(y.columns.tolist())
# ['Region[C]', 'Region[E]', 'Region[N]', 'Region[S]', 'Region[W]', 'Literacy', 'Wealth']
また、Region Cではなく、最初のコードに作成されたInterceptカラムは何ですか?
解決方法は?
パッツィー 自動的に定数「Intercept」項が追加される の右辺に の式で使用されます。 これにより、切片の列がすべて1である設計マトリックスとなる。 例えば
import pandas as pd
import patsy
data = patsy.demo_data("a", "b", "y")
# a b y
# 0 a1 b1 1.764052
# 1 a1 b2 0.400157
# 2 a2 b1 0.978738
# 3 a2 b2 2.240893
# 4 a1 b1 1.867558
# 5 a1 b2 -0.977278
# 6 a2 b1 0.950088
# 7 a2 b2 -0.151357
mat = patsy.dmatrices("y ~ a + b ", data, return_type='dataframe')[1]
print(mat)
収量
Intercept a[T.a2] b[T.b2]
0 1.0 0.0 0.0
1 1.0 0.0 1.0
2 1.0 1.0 0.0
3 1.0 1.0 1.0
4 1.0 0.0 0.0
5 1.0 0.0 1.0
6 1.0 1.0 0.0
7 1.0 1.0 1.0
パッツィは式の両端の式を解析し を追加するだけです。 項が必要な場合 に必要な柔軟性を持たせるために モデルです。 デザインマトリックスで言えば、新しい列は追加されないということです。 が追加されない限り、その列によってスパンされるベクトル空間は拡張されません。 新しい列は 言い換えれば、新しい列はすでに他の列のスパンに入っている。 他の列は冗長になるため、追加されない。
W、E、N、S、Cのいずれかと等しくなければならないカテゴリー変数があるとき、変数の値がW、E、N、Sでないことを知っていることは、その変数がCと等しいことを知っていることと同じである。
先ほどの例の出力を見てみましょう。このとき
a
変数
は
a2
は、それがイコールであることを知っていることと同じです。
a1
. デザイン面では
を含めても列のスペースは増えません。
a1
の列があります。
{コード
{コード
は
Intercept - a2
. (以下は
a1
a1
a[T.a1]
a2
Intercept a[T.a2] b[T.b2] a[T.a1]
0 1.0 0.0 0.0 1.0
1 1.0 0.0 1.0 1.0
2 1.0 1.0 0.0 0.0
3 1.0 1.0 1.0 0.0
4 1.0 0.0 0.0 1.0
5 1.0 0.0 1.0 1.0
6 1.0 1.0 0.0 0.0
7 1.0 1.0 1.0 0.0
import statsmodels.api as sm
from patsy import dmatrices
df = sm.datasets.get_rdataset('Guerry','HistData').data
vars_ = ['Department','Lottery','Literacy','Wealth','Region']
df = df[vars_]
df = df.dropna()
formula1 = 'Lottery ~ Literacy + Wealth + Region'
print(formula1)
y1, X1 = dmatrices(formula1, data=df, return_type='dataframe')
print('LHS: {}'.format(y1.columns.tolist()))
# ['Lottery'],
print('RHS: {}'.format(X1.columns.tolist()))
# ['Intercept', 'Region[T.E]', 'Region[T.N]', 'Region[T.S]', 'Region[T.W]', 'Literacy', 'Wealth']
formula2 = 'Literacy + Wealth + Region ~ Lottery'
print(formula2)
y2, X2 = dmatrices(formula2, data=df, return_type='dataframe')
print('LHS: {}'.format(y2.columns.tolist()))
# ['Region[C]', 'Region[E]', 'Region[N]', 'Region[S]', 'Region[W]', 'Literacy', 'Wealth']
print('RHS: {}'.format(X2.columns.tolist()))
# ['Intercept', 'Lottery']
Intercept
+ 0
- 1
formula3 = 'Lottery ~ Literacy + Wealth + Region + 0'
print(formula3)
y1, X1 = dmatrices(formula3, data=df, return_type='dataframe')
print('LHS: {}'.format(y1.columns.tolist()))
print('RHS: {}'.format(X1.columns.tolist()))
関連
-
pythonサイクルタスクスケジューリングツール スケジュール詳解
-
[解決済み】ilocが「IndexError: single positional indexer is out-of-bounds」を出す。
-
[解決済み】syntaxError: 'continue' がループ内で適切に使用されていない
-
[解決済み] 列の値に基づいてDataFrameから行を選択するにはどうすればよいですか?
-
[解決済み] Pandas DataFrameからカラムを削除する
-
[解決済み] 既存のDataFrameに新しい列を追加する方法は?
-
[解決済み] Pandas DataFrameの特定の列の値がNaNである行を削除する方法
-
[解決済み】Pandas DataFrameのカラムヘッダからリストを取得する。
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み】Pandas DataFrameのより多くの列を見るために出力表示を拡大する方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Python関数の高度な応用を解説
-
Python カメの描画コマンドとその例
-
Pythonショートビデオクローラーチュートリアル
-
[解決済み】ImportError: sklearn.cross_validation という名前のモジュールがない。
-
[解決済み] データ型が理解できない
-
[解決済み】csv.Error:イテレータはバイトではなく文字列を返すべき
-
[解決済み】Python elifの構文が無効です【終了しました
-
[解決済み] TypeError: 'DataFrame' オブジェクトは呼び出し可能ではない
-
[解決済み】Python: OverflowError: 数学の範囲エラー
-
[解決済み】 'numpy.float64' オブジェクトは反復可能ではない