楼主: jcom_wu
16706 32

[讨论]请教时间序列预测超高手:ma和arma模型怎么编程(cjava)求p,q还有模型参数。急救 [推广有奖]

  • 0关注
  • 0粉丝

小学生

57%

还不是VIP/贵宾

-

威望
0
论坛币
463 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
54 点
帖子
15
精华
0
在线时间
0 小时
注册时间
2005-7-19
最后登录
2005-9-7

楼主
jcom_wu 发表于 2005-7-27 16:57:00 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币

请教时间序列预测超高手:ma和arma模型怎么编程(c/java)求p,q还有模型参数。

我已经用java实现了ar模型预测,包括acf,pacf,AIC求阶等。但是ma模型求q不好用AIC求,还有求ma的参数要用到迭代法,程序不好写,如果用最小二乘法,又是一个非线性的最小二乘法,还是要迭代,我用程序搞不定。arma模型也是如此。另外,即使求出了模型,在预测的时候也不好预测。比如ma或者arma模型,求出来参数后怎么应用预测也是个问题,请教超高手回答。不要告诉我用什么matlab,eviews,sas,spss这些软件。我现在是要实现这些软件相同的功能。

急救啊,跪求,谢谢了!

二维码

扫码加我 拉你入群

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

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

关键词:时间序列预测 arma模型 cjava 怎么编程 时间序列 模型 序列 ARMA 参数 cjava

回帖推荐

NetDagger 发表于6楼  查看完整内容

以下是引用jcom_wu在2005-7-27 16:57:39的发言: 请教时间序列预测超高手:ma和arma模型怎么编程(c/java)求p,q还有模型参数。 我已经用java实现了ar模型预测,包括acf,pacf,AIC求阶等。但是ma模型求q不好用AIC求,还有求ma的参数要用到迭代法,程序不好写,如果用最小二乘法,又是一个非线性的最小二乘法,还是要迭代,我用程序搞不定。arma模型也是如此。另外,即使求出了模型,在预测的时候也不好预测。比如ma或者arma模型 ...

本帖被以下文库推荐

沙发
jcom_wu 发表于 2005-7-27 17:00:00

请不要将原理或者说什么什么方法,我要的实际编程应用。另外我已经用java实现了ar模型,大家只要输入历史数据,

程序就直接算法预测数据。不需要用户任何其他操作,经检验效果不错,如果大家需要我可以发给你们。

藤椅
admin 企业认证  发表于 2005-7-27 17:11:00
请尽量给出技术细节和难点,否则很难让人回答

板凳
ffff3434 发表于 2005-7-27 17:31:00

同意楼上的话。

个人感觉,程序看的首先看的是算法的精确度,同时兼顾性能。ma和arma模型的底层还是ols ,当然最好能写出一般意义的GLS程序作为内核就好了。迭代算法很经典,Java应该有相应的机制啊,不知道Java有没有矩阵的算法库。预测怎么可能有难度的啊,奇怪。。。。

简单

报纸
fj102 发表于 2005-7-27 19:42:00

There are two ways

First, use Maximum Likelihood estimation which can sort your problem

Second, You can transfer from MA to AR, keep your MA parameter and truncate the infinite order to some acceptable order

地板
NetDagger 发表于 2005-7-28 01:53:00
以下是引用jcom_wu在2005-7-27 16:57:39的发言:

请教时间序列预测超高手:ma和arma模型怎么编程(c/java)求p,q还有模型参数。

我已经用java实现了ar模型预测,包括acf,pacf,AIC求阶等。但是ma模型求q不好用AIC求,还有求ma的参数要用到迭代法,程序不好写,如果用最小二乘法,又是一个非线性的最小二乘法,还是要迭代,我用程序搞不定。arma模型也是如此。另外,即使求出了模型,在预测的时候也不好预测。比如ma或者arma模型,求出来参数后怎么应用预测也是个问题,请教超高手回答。不要告诉我用什么matlab,eviews,sas,spss这些软件。我现在是要实现这些软件相同的功能。

急救啊,跪求,谢谢了!

我用VB也实现了AR(说白了就是OLS),同样发现迭代是一件很麻烦的事,所以就放弃了.

后来转向VB+ADO+SAS编程,什么都很快搞定,反而少了很多乐趣

不过后来想,如果真用VB或Java来做这个程序那么这几个问题是很难克服的:

1.速度.真正的应用中跑几万个obs是很平常的事,用VB和Java很难达到满意的速度,特别我们用的算法一般都是没有经过优化的.(我用SAS做forecast都感到略有吃力)

2.精度.毕竟VB和Java不是科学计算语言,所以精度很成问题.我把所有变量设为double然后做OLS,结果和SAS还是有一定的区别

3.可用性.这年头SAS,SPSS,EViews这么普遍,根本没人用咱们自己设计的程序.据个例子.上面我们实现的AR回归在Excel里都很用以实现,就算SAS里也就三行代码. (对于个人开发者来说现在就剩下一条路:专一+简单.比如说做ARIMA,那我别的功能都不做就做ARIMA,让用户按一个按钮就能建一个合适的ARIMA模型,其他的他什么都不用管.)

以上是我的一点看法,不知是否合理

已有 1 人评分经验 论坛币 收起 理由
胖胖小龟宝 + 10 + 10 热心帮助其他会员

总评分: 经验 + 10  论坛币 + 10   查看全部评分

7
jcom_wu 发表于 2005-7-28 09:50:00

我的程序能自动判别是用 ar,ma还是arma,还包括自动差分等等数据预处理,用户只要输入历史数据就可以了,输出就是预测数据。

另外我不用考虑时间和精度的问题,预测的时候程序反映时间就是1个小时也是可以接受的,只要能估测出大致范围就可以,误差10%都可以接受。关键是用户不需要任何操作,不懂任何统计方面的知识。不需要参与,只要输入历史数据就可以预测这才是用户的要求,就是傻瓜式预测。

[此贴子已经被作者于2005-7-28 10:13:49编辑过]

8
jcom_wu 发表于 2005-7-28 10:08:00

1)比如用AIC法定ma或者ARMA模型的阶,如果我只有历史数据X1,X2.....Xn,请问AIC(p,q)=log(E(k)2)+2(p+1+1)/N公式中,这个残差方差E(k)2怎么求?

2)迭代法求ma的参数时候,我的程序运行了1天,发现还是不能达到迭代精度。一下是我的程序:

// MA模式参数估计,采用线性迭代法,//F(p)X(t)=f(q)A(t)假设f(q)可逆 private double[] modelParameterEstimation(double[] myacv,int ms){ double[] xpara=new double[ms]; int xlen=myacv.length ; double[] xacf=new double[xlen]; double tmp=0.0; for(int i=0;i<xlen;i++) xacf=myacv/myacv[0]; //当模型阶为1或者2时直接求解 if(ms==1) { xpara[0]=2*xacf[1]/(1+Math.sqrt(1-4*xacf[1])); return xpara; } if(ms==2) { tmp=0.5 - 1/(4*xacf[2]) - (1/(2*xacf[2]))*Math.sqrt((xacf[2]+0.5)*(xacf[2]+0.5)-xacf[1]*xacf[1]); if(xacf[2]>0){ xpara[1]=tmp-Math.sqrt( tmp*tmp-1); }else{ xpara[1]=tmp+Math.sqrt( tmp*tmp-1); } xpara[0]=xacf[1]*xpara[1]/(xacf[2]*(1+xpara[1])); return xpara; } //直接求解结束 //线性迭代法 boolean flag=true;//循环判断条件 double Nvalue=0.0001;//迭代精度 double Ea2=0.0;//残差方差 double oldEa2=0.0;//迭代时候上一次残差方差 double[] oldPara=new double[ms];//迭代时候上一次参数 //赋初值 Ea2=myacv[0]; for(int i=0;i<ms;i++) xpara=0; oldEa2=Ea2; for(int i=0;i<ms;i++) oldPara=xpara; do { //开始迭代 for(int r=0;r<ms;r++){ tmp=0.0; for(int i=1;i<ms-r;i++) tmp += oldPara[i-1]*oldPara[i+r]; xpara[r]=myacv[r+1]/oldEa2+tmp; } tmp=0.0; for(int i=0;i<ms;i++) tmp+=xpara*xpara; Ea2=myacv[0]/(1+tmp); //判断是否满足精度小于@Nvalue for(int i=0;i<ms;i++){ if(Math.abs( xpara-oldPara)>Nvalue) flag=false; } if(Math.abs( Ea2-oldEa2)>Nvalue) flag=false; //更新 for(int i=0;i<ms;i++) oldPara=xpara; oldEa2=Ea2; }while(!flag); return xpara; }

3)ma,arma模型求参数用最小二乘法迭代的时候也是如此。

9
awing 发表于 2005-7-28 10:30:00
说实话,我是不看好不需要统计知识,就出结果的傻瓜式软件的。

10
jcom_wu 发表于 2005-7-28 10:39:00

?

[此贴子已经被作者于2005-7-28 10:43:16编辑过]

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

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