Advertisement
Guest User

Untitled

a guest
Sep 22nd, 2018
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.65 KB | None | 0 0
  1. import numpy as np
  2. from scipy.optimize import fsolve
  3. from functools import lru_cache
  4.  
  5.  
  6. class AutoRegression(object):
  7.     def __init__(self, process, m):
  8.         self.process = process
  9.         self.m = m
  10.         factors = list(fsolve(self.equations_system, np.ones(self.m + 1), factor=0.1))
  11.         self.norm = np.linalg.norm(self.equations_system(factors))
  12.         self.alpha = np.sqrt(factors.pop())
  13.         self.betas = np.array(factors)
  14.  
  15.     @lru_cache(maxsize=None)
  16.     def normalized_correlation(self, k):
  17.         k = abs(k)
  18.         if k <= self.m:
  19.             return self.process.normalized_correlation(k)
  20.         else:
  21.             ncf = 0
  22.             for i in range(1, self.m + 1):
  23.                 ncf += self.betas[i - 1] * self.normalized_correlation(k - i)
  24.             return ncf
  25.  
  26.     @lru_cache(maxsize=None)
  27.     def std(self, count=10):
  28.         result = 0
  29.         for i in range(1, count + 1):
  30.             result += (self.normalized_correlation(i) - self.process.normalized_correlation(i)) ** 2
  31.         return result
  32.  
  33.     def equations_system(self, beta):
  34.         result = []
  35.         temp = float()
  36.  
  37.         for i in range(1, self.m + 1):
  38.             temp += beta[i - 1] * self.process.correlation_function(i)
  39.  
  40.         temp += beta[len(beta) - 1]
  41.         temp -= self.process.correlation_function(0)
  42.         result.append(temp)
  43.  
  44.         for i in range(1, self.m + 1):
  45.             temp = float()
  46.             for j in range(1, self.m + 1):
  47.                 temp += beta[j - 1] * self.process.correlation_function(i - j)
  48.             temp -= self.process.correlation_function(i)
  49.             result.append(temp)
  50.         return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement