|
|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我现在相对一个时间序列作奇异谱分析,代码前半段要用到最小一乘法(LAD)求矩阵 Ar ,随着参数 L 的增大,运行时间也快速增加,请问最后一段LAD代码有没有什么可以改进的地方?谢谢!
- import numpy as np
- import scipy.linalg as linalg
- from statsmodels.regression.quantile_regression import QuantReg
- N = 2328
- Y = np.random.rand(N)
- L = 200 # int in range(2,N/2)
- K = N - L + 1
- Y1 = Y - np.mean(Y)
- Y2 = Y1/np.std(Y1,ddof=1)
- # Embedding
- X = linalg.hankel(Y2,np.zeros(K))
- X = X[:-K+1,:]
- # Singular value decomposition (SVD)
- Xt = X.T
- _,sig,Vt = linalg.svd(X)
- Sig = linalg.diagsvd(sig,L,L)
- r = np.linalg.matrix_rank(X)
- Vt1 = Vt[:r,:]
- Sig1 = Sig[:r,:r]
- B1 = Sig1.dot(Vt1)
- B1t = B1.T
- # Parameter estimation via least absolute deviation
- C = np.zeros((r,L))
- for j in range(L):
- y = Xt[:,j]
- mod = QuantReg(y,B1t)
- res = mod.fit(q = .5)
- C[:,j] = np.array(res.history['params'][0])
- Ar = C.T
复制代码 |
|