1

わかりました皆さん...この質問を見てくれてありがとう。大学で以下のことをしたことを覚えていますが、正確な解決策を忘れていました。正しい方向に舵を切るテイカー。

N のデータの時系列 (3 つを使用します) があります。データ系列は時間順に連続しています (たとえば、obsOne[1] は obsTwo[1] および obsThree[1] と共に発生しました)。

obsOne[47, 136, -108, -15, 22, ...], obsTwo[448, 321, 122, -207, 269, ...], obsThree[381, 283, 429, -393, 242, ...]

ステップ 2. データ シリーズから、データ シリーズごとに幅 Z の一連の X レンジ ビンを作成します。(観測 obsOne の例: bin1 = [<-108, -108] bin2 = [-108, -26] bin3 = [-26, 55] ... binX = [136, > 136]

ステップ 3. 次に、データ系列のすべての可能な組み合わせを含むテーブルを作成します。したがって、4 つのビンと 3 つのデータ系列がある場合、すべての組み合わせは合計 4x4x4 = 64 の可能な結果になります。(たとえば、row1 = obsOne bin1 + obsTwo bin1 + obsThree bin1、row2 = obsOne bin1 + obsTwo bin1 + obsThree bin2、... row5 = obsOne bin1 + obsTwo bin1 + obsThree binX、row6 = obsOne bin1 + obsTwo bin2 + obsThree bin1、row7 = obsOne bin1 + obsTwo bin1 + obsThree bin2、row9 = obsOne bin1 + obsTwo bin2 + obsThree binX、...)

ステップ 4. データ系列に戻り、データ系列の各行がテーブルのどこに該当するかを調べ、観測が何回該当するかを数えます。(例: obsOne[2] obsTwo[2] obsThree[2] = テーブルの行 30、obsOne[X] obsTwo[X] obsThree[X] = テーブルの行 52。

ステップ 5.次に、テーブルで正の一致がある行のみを取得し、その行に含まれる観測値の数を数え、データ系列の観測値の総数で割ります。これにより、観測されたデータのその範囲の確率が得られます。

数学の専門家ではなく、この基本的な質問で申し訳ありません。私は何年も前にこれを行いました。どの方法を使用したか忘れましたが、この長い (古代の「手動」) 方法よりもはるかに高速でした。当時、私は python を使用していませんでした。それは、C++ の他の独自のパッケージでした。この問題を Python (現在は Python ショップ) で解決できる何かが存在するかどうかを確認したいのですが、いつでも拡張できるので、それはソフトな制約です。

4

1 に答える 1

1

あなたはこのようなことについて話しているのですか?

from __future__ import division
from collections import defaultdict

obsOne= [47, 136, -108, -15, 22, ]
obsTwo= [448, 321, 122, -207, 269, ]
obsThree= [381, 283, 429, -393, 242, ]

class BinParams( object ):
    def __init__( self, timeSeries, X ):
        self.mx= max(timeSeries )
        self.mn= min(timeSeries )
        self.Z=(self.mx-self.mn)/X
    def index( self, sample ):
        return (sample-self.mn)//self.Z

binsOne=  BinParams( obsOne, 4 )
binsTwo=  BinParams( obsTwo, 4 )
binsThree= BinParams( obsThree, 4 )

counts= defaultdict(int)
for s1, s2, s3 in zip( obsOne, obsTwo, obsThree ):
    posn= binsOne.index(s1), binsTwo.index(s2), binsThree.index(s3)
    counts[posn] += 1

for k in counts:
    print k, counts[k], counts[k]/len(counts)
于 2009-06-20T19:10:47.640 に答える