[程序问答] 请高手看看,matlab 极大似然估计程序哪出错了 [复制链接]
tiaotiaotang tiaotiaotang 当前离线
当日剩余下载次数23 次阅读权限20论坛币7 个经验330 点威望0 级帖子47精华0学术水平1 点热心指数1 点信用等级1 点在线时间143 小时注册时间2007-12-14最后登录2011-12-12
加关注
0
关注 0
粉丝 高中生
高中生, 积分 47, 距离下一级还需 3 积分论坛币7 个经验330 点威望0 级帖子47精华0学术水平1 点热心指数1 点信用等级1 点在线时间143 小时注册时间2007-12-14最后登录2011-12-12串个门 加好友 打招呼 发消息 电梯直达 楼主
发表于 昨天 10:56 |只看该作者 |倒序浏览 |推荐到门户首页
我做的过程是:
将y.xls导入matlab
将skewtdis_LL.m, my_mle.m加入MATLAB.然后在命令窗口输入
[para,standard_deviation]=my_mle('skewtdis_LL',[5;0.02],y)
结果显示:
??? Error using ==> skewtdis_LL
Too many input arguments.
Error in ==> fminsearch at 195
fv(:,1) = funfcn(x,varargin{:});
Error in ==> my_mle at 3
[para,fv]=fminsearch(fun,para0,[],2,varargin{:});
程序如下:
function LL = skewtdis_LL(theta,x)
% PURPOSE: returns the log-likelihood at x of Hansen's (1994) 'skewed t' distribution
%---------------------------------------------------
% USAGE: LL = skewtdis_LL(x,nu,lambda)
% where: x = a vector of data
% theta = [nu;lambda]
% nu = degrees of freedom parameter
% lambda = skewness parameter
%---------------------------------------------------
% RETURNS:
% a matrix of log-likelihood at each element of x
% --------------------------------------------------
% SEE ALSO: tdis_cdf, tdis_rnd, tdis_inv, tdis_prb, skewtdis_pdf
%---------------------------------------------------
%
% Andrew Patton
%
% 25 June, 2001
% This code was used in:
%
% Patton, Andrew J., 2002, "On the Out-of-Sample
% Importance of Skewness and Asymmetric Dependence for
% Asset Allocation", working paper, Department of Economics,
% University of California, San Diego.
nu = theta(1);
lambda = theta(2);
[T,k] = size(x);
nu = nu(1)*ones(T,1); % can make this time-varying, but needs to be >2
lambda = lambda(1)*ones(T,1); % can make this time-varying, but needs to be in (-1,1)
c = gamma((nu+1)/2)./(sqrt(pi*(nu-2)).*gamma(nu/2));
a = 4*lambda.*c.*((nu-2)./(nu-1));
b = sqrt(1 + 3*lambda.^2 - a.^2);
logc = gammaln((nu+1)/2) - gammaln(nu/2) - 0.5*log(pi*(nu-2));
logb = 0.5*log(1 + 3*lambda.^2 - a.^2);
find1 = (x<(-a./b));
find2 = (x>=(-a./b));
LL1 = logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x+a)./(1-lambda)).^2);
LL2 = logb + logc - (nu+1)/2.*log(1+1./(nu-2).*((b.*x+a)./(1+lambda)).^2);
LL = sum(LL1(find1)) + sum(LL2(find2));
LL = -LL;
function [para,standard_deviation,fv]=my_mle(fun,para0,varargin)
para0=para0(:);
[para,fv]=fminsearch(fun,para0,[],2,varargin{:});
fv=-fv;
d=numericalfirstderivative(fun,para,1,varargin{:});
standard_deviation=sqrt(diag(pinv(d'*d)));
function f=numericalfirstderivative(fun,parameter,varargin)
n=length(parameter);
for i=1:n
a=zeros(n,1);
a(i)=min(parameter(i)*1e-6,1e-5);
y1(:,i)=feval_r(fun,parameter+a,varargin{:});
y2(:,i)=feval_r(fun,parameter-a,varargin{:});
f(:,i)=(y1(:,i)-y2(:,i))/2/a(i);
end
淘宝网购物自动返论坛币
skewtdis_LL.doc
昨天 10:56 上传
21.5 KB
回帖推荐epoh 发表于2楼 查看完整内容
% skewtdis_rnd.m need Ucsd_garch toolbox x=skewtdis_rnd(8.1,-0.09,10000); init=[8.5;-0.2] lb=[0,-1] ub= =fmincon(@(theta)skewtdis_LL(theta,x),init,[],[],[],[],lb,ub) para = 8.3054 -0.0837
分享到: QQ空间 腾讯微博 腾讯朋友 收藏0 评分
回复 使用道具 举报
提升卡
变色卡
epoh epoh 当前离线
当日剩余下载次数29 次阅读权限30论坛币4908 个经验3574 点威望1 级帖子739精华0学术水平1478 点热心指数1483 点信用等级1432 点在线时间2 小时注册时间2006-11-26最后登录2011-12-12
加关注
0
关注 24
粉丝 副教授
副教授, 积分 739, 距离下一级还需 151 积分论坛币4908 个经验3574 点威望1 级帖子739精华0学术水平1478 点热心指数1483 点信用等级1432 点在线时间2 小时注册时间2006-11-26最后登录2011-12-12串个门 加好友 打招呼 发消息 沙发
发表于 昨天 16:05 |只看该作者
% skewtdis_rnd.m need Ucsd_garch toolbox
x=skewtdis_rnd(8.1,-0.09,10000);
init=[8.5;-0.2]
lb=[0,-1]
ub=[Inf,0]
[para,llf,exitflag]=fmincon(@(theta)skewtdis_LL(theta,x),init,[],[],[],[],lb,ub)
para =
8.3054
-0.0837
已有 3 人评分 学术水平 热心指数 信用等级 收起 理由
zhangtao + 5 + 5 + 5 精彩帖子
tiaotiaotang + 1 + 1 热心,水平高
liuxin9023 + 1 分析的有道理
总评分: 学术水平 + 7 热心指数 + 6 信用等级 + 5 查看全部评分
回复 评分 举报
tiaotiaotang tiaotiaotang 当前离线
当日剩余下载次数23 次阅读权限20论坛币7 个经验330 点威望0 级帖子47精华0学术水平1 点热心指数1 点信用等级1 点在线时间143 小时注册时间2007-12-14最后登录2011-12-12
加关注
0
关注 0
粉丝 高中生
高中生, 积分 47, 距离下一级还需 3 积分论坛币7 个经验330 点威望0 级帖子47精华0学术水平1 点热心指数1 点信用等级1 点在线时间143 小时注册时间2007-12-14最后登录2011-12-12串个门 加好友 打招呼 发消息 藤椅
发表于 昨天 22:37 |只看该作者
epoh 发表于 2011-12-11 16:05
% skewtdis_rnd.m need Ucsd_garch toolbox
x=skewtdis_rnd(8.1,-0.09,10000);
init=[8.5;-0.2]太感谢了,解决我的大问题了
本文来自: 人大经济论坛 Matlab及其他计量软件专版 版,详细出处参考:
https://bbs.pinggu.org/forum.php? ... &from^^uid=140024