楼主: chenhao1101
3086 10

极大似然估计 [推广有奖]

  • 2关注
  • 0粉丝

菜鸟

本科生

16%

还不是VIP/贵宾

-

威望
0
论坛币
22 个
通用积分
0.0001
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
426 点
帖子
72
精华
0
在线时间
29 小时
注册时间
2011-5-19
最后登录
2021-8-13

楼主
chenhao1101 发表于 2013-7-15 23:07:25 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
哪位高手能帮我看看,帮我写个极大似然估计的程序,模型和似然函数见附件。因为是新手 ,所以不懂,希望高手能帮帮忙,万分感谢!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:极大似然估计 极大似然 似然估计 万分感谢 似然函数 程序 模型

陈昊

沙发
TaskShare 发表于 2013-7-20 14:40:18
你的附件下载还要收流量币。能贴出来吗?

藤椅
chenhao1101 发表于 2014-2-25 23:12:36
TaskShare 发表于 2013-7-20 14:40
你的附件下载还要收流量币。能贴出来吗?
模型是关于短期利率随机波动的模型
具体形式是:

其中

=
是利率漂移的均值回复项, 是随机波动项,即方差。  服从标准正太分布。


我有利率的日数据,按照这个模型来做最大似然估计。




似然函数:  ,  , 跟上面的定义一样。
陈昊

板凳
chenhao1101 发表于 2014-2-25 23:13:48
chenhao1101 发表于 2014-2-25 23:12
模型是关于短期利率随机波动的模型
具体形式是:
贴出来,看不到公式了,我设置的貌似不用论坛币就可以下载啊!
陈昊

报纸
chenhao1101 发表于 2014-2-25 23:19:54
chenhao1101 发表于 2014-2-25 23:13
贴出来,看不到公式了,我设置的貌似不用论坛币就可以下载啊!
麻烦你了!谢谢
陈昊

地板
nuomin 发表于 2014-2-27 20:03:37
chenhao1101 发表于 2014-2-25 23:12
模型是关于短期利率随机波动的模型
具体形式是:
2013/7/15号的帖子,2014/2/25号还没有解决?

7
chenhao1101 发表于 2014-3-2 22:48:24
nuomin 发表于 2014-2-27 20:03
2013/7/15号的帖子,2014/2/25号还没有解决?
是的啊,一直没人解读!
陈昊

8
nuomin 发表于 2014-3-3 08:35:00
chenhao1101 发表于 2014-3-2 22:48
是的啊,一直没人解读!
我试着算了一下,结果不是太好,不过总比没有强不是?

9
nuomin 发表于 2014-3-3 08:38:07
chenhao1101 发表于 2014-3-2 22:48
是的啊,一直没人解读!
你的模型设定里的vr部分不能保证是大0,为了计算能进行下去,我用vr=abs(...)代替了原来的vr。代码是用R语言写的,没有加各种的错误识别和规避的部分,所以,实际数据如果不事先剔除一些极端值的话会有错误发生。
  1. ##generate time series
  2. set.seed(83)
  3. epsilon <- rnorm(1500,0,1)
  4. rts <- epsilon
  5. vrr <- numeric(1500)
  6. for(i in 2:1500){
  7.     ur <- 0.01+0.06*rts[i-1]+0.05*rts[i-1]^2-0.04*rts[i-1]^3+0.03*rts[i-1]^4-0.02*rts[i-1]^5+0.01/rts[i-1]
  8.     vr <- sqrt(0.0005+0.0006*rts[i-1]+0.0007*rts[i-1]^2)*epsilon[i]
  9.     rts[i]=ur+vr+rts[i-1]
  10.     vrr[i] <- 0.0005+0.0006*rts[i-1]+0.0007*rts[i-1]^2
  11. }
  12. View(rts)
  13. y <- rts[500:1500]
  14. plot(y,type="l")
  15. rm(i,ur,vr)

  16. ##transform data
  17. dy <- diff(y,lag=1,differences=1)
  18. est_data <- as.data.frame(cbind(dy,rep(1,1000),y[-1],y[-1]^2,y[-1]^3,y[-1]^4,y[-1]^5,1/y[-1]))
  19. dimnames(est_data)[[2]] <- c("deltay","slop","y1","y2","y3","y4","y5","y6")
  20. View(est_data)

  21. ##code mle function

  22. attach(est_data)
  23. mlefunc <- function(x){
  24.     sapply(1:11,function(z) assign(paste("x",z,sep=""),x[z],pos=1))
  25.     urf <- x11*slop+x1*y1+x2*y2+x3*y3+x4*y4+x5*y5+x6*y6
  26.     vrf <- abs(x7*slop+x8*y1+x9*y1^x10)
  27.     sum(-log(vrf)-((deltay-urf)^2)/ifelse(vrf<1e-8,1e-4,vrf))
  28. }

  29. mlegrfunc <- function(x){
  30.     sapply(1:11,function(z) assign(paste("x",z,sep=""),x[z],pos=1))
  31.     ugr <- x11*slop+x1*y1+x2*y2+x3*y3+x4*y4+x5*y5+x6*y6
  32.     vgr <- abs(x7*slop+x8*y1+x9*y1^x10)
  33.     c(sum(2*(deltay-ugr)*y1/vgr),
  34.       sum(2*(deltay-ugr)*y2/vgr),
  35.       sum(2*(deltay-ugr)*y3/vgr),
  36.       sum(2*(deltay-ugr)*y4/vgr),
  37.       sum(2*(deltay-ugr)*y5/vgr),
  38.       sum(2*(deltay-ugr)*y6/vgr),
  39.       sum(-1/ifelse(vgr<1e-8,1e-4,vgr)+(deltay-ugr)^2/ifelse(vgr^2<1e-8,1e-4,vgr^2)),
  40.       sum(-y1/ifelse(vgr<1e-8,1e-4,vgr)+y1*(deltay-ugr)^2/ifelse(vgr^2<1e-8,1e-4,vgr^2)),
  41.       sum(-y1^x10/ifelse(vgr<1e-8,1e-4,vgr)+y1^x10*(deltay-ugr)^2/ifelse(vgr^2<1e-8,1e-4,vgr^2)),
  42.       sum(-x9*log(abs(y1))*y1^x10/ifelse(vgr<1e-8,1e-4,vgr)+-x9*log(abs(y1))*y1^x10*(deltay-ugr)^2/ifelse(vgr^2<1e-8,1e-4,vgr^2)),
  43.       sum(2*(deltay-ugr)/vgr)
  44.       )

  45. }

  46. ##optmize mlefunc
  47. sann_out <- optim(rep(0.01,11),mlefunc,method="SANN")
  48. sann_out
  49. bfgs_out <- optim(rep(0.01,11),fn=mlefunc,gr=mlegrfunc,method="BFGS")
  50. bfgs_out
  51. lbfgsb_out <- optim(rep(0.01,11),fn=mlefunc,gr=mlegrfunc,method="L-BFGS-B")
  52. lbfgsb_out
  53. neldermead_out <- optim(rep(0.01,11),fn=mlefunc,gr=mlegrfunc,method="Nelder-Mead")
  54. neldermead_out
  55. cg_out <- optim(rep(0.01,11),fn=mlefunc,gr=mlegrfunc,method="CG")
  56. cg_out
  57. #brent_out <- optim(rep(0.01,11),fn=mlefunc,gr=mlegrfunc,method="Brent")
  58. #brent_out

  59. detach(est_data)
  60. rm(list=ls(pattern="^x"))
  61. save.image("archmle.RData")
复制代码
计算的结果是用Nelder-Mead方法较接近真实值。用梯度函数的optimize方法较其他方法估计结果稳定。
注意:估计结果和真实值不等,非常期待大神能给我指出不足之处
已有 1 人评分论坛币 收起 理由
admin_kefu + 100 热心帮助其他会员

总评分: 论坛币 + 100   查看全部评分

10
chenhao1101 发表于 2014-3-6 13:52:54
nuomin 发表于 2014-3-3 08:38
你的模型设定里的vr部分不能保证是大0,为了计算能进行下去,我用vr=abs(...)代替了原来的vr。代码是用R语 ...
谢谢啊,请问你这个是用r 软件做的么?还有计算的参数估计有没有什么t 统计量什么的!万分感谢啊
陈昊

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2025-12-26 17:25