楼主: jacksenone
1269 6

[问答] R程序报错,跪求好心人求助 [推广有奖]

  • 0关注
  • 0粉丝

本科生

38%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
5.5555
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
315 点
帖子
18
精华
0
在线时间
162 小时
注册时间
2018-1-22
最后登录
2023-7-20

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
zonghedata1<-zonghedata
break_year<-2010
T<-break_year-1970+1
n<-2014-break_year
D_all<-matrix(rep(0,17*41), 17,41)
E_all<-matrix(rep(0,17*41),17,41)
m_all<-matrix(rep(0,17*41),17,41)
lnm_all<-matrix(rep(0,17*41),17,41)
for(t in 1:T){
  for (x in 1:17)
  {D_all[x,t]<-zonghedata1[x+17*(t-1),3]
  E_all[x,t]<-zonghedata1[x+17*(t-1),4]
  m_all[x,t]<-D_all[x,t]/E_all[x,t]
  lnm_all[x,t]<-log(m_all[x,t])
  }
}
D<-D_all[,1:t]
E<-E_all[,1:t]
m<-m_all[,1:t]
lnm<-lnm_all[,1:t]
age<-zonghedata1[1:17,2]
year<-as.numeric(levels(factor(zonghedata1[,1])))
#step1:set the start value for a0,b0,k0
a<-c(rep(0,17))
b<-c(rep(1,17))
k<-c(rep(0,41))
#step2: construct the log_likelihood function
logL<-function(a,b,k){
  L<-matrix(rep(NA,17*t),17,t)
  for (x in 1:17) {for(t in 1:T){
    L[x,t]<-D[x,t]*log(1-exp(-exp(a[x]+b[x]*k[t])))-D[x,t]*exp(a[x]+b[x]*k[t])####对数似然函数
  }}
  logL<-sum(L)
  return(logL)
}
#step3:the estimated number of deaths
dd<-function(a,b,k){
  q<-matrix(rep(0,17*t),17,t)
  for(t in 1:T){
    for (x in 1:17) {
      q[x,t]<-1-exp(-exp(a[x]+b[x]*k[t]))
    }
  }
  return(q)
}
#step4:set the iteration rule of a(x)
aa<-function(a,b,k){
  q<-dd(a,b,k)
  for (x in 1:17){
  a[x]<-a[x]-sum((exp(a[x]-b[x]*k[t]))*(D[x,]/q[x,]-E[x,]))/sum((exp(a[x]-b[x]*k[t])*((D[x,]*q[x,]+D[x,]*exp(a[x]+b[x]*k[t])*exp(-exp(a[x]+b[x]*k[t]))))/(q[x,])^2-E[x,]))
  }
  return(a)
}
# step5:set the iteration rule of k(t)
kk<-function(a,b,k){
  q<-dd(a,b,k)
  for (t in 1:T) {k[t]<-k[t]-sum((b*exp(a[x]+b[x]*k[t]))*(D[,t]/q[,t]-E[,t]))/sum((b^2)*exp(a[x]+b[x]*k[t])*(((D[,t]*q[,t]+D[,t]*exp(a[x]+b[x]*k[t])*exp(-exp(a[x]+b[x]*k[t]))))/(q[,t])^2-E[,t]))
  }
  return(k)
}
#step6: set the iteration of b(x)
bb<- function(a,b,k){
  q<-dd(a,b,k)
  for (x in 1:17) {b[x]<-b[x]-sum((k*exp(a[x]+b[x]*k[t]))*(D[x,]/q[x,]-E[x,]))/sum((k^2)*exp(a[x]+b[x]*k[t])*(((D[x,]*q[x,]+D[x,]*exp(a[x]+b[x]*k[t])*exp(-exp(a[x]+b[x]*k[t]))))/(q[x,])^2-E[x,]))
  }
  return(b)
}
#step7:iteration process
j=1
diff_L<-logL(a,b,k)
while(abs(diff_L)>10^(-10))
{logL0<-logL(a,b,k)
if(j%%3==1){a<-aa(a,b,k)}
if(j%%3==2){k<-kk(a,b,k)}
if(j%%3==0){b<-bb(a,b,k)}
logL1<-logL(a,b,k)
diff_L<-logL1-logL0
j=j+1
}
Error in while (abs(diff_L) > 10^(-10)) { :
  missing value where TRUE/FALSE needed
#step8:parameter adjustment
a1<-a
b1<-b
k1<-k
c1<-sum(b1)
c2<-c1*sum(k1)/T
A_MLE<-a1+c2*b/c1
B_MLE<-b1/c1
K_MLE<-c1*k1-c2


提示我出现缺失值,找了好久不都不知道为什么

二维码

扫码加我 拉你入群

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

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

关键词:求好心人 好心人 R程序 Data EDA R语言

沙发
cheetahfly 在职认证  发表于 2020-2-7 09:24:05 |只看作者 |坛友微信交流群
abs(diff_L) > 10^(-10)  是空值

使用道具

藤椅
jacksenone 学生认证  发表于 2020-2-7 17:01:54 |只看作者 |坛友微信交流群
cheetahfly 发表于 2020-2-7 09:24
abs(diff_L) > 10^(-10)  是空值
我换了一个数据就好了,没有提示这个错误,这个while结构应该返回的是一个逻辑值

使用道具

板凳
cheetahfly 在职认证  发表于 2020-2-8 09:13:11 |只看作者 |坛友微信交流群
jacksenone 发表于 2020-2-7 17:01
我换了一个数据就好了,没有提示这个错误,这个while结构应该返回的是一个逻辑值
while结构不是“返回”一个逻辑值,而是“需要”一个逻辑值来执行下一步的代码。
换一个数据就好了,说明代码本身没有问题,是数据的问题,
上一个数据中abs(diff_L) > 10^(-10)应该是个空值或者异常值,这是出错信息告诉我们的,可以循着这个逻辑去寻找具体的错误所在

使用道具

报纸
jacksenone 学生认证  发表于 2020-2-9 17:22:46 |只看作者 |坛友微信交流群
cheetahfly 发表于 2020-2-8 09:13
while结构不是“返回”一个逻辑值,而是“需要”一个逻辑值来执行下一步的代码。
换一个数据就好了,说明 ...
感谢感谢

使用道具

地板
温行远 学生认证  发表于 2020-2-18 16:17:38 |只看作者 |坛友微信交流群
已解决

使用道具

7
631876026 发表于 2020-9-5 15:47:50 |只看作者 |坛友微信交流群
你好,我也遇到了这个问题,请问你是换成了什么能够继续运行,方便分享一下嘛,谢谢!

使用道具

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

本版微信群
加好友,备注cda
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-24 16:34