程式

如何從matlab中的copula中採樣

  • September 14, 2019

我有兩個隨機變數(比如 X 和 Y)。這些 rv 中的每一個都由它們的 CDF(CDF_X 和 CDF_Y)定義。這些 CDF 是憑經驗獲得的,因此它們是“階梯”圖。我還有一個表示 X 和 Y 之間關係的 copula C。這個 copula 是通過核估計器獲得的。

我想從 X 和 Y 的二元分佈中採樣(比如 10 個點 (X,Y))(即尊重 C 施加的依賴關係)。

如何在 Matlab 或 R 中進行這樣的實現?我更喜歡Matlab。

假設你有 copula $ C(u_1,u_2) $ , 那麼你可以計算條件 copula

$$ c_{u_1}(u_2)=\frac{\partial C(u_1,u_2)}{\partial u_1} ; . $$ 現在,您可以生成一對獨立的均勻分佈的隨機值 $ (U,V) $ . 假設一個特定的現實是 $ (u,v) $ . 然後這對

$$ (u,c_u^{-1}(v)) $$ 將根據 copula 進行分配。您只需要應用逆 CDF 就可以讓它們像這樣分佈 $ (X,Y) $ . 說 $ X\sim F_X $ 和 $ Y\sim F_Y $ , 然後

$$ (F_X^{-1}(u),F_Y^{-1}(c_u^{-1}(v))) $$ 是你最終需要做的。

Matlab 中 Clayton copula 的範例

%% Simulations of Clayton copulas using conditional cdf

%Example for theta=4
n=3000;
theta=5;
u=rand(1,n);
y=rand(1,n);
v=((y.^(1/(1+theta)).*u).^(-theta)+1-u.^(-theta)).^(-1/theta);

x1=norminv(u);
x2=norminv(v);

plot(x1,x2,'.')

引用自:https://quant.stackexchange.com/questions/38157