somethingこの広告は、90日以上更新していないブログに表示しています。2016-11-08PythonのStatsmodelsを使って回帰分析を行うPythonPythonを使って回帰分析を行う。使用するライブラリはStatsmodelsである。inlineまず対象となるデータを読み込む。CSVにしたものである。このデータは35人の事務員に対するアンケート結果で、それぞれの列は次のような意味である。昇進まずは散布図行列を描く。7))plt.show()数字は満足度の割合(パーセンテージ)である。総合評価ratingとcomplaintsに相関が高そうだということが見て取れる。対角線上にはその列(行といっても同じだが)の変数のヒストグラムが表示される。次にStatsmodelsを使い、ratingを目的変数、残りのすべてを説明変数として重回帰分析を行う。add_constantという関数は1という値だけの列を追加していて、これが切片(説明変数にかかわらずオフセットされる量)となる。Statsmodelsの流儀で、モデルに切片を使う場合はこのようにしなければならない。problems.この結果が妥当だとすると、回帰係数coefにより、complaintsやlearningが大きいほど総合評価ratingは上がる。逆にadvanceが高いほど総合評価は下がるということになるようだ。回帰モデルの評価指標としてサマリーの右上に表示されているような指標値がある。Log-LikelihoodとR-squaredはモデル作成に使ったデータへの当てはまりの良さを示す。一般的に説明変数が多いほどデータへの当てはまりは向上するが、それが未知のデータの予測に良いとは限らず、これらの値が高くても無駄な変数を含むかもしれない。R-squaredは当てはまりの良さを説明変数の数で打ち消すような効果を持つ。(検定を行う場合は0.05未満や0.01未満が基準となる)。そこで、P>|t|の小さい順に変数を追加していって、評価指標がどのように変化するかを見てみる。ここでは変数を追加していくコードを自分で書いているが、おそらく自動で行うような関数もあるのかもしれない。R-squared(いずれも高いほうが良い)は変数を増やすのにつれて単調増加している。R-squared(高いほうが良い)は向上が頭打ちになるポイントがある。advance]を使ったときが最もよい。AICの値は「定性的データ分析」のRの実行結果に出てくる値とは一致しておらず、何か計算方法に違いがあるのかもしれない。learning]だけを説明変数にするのがよいようだ。サマリーを生成したものを次に示す。specified.Statsmodelsにはstatsmodels.formula.apiというモジュールもある。これを使うと目的変数と説明変数の間の関係を式で表現することができる。この式はRのlm関数で使われるものと同じなので、Rで書かれた本などをPythonに翻訳するときに便利だ。specified.回帰分析では説明変数同士の強い相関によって回帰モデルに矛盾が生じることがある。StatsmodelsでVIFを計算する関数variance_inflation_factorは少し使いにくい形をしている。説明変数とVIFを計算したい列の番号を引数として与える。ここでは切片を含めてすべての列に対するVIFを計算した。columns=["VIF"])Out[85]:VIFIntercept32.190129complaints1.553021learning1.553021VIFの値が10より大きいときは多重共線性があるとされる。5より大きい場合となっている。1.56程度であり、多重共線性はないと判断される。切片の分はよくわからないが、切片についてVIFを計算している例をみたことがないので無視してよいのだろう。月別アーカイブ参加グループプログラミングはてなブログをはじめよう!tokbさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。