Digamos que tengo el cálculo del tracking error de una cartera:
¿Cómo puedo determinar las N-obervaciones necesarias para un error de seguimiento estadísticamente significativo? O bien, ¿cómo puedo determinar si el error de seguimiento es estadísticamente significativo?
Un poco de código ilustrativo aquí
import statsmodels.stats.moment_helpers as mh
import pandas as pd
import numpy as np
def generate_correlated_random_return_matrix(annual_means, annual_vols, corr, t_periods, n_samples, period_adjust=12.):
"""
Generates a return matrix from a multivariate random normal distribution.
**Args**:
*annual_means*: An array of mean annual returns.
*annual_vols*: An array of annual vols.
*corr*: Correlation matrix. An example being:
>>> [[1,0],[0,1]]
*t_periods*: How many months would you like to simulate?
n_samples**: How many times do you want to run this simulation?
"""
means = np.divide(annual_means, period_adjust)
vols = np.divide(annual_vols, period_adjust ** .5)
cov = np.asmatrix(mh.corr2cov(corr, vols), float)
sim_array = np.random.multivariate_normal(means, cov, [n_samples, t_periods])
return sim_array
te_tests = generate_correlated_random_return_matrix(annual_means=[.03,.03],annual_vols=[.1,.1],corr=[[1,.8],[.8,1]],t_periods=10000,n_samples=1)
df = pd.DataFrame(te_tests[0])
expanding_te = pd.expanding_std(df[0] - df[1])
mu = (df[0] - df[1]).std()
true_te = (df[0] - df[1]).std()
vol_of_expanding_TE = expanding_te.std()
z_score_of_TE_at_obs_N = ((expanding_te - true_te)/vol_of_expanding_TE).plot()
Este Supongo que me permitiría afirmar que el "TE medido es estadísticamente indistinguible del TRUE
TE", supongo. Sin embargo, no estoy seguro de que lo que estoy utilizando como desviación estándar sea correcto.