相關矩陣 - NaN 值
我正在嘗試創建一個特定行業(消費品行業)的相關矩陣,其中包含 2020 年跨多個證券交易所的大約 15 種證券。
但是,由於假期,例如瑞士的 Berchtolds 日(2020 年 1 月 2 日)、香港的農曆新年(2020 年 1 月 27 日/28 日)、感恩節(2020 年 11 月 26 日),我的數據框中有很多 NaN 值)… 或美國總統日(2020 年 2 月 17 日)、意大利聖誕節(2020 年 12 月 24 日)和瑞士/意大利新年(2020 年 12 月 31 日)。
在 python 上,log_returns = np.log(1 + data.pct_change())
當我查看 log_returns.head() 時,它似乎為 2020 年 1 月 2 日和 3 日的 Berchtolds Day 提供了 NaN,因為它沒有前一天。在 log_returns.tail() 中,Panda 通過寫入 0.000000 直接排除了其他假期的 NaN 值。
我應該擔心這個相關矩陣的有效性嗎?或者找到所有的 NaN 值並刪除它們以確定?
可選問題:我是否應該將每日收益年化 * 250(交易日)?或者 * 250 – 減去各種假期?:)
先感謝您,
您最大的問題是計算收益的成對相關性。
為簡單起見,假設您有 2 個資產 A 和 B。對於資產 A,您有所有 3 天的收盤價 $ t_0 $ , $ t_1 $ , 和 $ t_2 $ . 如果你也有股息,你計算 A 的總回報 $ t_0 $ 至 $ t_1 $ :
$$ R_{A,t_0,t_1}=\frac{P_{A,t_1}+D_{A,t_1}-P_{A,t_0}}{P_{A,t_0}} $$.
同樣 $ R_{A,t_1,t_2} $ .
但是對於資產 B,您的收盤價為 $ t_0 $ 和 $ t_2 $ , 不是為了 $ t_1 $ . 你做什麼工作?
我實際上已經看到人們採用以下所有方法:
- 如果 B 有一個 ADR,其價格為 $ t_1 $ 是可用的,並且您的外匯匯率為 $ t_1 $ ,那麼您可以回退底層證券 B 的價格。(您應該測試基礎 B 和 ADR 在兩者都可用的其他日子是否同步。)
- 對缺失日的 B 價格進行插值,例如線性插值: $ P_{B,t_1}=\frac{P_{B,t_0}+P_{B,t_2}}{2} $ .
- 假使,假設 $ R_{B,t_0,t_1}=R_{B,t_1,t_2}=\sqrt{1+R_{B,t_0,t_2}}-1 $
這些都是似是而非的猜測,但你不知道如果 B 有一個價格是否真的會發生 $ t_1 $ . 如果 A 在這兩天非常不穩定,那麼 $ R_{A,t_0,t_1} $ 與 $ R_{A,t_1,t_2} $ ,然後猜測 B 的行為不同會引入您並不真正擁有的資訊。
- 分配 $ R_{B,t_0,t_2} $ 進入 $ R_{B,t_0,t_1} $ 和 $ R_{B,t_1,t_2} $ 成正比 $ R_{A,t_0,t_1} $ 和 $ R_{A,t_1,t_2} $ 或其他一些資產的回報。這也是一個合理的猜測……但如果實際上 B 會做其他事情呢?
- 假使,假設 $ P_{B,t_1}=P_{B,t_0} $ (IE $ R_{B,t_0,t_1}=0 $ , $ R_{B,t_1,t_2}=R_{B,t_0,t_2} $ ), 或者那個 $ P_{B,t_1}=P_{B,t_2} $ . 這些猜測看起來更不可信。不幸的是,它們也是最容易在電腦上程式的。
所以如果我們不想走化妝的路線 $ P_{B,t_1} $ 我們不知道,而是少用 1 天 $ A $ , 我們能做什麼?
最簡單的程式方法是“扔掉” $ R_{A,t_0,t_1} $ , 並關聯 $ R_{A,t_1,t_2} $ (一天)與 $ R_{B,t_0,t_2} $ (兩天)。但是,最好使用 $ R_{A,t_0,t_2}=(1+R_{A,t_0,t_1})(1+R_{A,t_1,t_2})-1 $ ,即忽略 $ P_{A,t_1} $ 並比較同一時期的已知回報。最後一個是我最喜歡的。
作為一種特殊情況,如果您在系列開始時沒有 B 的價格,那麼您別無選擇,只能在 B 的收益可用之日之前忽略 A 的收益。
您的相關矩陣不能保證是正定的。由於使用一系列不同的長度,您可以獲得小的負特徵值。如果負特徵值太大,那麼您可能需要從矩陣中排除一些資產。如果它們不是太大,有辦法“修復”矩陣,使其是正定的,並且與原始矩陣沒有太大區別。
此外,您應該考慮這樣一個事實,即您正在查看一天中不同時間發生的收盤,即使它們來自同一天。您可能對此無能為力,但尋找具有相同時間戳的日內價格將是一種改進。