Changeset 146

Show
Ignore:
Timestamp:
04/11/08 00:47:57 (8 months ago)
Author:
edsuom
Message:

Unit tested Model.draw_h

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • projects/AsynCluster/trunk/svpmc/model.py

    r145 r146  
    289289         
    290290        'b',    # Lag-1 cross-correlation for VAR of returns (p x p) 
    291          
    292         'c',    # Volatility/innovation shock correlations (p x 1) 
     291 
     292        # The attribute name 'c' is used by the Weaver inline method 
    293293         
    294294        'd',    # Volatility offset (p x 1) 
     
    299299        'f',    # Volatility shock concurrent correlations (vector with 
    300300                # r01, r02,..., r0p, r12,..., r1p,...) 
     301 
     302        #--- TODO ---------------- 
     303        'g',    # Volatility/innovation shock correlations (p x 1) 
     304        #------------------------- 
     305 
    301306        ] 
    302307 
     
    367372        unnecessary. 
    368373        """ 
    369         for k, value in enumerate(paramSequence): 
    370             setattr(self, self.paramNames[k], value) 
     374        self.setParamSequence(paramSequence) 
    371375        # Obtain innovations as residuals of the reversed VAR(1) 
    372376        x = self.var.reverse(self.a, self.b) 
  • projects/AsynCluster/trunk/svpmc/sample.py

    r145 r146  
    8080        self.x = s.randn(rows, cols) 
    8181        self.p = s.zeros_like(self.x) 
    82         self.r = s.empty_like(self.x) 
    8382     
    8483    def step(self, wiggle): 
     
    9493    def _covarMatrix(self, correlations): 
    9594        """ 
    96         Returns a covariance matrix from the supplied vector o
     95        Returns a covariance matrix from the supplied vector or sequence o
    9796        I{correlations}, in the form used by L{correlate}. 
    9897        """ 
     
    108107    def correlate(self, correlations=None): 
    109108        """ 
    110         Returns a version of my current values correlated along the first axis, given 
    111         the supplied vector of concurrent I{correlations}, the elements of 
    112         which are in the following form:: 
     109        Returns a version of my current values correlated along the first axis, 
     110        given the supplied vector or sequence of concurrent I{correlations}, 
     111        the elements of which are in the following form:: 
    113112 
    114113            [r01, r02,..., r0n, r12,..., r1n,..] 
  • projects/AsynCluster/trunk/svpmc/test/test_model.py

    r145 r146  
    2929 
    3030import model 
    31 from tseries import TimeSeries 
    3231import util 
    3332 
     
    3534VERBOSE = True 
    3635 
    37 PRICES = """ 
    38 #----------------------------------------- 
    39 2000/01 100.0 
    40 2000/02 101.0 
    41 2000/03 102.0 
    42 2000/04 103.5 
    43 2000/05 104.5 
    44 2000/06 106.0 
    45 2000/07 107.5 
    46 2000/08 109.0 
    47 2000/09 111.0 
    48 2000/10 113.5 
    49 2000/11 116.0 
    50 """ 
    51  
    52 EARNINGS = """ 
    53 #---------------------------------------- 
    54 2000/01 1.0 
    55 2000/02 1.0 
    56 2000/03 1.0 
    57 2000/04 1.5 
    58 2000/05 1.5 
    59 2000/06 2.0 
    60 2000/07 2.0 
    61 2000/08 2.0 
    62 2000/09 2.0 
    63 2000/10 2.5 
    64 2000/11 2.5 
    65 """ 
    6636 
    6737class Mock_Model(params.Parameterized, util.Mock): 
     
    163133class Test_VAR(util.TestCase): 
    164134    def setUp(self): 
    165         tsList = [ 
    166             TimeSeries('prices', PRICES), TimeSeries('earnings', EARNINGS)] 
    167135        self.y = s.row_stack([ 
    168             tsList[k].intersect(tsList[1-k])() for k in (0,1)]) 
     136            util.TS_LIST[k].intersect(util.TS_LIST[1-k])() for k in (0,1)]) 
    169137        self.var = model.VAR(self.y) 
    170138 
    171     def _plot(self, *vars): 
    172         if VERBOSE: 
    173             N = len(vars) 
    174             fig = self.fig 
    175             for k, var in enumerate(vars): 
    176                 sp = fig.add_subplot(100*N+k+11) 
    177                 sp.plot(var) 
    178                 sp.grid(True) 
    179      
    180139    def test_forward_indep_drift(self): 
    181140        n = 1000 
     
    253212        self.var.y = _y 
    254213 
     214 
     215class Test_Model_draw_h(util.TestCase): 
     216    def setUp(self): 
     217        self.model = model.Model(tsList=util.TS_LIST) 
     218 
     219    def test_indep_offset(self): 
     220        n = self.model.n 
     221        self.model.d = s.array([1.0, 1.0]) 
     222        self.model.f = [0.0] 
     223        for j in xrange(10): 
     224            e1, e2 = 0.8*s.rand(2) + 0.1 
     225            self.model.e = s.array([[e1, 0.0], [0.0, e2]]) 
     226            for k in xrange(20): 
     227                h = self.model.draw_h(0.5) 
     228            for m, em in enumerate((e1, e2)): 
     229                ratio = h[m,n/2:].mean() /  ( 1.0/(1-em) ) 
     230                self.failUnlessAlmostEqual(ratio, 1.0, 0) 
     231         
     232    def test_indep_shocks(self): 
     233        n = self.model.n 
     234        e1, e2 = 0.95, 0.8 
     235        self.model.d = s.array([0.0, 0.0]) 
     236        self.model.e = s.array([[e1, 0.0], [0.0, e2]]) 
     237        self.model.f = [0.0] 
     238        for j in xrange(20): 
     239            h = self.model.draw_h(0.5) 
     240        # IIR filtering 
     241        fig = self.fig 
     242        for k, ek in enumerate((e1, e2)): 
     243            sp = fig.add_subplot(221 + 2*k) 
     244            pxx = sp.psd(h[k,n/2:], NFFT=32)[0] 
     245            ratio = ( pxx[-1]/pxx[0] ) / ( 2*((1-ek)/(1+ek))**2 ) 
     246            self.failUnless(ratio > 0.4, "Too little rolloff in PSD") 
     247            self.failUnless(ratio < 1.5, "Too much rolloff in PSD") 
     248            sp = fig.add_subplot(221 + 2*k + 1) 
     249            sp.plot(h[k,:]) 
     250        # Uncorrelated 
     251        r = stats.spearmanr(h[0,:], h[1,:])[0] 
     252        self.failUnless(abs(r) < 0.1, "Doesn't appear uncorrelated") 
     253 
     254    def _check_xcorr(self, dPeak): 
     255        n = self.model.n 
     256        for j in xrange(20): 
     257            h = self.model.draw_h(0.5) 
     258        # Correlation 
     259        nd = 6 
     260        d = s.arange(-nd, nd+1) 
     261        r = s.array( 
     262            [s.correlate(h[0,nd+lag:n-nd+lag], h[1,nd:n-nd])[0] for lag in d]) 
     263        lagMetric = r[nd+dPeak] / \ 
     264                    max(s.concatenate([r[:nd+dPeak], r[nd+dPeak:]])) 
     265        self.failUnless(lagMetric < 10) 
     266        if VERBOSE: 
     267            sp = self.fig.add_subplot(111) 
     268            sp.plot(d, r, 'o-') 
     269            sp.grid(True) 
     270     
     271    def test_xcorr_var(self): 
     272        self.model.d = s.array([0.0, 0.0]) 
     273        self.model.e = s.array([[0.0, 0.5], [0.0, 0.0]]) 
     274        self.model.f = [0.0] 
     275        self._check_xcorr(1) 
     276 
     277    def test_xcorr_concurrent(self): 
     278        self.model.d = s.array([0.0, 0.0]) 
     279        self.model.e = s.array([[0.0, 0.0], [0.0, 0.0]]) 
     280        self.model.f = [0.5] 
     281        self._check_xcorr(0) 
  • projects/AsynCluster/trunk/svpmc/test/util.py

    r140 r146  
    2929from twisted.spread import pb 
    3030from twisted.cred import checkers 
    31  
     31from twisted.trial import unittest 
    3232from twisted_goodies.pybywire import pack, params 
    3333 
    34 from twisted.trial import unittest 
     34from tseries import TimeSeries 
    3535 
    3636 
    3737DELAY = 0.2 
     38 
     39TS_LIST = [ 
     40    TimeSeries(os.path.join(os.path.dirname(__file__), "%s-us.dat" % x)).v2r() 
     41    for x in ('dm', 'jy')] 
     42 
    3843 
    3944def deferToLater(*args, **kw): 
     
    317322            comparator(thisCall[2], expectedKw, msg) 
    318323 
    319  
    320 class Gaussian_Data(params.Parameterized): 
    321     """ 
    322     I am a callable, parameterized object that provides a 1-D array of Gaussian 
    323     samples with exactly zero mean and unit variance. 
    324     """ 
    325     data = [ 
    326         0.47210602,  0.53954989,  0.11056636,  0.78448853,  0.72493973, 
    327         -0.61017366, -1.08527001, -1.14962379,  1.22065769, -1.20070299, 
    328         0.15747429, -0.53169548, -1.28944276,  1.66884228, -1.18111297, 
    329         -0.66221219,  0.43130272, -0.6695872 ,  0.77229351,  0.43595826, 
    330         0.20332244, -0.60912888, -0.93391888,  1.54423446,  0.6467643 , 
    331         0.07979134,  0.08489687,  0.19307692,  0.54114449, -1.12417363, 
    332         0.45522346,  2.26259341, -1.47349493,  0.32408789, -0.1817868 , 
    333         1.65771416,  0.62179859,  0.62376424, -2.71828368, -0.163777  , 
    334         -0.48382479, -0.73363316, -0.36455082, -0.06567116,  0.32985484, 
    335         -0.59618248,  0.55983551,  0.85710617, -0.76486722, -0.49189402, 
    336         0.41233178, -0.60864762, -2.59293827,  1.01722785, -1.0107013 , 
    337         0.28599233,  0.81957655,  1.32231551, -1.42416657,  1.12010458, 
    338         0.81483464,  0.46563641, -0.05342029, -1.38340135,  0.21019331, 
    339         -0.33160266,  0.2196594 ,  0.0153154 ,  0.48381794,  1.24937546, 
    340         -0.90681277, -1.68491473, -2.01728996, -0.47228165,  0.85829959, 
    341         0.12739956,  1.1663271 , -0.57310983, -1.39884996, -1.60281113, 
    342         0.40561729,  0.21864954, -1.68730849,  2.32830773,  0.55083324, 
    343         -0.41138062, -0.6262407 ,  1.81712759, -0.17009909,  0.20751773, 
    344         -0.14603467,  0.3353204 ,  0.36965433,  0.31862055,  1.66005576, 
    345         0.07863021,  1.43507507,  1.3970233 , -1.48183233, -0.34537607] 
    346  
    347     def __call__(self): 
    348         return s.array(self.data) 
    349  
    350  
    351 def gaussianSamples(): 
    352     string = "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" 
    353     return pack.Unpacker(string, decode=True)() 
    354  
    355