2009-06-20 7 views
1

okay gens ... merci de regarder cette question. Je me souviens de faire ce qui suit ci-dessous au collège mais j'ai oublié la solution exacte. Tout preneur à diriger dans la bonne direction. J'ai une série temporelle de données (nous utiliserons trois) de N. La série de données est séquentielle dans l'ordre du temps (par exemple obsOne [1] avec obsTwo [1] et obsThree [1])Probabilité série de temps, les données probabilités observées (déjà vu)

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

Étape 2. À partir de la série de données, je crée une série de cases de plage X avec la largeur Z pour chaque série de données. (par exemple d'observation obsOne: bin1 = [< -108, -108] bin2 = [-108, -26] bin3 = [-26, 55] ... binX = [136,> 136]

Étape 3 Maintenant, créez une table avec toutes les combinaisons possibles sur la série de données, donc si j'avais 4 bins et 3 séries de données, toutes les combinaisons totaliseraient 4x4x4 = 64 résultats possibles (par exemple row1 = obsOne bin1 + obsTwo bin1 + obsThree bin1, row2 = obsOne bin1 + obsTwo bin1 + obsThree bin2, ... ligne5 = obsOne bin1 + obsTwo bin1 + obsThree binX, ligne6 = obsOne bin1 + obsTwo bin2 + obsThree bin1, ligne7 = obsOne bin1 + obsTwo bin1 + obsThree bin2, row9 = obsOne bin1 + obsTwo bin2 + obsThree binX, ...)

Étape 4. Je reviens maintenant à la série de données et trouve où chaque ligne de la série de données tombe sur la table et compte combien de temps s une observation le fait. (par exemple obsOne [2] obsTwo [2] obsThree [2] = ligne 30 sur la table, obsOne [X] obsTwo [X] obsThree [X] = ligne 52 sur la table

Étape 5. Je prends seulement la lignes sur la table avec des correspondances positives, compte combien d'observations sont tombées sur cette rangée, plongé par le nombre total d'observations dans les séries de données et cela me donne ma probabilité pour cette gamme sur les données observées. Je ne suis pas un expert en maths, je l'ai fait il y a de nombreuses années, j'ai oublié quelle méthode j'utilisais, c'était beaucoup plus rapide que cette méthode ancienne (à la main), je n'utilisais pas python à l'époque. un autre paquet propriétaire en C++. Je voudrais voir si quelque chose est là qui peut résoudre ce problème avec python (maintenant un magasin python), pourrait toujours étendre, donc il est doux con straint.

+0

Je ne comprends pas vos pas du tout. "créer une série de bacs de la gamme X avec la largeur Z"? "créer une table avec toutes les combinaisons possibles sur la série de données"? La procédure n'est tout simplement pas claire pour moi. Quel est le but de l'analyse? –

+2

je pense que la réputation devrait être accordée automatiquement à toute personne qui lit toute la question, blagues à part pouvez-vous le simplifier et d'abord définir le but, puis expliquer –

Répondre

1

Parlez-vous de quelque chose comme ça?

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) 
Questions connexes