概率时间序列,观测数据概率(似曾相识)

时间:2009-06-20 14:16:22

标签: python probability time-series data-analysis

好的伙计们......感谢您查看这个问题。我记得在大学里面做了以下这些,但是我忘记了确切的解决方案。任何采取正确方向的人都会采取行动。

我有一个N的时间序列数据(我们将使用三个)。数据序列按时间顺序排列(例如,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范围箱。 (例如观察障碍: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商店),可以随时扩展,所以它是软约束。

1 个答案:

答案 0 :(得分: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)