Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy.optimize import fsolve
- from functools import lru_cache
- class AutoRegression(object):
- def __init__(self, process, m):
- self.process = process
- self.m = m
- factors = list(fsolve(self.equations_system, np.ones(self.m + 1), factor=0.1))
- self.norm = np.linalg.norm(self.equations_system(factors))
- self.alpha = np.sqrt(factors.pop())
- self.betas = np.array(factors)
- @lru_cache(maxsize=None)
- def normalized_correlation(self, k):
- k = abs(k)
- if k <= self.m:
- return self.process.normalized_correlation(k)
- else:
- ncf = 0
- for i in range(1, self.m + 1):
- ncf += self.betas[i - 1] * self.normalized_correlation(k - i)
- return ncf
- @lru_cache(maxsize=None)
- def std(self, count=10):
- result = 0
- for i in range(1, count + 1):
- result += (self.normalized_correlation(i) - self.process.normalized_correlation(i)) ** 2
- return result
- def equations_system(self, beta):
- result = []
- temp = float()
- for i in range(1, self.m + 1):
- temp += beta[i - 1] * self.process.correlation_function(i)
- temp += beta[len(beta) - 1]
- temp -= self.process.correlation_function(0)
- result.append(temp)
- for i in range(1, self.m + 1):
- temp = float()
- for j in range(1, self.m + 1):
- temp += beta[j - 1] * self.process.correlation_function(i - j)
- temp -= self.process.correlation_function(i)
- result.append(temp)
- return result
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement