布萊克斯科爾斯
對 GBM 中的對數正態分佈執行 scipy Kolmogorov-Smirnov 檢驗
我正在使用帶有歐拉方案的 GMB 模擬 n 天的資產價格,計算回報,然後對模擬回報進行 Kolmogorov-Smirnov 檢驗。模擬 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
蒙地卡羅 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
然後我計算回報並執行測試
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)
理論說回報必須是對數正態分佈的,但我有非常 p_value。是 GBM 模擬的問題還是我執行 KS 測試的方式有問題?
我沒有檢查你的程式碼,但是……即使你的程式碼都是正確的(你已經計算了對數正態返回),你的測試也不會工作。
你有 100000 個樣本,這是一個很大的數字。有了這麼大的樣本量(和巨大的統計能力),KS-test 將拒絕任何東西。如果您不相信我,請嘗試直接從 Python 繪製 100000 對數正態分佈,您的 KS-test 仍然會以非常低的 p 值拒絕您。
除非您想要非常低的顯著性水平,否則統計檢驗對於大樣本量是沒有意義的。