私はこれを達成する方法についてはかなり合理的な考えを持っていると思うが、私はすべてのステップで100%確実ではない。この質問は、私が最も効率的なやり方でこれをやっていること、そして私の統計知識が実際には健全であることを保証するための健全性チェックとして主に意図されています。Pythonで多くの回帰を計算する最速の方法は?
とにかく、私がやろうとしているかについて、いくつかの説明:
私は上のいくつかの線形回帰を実行したい時系列データがたくさんあります。特に、私は約500の異なる変数について2000回の観測を行っています。各変数について、2つの説明変数(約2000件の観測の2つの追加ベクトル)を使用して回帰を実行する必要があります。ですから、500種類のYのそれぞれについて、a
とb
を次の回帰で見つける必要があります。
これまで、私はregsを実行するためにstatsmodelsパッケージのOLS関数を使用してきました。しかし、私が知る限り、問題を解決するためにstatsmodelsパッケージを使用したいのであれば、それを何百回も呼び出さなければならないでしょう。これは一般的には効率が悪いようです。
代わりに、私は長い間本当に触れていない統計をいくつか再訪することにしました。私の知識がまだ間違っていれば、私はすべての観測値を約2000 x 500の1つの大きなYマトリックスに入れることができます。次に、説明変数を約2000 x 2のXマトリックスに張り、すべての結果(X'Y)/(X'X)
を計算して私の回帰の500。私が基本的なnumpyのもの(matrix.Iを使った*と逆を使った行列乗算)を使ってこれを行うなら、それは何百ものstatsmodel OLS呼び出しよりもずっと速くなると思います。ここで
は、私が持っている質問です:
- は私がstatsmodels何度も呼び出して、以前の方法よりも高速をしていますnumpyのものですか?もしそうなら、私が欲しいものを達成するための最速/最も効率的な方法ですか?私はそれがあると仮定していますが、あなたがより良い方法を知っていれば、私はそれを聞いてうれしく思います。 (確かに、私はこのように多くの回帰を計算する必要がある最初の人ではありません)
- 行列に欠けているデータをどうやって扱いますか?私の時系列データは素敵で完全なものではなく、たまに価値が失われます。私がnumpyで規則的な行列乗算をしようとすると、NAの値が伝播し、私は最終的には最終的な結果としてほとんどがNAの行列になります。私が個々の回帰を単独で行う場合、私は回帰を実行する前にNAsを含む行を削除することができますが、これを大規模な2000 x 500行列で実行すると、実際の非NAデータを他の変数から削除します私は明らかにそれが起こることを望んでいません。
- 最初に行列に入れる前に、私の時系列データが実際に正しく並べられることを保証する最も効率的な方法は何ですか?私の観測の開始日と終了日は必ずしも同じではなく、一部のシリーズでは他の人がそうでない日があるかもしれません。もし私がこれを行うための方法を選ぶなら、私はすべての観測を日付で索引付けされたパンダのデータフレームに入れます。そうすれば、パンダは私のためにすべてを整理して作業を終わらせ、それが終わった後に基礎となるndarrayを抽出することができます。これは最善の方法ですか、またはパンダには別の方法でマトリックス構築を行うことで回避できるオーバーヘッドがありますか?
多分、http://codereview.stackexchange.com/はあなたの質問のためのより良い場所ですか? http://codereview.stackexchange.com/tourを参照してください。 – boardrider