楼主: 夏夏夏天
11342 1

[问答] 程序报错但是找不到错误,求大神帮忙! [推广有奖]

  • 0关注
  • 0粉丝

小学生

28%

还不是VIP/贵宾

-

威望
0
论坛币
8 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
119 点
帖子
0
精华
0
在线时间
11 小时
注册时间
2014-10-21
最后登录
2018-2-8

楼主
夏夏夏天 学生认证  发表于 2015-12-6 17:24:47 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
generate_data=function(T,theta.true){
epsilon=rnorm(T,0,theta.true[1])
y=epsilon
y[1]=epsilon[1]
for(t in 2:T)
   {y[t]=theta.true[2]*epsilon[t-1]+epsilon[t]}
return(y)}

L=function(data,x1,x2){
dt=0
for(t in 1:T)
{dt=dt+log(x1*(1-x2^(2*t+2))/(1-x2^(2*t)))}
Y=rep(0,T)
Y[1]=data[1]
for(t in 2:T)
{Y[t]=data[t]-x2*(1-x2^(2*t-2))*Y[t-1]/(1-x2^(2*t))}
Sum=data[1]^2/((1+x2^2)*x1)
for(t in 2:T)
{Sum=Sum+Y[t]^2*(1-x2^(2*t))/(x1*(1-x2^(2*t+2)))}
l=-0.5*dt-0.5*Sum
return(l)
}

likeli=function(data,f,j){
deta=1e-5
g1=(L(f+deta,j)-L(f,j))/deta
g2=(L(f,j+deta)-L(f,j))/deta
g=c(g1,g2)
return(g)}

NR=function(data,epsilon){
A=diag(2)
theta.temp=c(0.2,0.6)
Gtemp=likeli(data,theta.temp[1],theta.temp[2])  
for(iter in 1:T){
theta=theta.temp+A%*%Gtemp
G=likeli(data,theta[1],theta[2])
A=A-(A%*%(G-Gtemp)%*%t(G-Gtemp)%*%A)/(t(G-Gtemp)%*%A%*%(G-Gtemp))-((theta-theta.temp)%*%t(theta-theta.temp))/((t(G-Gtemp)%*%(theta-theta.temp))
dif=max(abs(theta-theta.temp))
if(dif<=epsilon)break
theta.temp=theta
Gtemp=likeli(data,theta.temp[1],theta.temp[2])}
return(theta)
}
近段时间在学时间序列分析,老师要求采取改进的牛顿迭代方法来进行极大似然估计
是对Ma(1)过程,但是问题出现在最后一个NR函数,
A=A-(A%*%(G-Gtemp)%*%t(G-Gtemp)%*%A)/(t(G-Gtemp)%*%A%*%(G-Gtemp))-((theta-theta.temp)%*%t(theta-theta.temp))/((t(G-Gtemp)%*%(theta-theta.temp))
dif=max(abs(theta-theta.temp))
之后会报错显示错误: unexpected symbol in:
"A=A-(A%*%(G-Gtemp)%*%t(G-Gtemp)%*%A)/(t(G-Gtemp)%*%A%*%(G-Gtemp))-((theta-theta.temp)%*%t(theta-theta.temp))/((t(G-Gtemp)%*%(theta-theta.temp))
dif"

A的表达式是按照书上的来的,检查了好多遍应该没有输错,但一直找不到错误原因,求各位大神帮帮忙!!感激不尽!!

二维码

扫码加我 拉你入群

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

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

关键词:function generate RETURN Theta Temp 程序

沙发
楚韵荆风 学生认证  发表于 2015-12-6 19:12:12
应该是这句" if(dif<=epsilon)break " 的问题,如果条件true,没有返回的值,会报错。
例如:
fun =function(x){
    if(max(x)<2) break
   return(max(x))
}
> a = c(0,1, 0.2, 0.3, 0.5)
> fun(a)
Error in fun(a) : no loop for break/next, jumping to top level
>
> a = c(0, 1, 3, 0.5)
> fun(a)
[1] 3
建议改成:
fun =function(x){
    if(max(x)<2){return(max(x));  break}
   return(max(x))
}

已有 1 人评分热心指数 收起 理由
ryoeng + 1 热心帮助其他会员

总评分: 热心指数 + 1   查看全部评分

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

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-27 05:56