程式
如何從matlab中的copula中採樣
我有兩個隨機變數(比如 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,'.')