如何集成在一个二维高斯相关使用copulapdf ?

9的观点(30天)
你好,
我想估计条件尾巴期望使用高斯相关统计工具箱在R2012b结构。
基本上我想整合如下条件期望的公式:% E [x y | < C] = integrate_inf ^ inf {integrate_inf C ^ {x * f (x, y) dy} dx % f (x, y) =接合部(f (x), f (y)) * f (x) * f (y)我使用几个处理接合部和边际密度分布,连系动词是高斯和边际密度从内核估计。下面的代码复制我的问题。我得到错误消息:
“ρ必须与大小等于平方相关矩阵的列数在美国”
本质上,它没有成功使用处理接合部(当我删除接合部但保持其余的公式,它很好)。是什么错了吗?我通过参数错误时接合部二重积分了吗?
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
%二元高斯相关集成估计E [x y | < C]
% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
负载stockreturns
s1 =股票(:1);
s2 =股票(:,2);
scatterhist (x, y)
% E [x y | < C] = integrate_inf ^ inf {integrate_inf C ^ {x * f (x, y) dy} dx
% f (x, y) =接合部(f (x), f (y)) * f (x) * f (y)
% 2)定义内核密度和CDF x和y的估计
%核密度
fhatx = @ (x) ksdensity (s1, x,“函数”,“pdf”);% f (x)
fhaty = @ (y) ksdensity (s2, y,“函数”,“pdf”);% f (y)
%内核提供:
Fhatx = @ (x) ksdensity (s1, x,“函数”,“提供”);% F (x)
Fhaty = @ (y) ksdensity (s2, y,“函数”,“提供”);% F (y)
% 3)接合部估计
%定义介体空间
U = 0(长度(s1), 2);
U (: 1) = Fhatx (s1);
U (:, 2) = Fhaty (s2);
%估计高斯相关Rhohat并获取相关矩阵
Rhohat = copulafit (“高斯”U);%接合部(F (x), F (y))
% 4)获得有条件的尾巴预期E [x y | < C]
%为调节变量设置阈值
C = -0.02;
%定义被积函数:x *接合部(F (x), F (y)) * F (x) * F (y)
copfun = @ (x, y) copulapdf (“高斯”,(Fhatx (x) Fhaty (y)], Rhohat);
densityfun = @ (x, y) fhatx (x) * fhaty (y);
JointDensity = @ x (x, y)。* copfun (x, y)。* densityfun (x, y);
%计算期望:双集成在整个空间x和y的截断空间
CondTailExpecation = integral2(负无穷,JointDensity +正,负,C);%(乐趣、xmin xmax、ymin ymax)
如果我重新编码高斯相关,我设法使它工作,虽然在这个例子不能收敛。
%如果我做其他重写高斯相关函数的二元案例copfun2:
Rtemp = (Rhohat ^(1)黑眼圈(2));
copfun2 = @ (x, y)(1 /(依据(Rhohat)) ^ (1/2)) * exp ((1/2) * (norminv (Fhatx (x))。* (norminv (Fhatx (x)) * Rtemp (1,1) + norminv (Fhaty (y)) * Rtemp (2,1)) + norminv (Fhaty (y))。* (norminv (Fhatx (x)) * Rtemp (1、2) + norminv (Fhaty (y)) * Rtemp (2, 2))));
JointDensity2 = @ x (x, y)。* copfun2 (x, y)。* densityfun (x, y);
q = integral2 (JointDensity2、负无穷到正无穷,无穷,C);%(乐趣、xmin xmax、ymin ymax)
提前感谢你的帮助。

答案(2)

Yakup
Yakup 2014年12月13日
第一个错误必须对你的相关系数ρ,这可以是一个标量变量当相关函数的大小等于两个但当U大于2的大小,你需要插入一个与所有方差协方差矩阵等于1和对角线组成的相关变量。也许
copulafit
是一个函数,返回一个向量,而不是一个矩阵,你必须投入
copulapdf /提供
功能。我可能是错的,但希望这有助于。

迈克何西阿书
迈克何西阿书 2014年12月13日
你叫integral2之前,确保你JointDensity2函数满足向量化的要求。
x =兰德(2、3);%或其他有意义的值
y =兰德(2、3);%或其他有意义的值
z1 = JointDensity2 (x, y);
z2 = arrayfun (JointDensity2, x, y);
isequal (z1 (z2)
如果这些值不相等,或函数的错误,首先解决这个问题。如果我是你,我可能直接到arrayfun版本
JointDensity2v = @ (x, y) arrayfun (JointDensity2, x, y);
并通过integral2。这样,只需要确保JointDensity2与标量输入。你只需要让它使用数组输入如果你想加快速度。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!