1 votos

Realice la prueba scipy Kolmogorov-Smirnov para la distribución lognormal en GBM

Estoy simulando los precios de los activos para n días utilizando GMB con el esquema de Euler, calcular los rendimientos y luego realizar la prueba de Kolmogorov-Smirnov en los rendimientos simulados. Código para la simulación de GBM :

def simulate_GBM(mu, sig, asset_price, number_of_days):

        delta = 1 / 252
        t = np.arange(0, number_of_days / 252, delta)

        path = np.zeros(len(t))

        path[0] = asset_price

        for i in range(0, len(t) - 1):
            path[i + 1] = path[i] + path[i] * mu * delta + \
                          sig * path[i] * sqrt(delta) * np.random.randn()
            if path[i + 1] < 0:
                print("Zero assset values!")
                path[i + 1] = 1
        return path

Código para Monte-Carlo GBM

def perform_GBM_Monte_Carlo(mu, sig, asset_price, num_sim, number_of_days):

        simulations = np.zeros(num_sim)
        stop_date = number_of_days

        for i in range(0, self.num_sim - 1):
            simulations[i] = (simulate_GBM(mu, sig, asset_price, num_sim, number_of_days)[stop_date - 1])

        return simulations

A continuación, calculo los rendimientos y realizo la prueba

data = perform_GBM_Monte_Carlo(0.05, 0.3, 100, 100000, 252)
returns = np.zeros(len(data))
for i in range(0, len(data) - 1):
    returns[i] = data[i]/100 - 1 # initial asset price is 100

lognorm_params = stats.maxwell.fit(returns)
t_stat, p = stats.kstest(returns, 'lognorm', lognorm_params)

La teoría dice que los rendimientos deben estar distribuidos lognormalmente, pero tengo muy p_value. ¿Es el problema con la simulación GBM o la forma en que realizo la prueba K-S?

0 votos

¿Un valor p muy alto o muy bajo? Por favor, aclárelo.

1voto

No he comprobado tu código, pero ... incluso si tu código es todo correcto (has calculado los rendimientos lognormales), tu prueba no funcionará.

Tiene 100.000 muestras, es un gran número. Con este gran tamaño de muestra (y una enorme potencia estadística), la prueba KS rechazará cualquier cosa. Si no me crees, intenta dibujar 100000 distribución lognormal directamente desde Python, su prueba KS todavía lo rechazará por un valor p muy bajo.

La prueba estadística no tiene sentido para una muestra de gran tamaño, a menos que se desee un nivel de significación muy bajo.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X