楼主: yyyyyy1991
1519 2

[问答] 急求,这个程序为什么循环不了呢?循环次数为1的时候可以运行,但多次循环就不行!! [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

学前班

60%

还不是VIP/贵宾

-

威望
0
论坛币
0 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
23 点
帖子
2
精华
0
在线时间
1 小时
注册时间
2016-4-22
最后登录
2016-4-24

楼主
yyyyyy1991 发表于 2016-4-22 12:00:02 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
下面是程序:
library(emplik)
library(stats)
require(MASS)

p=5
t=10
L=1
lam=5
nt=rep(0,L)
ww=rep(0,L)
ind=0
Z=rep(0,1000)
q1=rep(0,L)
q2=rep(0,L)

for(l in 1:L){
  nt[l]=rpois(1,lam*t)
  x1 <- rexp(nt[l]*p)
  x <- matrix(x1,nt[l],p)
  mu=rep(1,p)
  theta=lam*mu

  g1<-function(z,theta,agama){
    temtheta<-matrix(theta*t/nt[l],nt[l],p)
    deno<-diag(c(1/(1+(z-temtheta)%*%agama)))
    nomi<-z-temtheta
    temp1<-deno%*%nomi
    temp<-colSums(temp1)/nt[l]
    temp
  }

  g2<-function(z,thate,agama){
    temtheta<-matrix(theta*t/nt[l],nt[l],p)
    deno2<-diag(c(-1/(1+(z-temtheta)%*%agama)))
    nomi2<-matrix(1,nt[l],p)
    temp2<-deno2%*%nomi2%*%agama
    tempp<-colSums(temp2)*t/nt[l]
  }

  cal<-function(z,theta,agama){
    sol1<-(g1(z,theta,agama))^2
    sol2<-(g2(z,theta,agama))^2
    return(sum(sol1)+sum(sol2))
  }

  Fin<-function(z,theta,agama){
    temtheta<-matrix(theta*t/nt[l],nt[l],p)
    temp<-1+(z-temtheta)%*%agama
    fi<-sum(log(temp))
    fi
  }

  "%^%" <- function(x, n)
    with(eigen(x), vectors %*% (values^n * t(vectors)))

  agama<-nlm(cal,z=x,theta=theta,rep(0.01,p),iterlim=500)$estimate

  ww[l]<-2*Fin(x,theta,agama)

  for(i in 1:1000){
    ome=0
    sig=0
    for(j in 1:nt[l]){
      ome=ome+x[j,]%*%t(x[j,])
    }
    omega=ome/nt

    for(j in 1:nt[l]){
      sig=sig+(x[j,]-colMeans(x))%*%t(x[j,]-colMeans(x))
    }
    sigma=sig/nt
    sigma <- sigma%^% (-0.5)
    ma=sigma%*%omega%*%(sigma)
    z<-mvrnorm(1,rep(0,p),Sigma<-ma)
    Z[i]<-t(z)%*%(z)
  }



  q1[l]<-quantile(Z,probs=0.05)
  q2[l]<-quantile(Z,probs=0.95)

  if(ww[l]<q2[l] & ww[l]>q1[l]){
    ind=ind+1
  }
  ind
}

covp=ind/L


程序内容是检验一个复合泊松过程的分布,每一个过程都是一个向量,等于有nt个x,每个x都是p维的向量。
L就是循环次数,当L取1的时候程序ok可以运行,超过1报错了。报错内容如下:
错误于eigen(x) : infinite or missing values in 'x'
此外: 警告信息:
1: In ome/nt : 长的对象长度不是短的对象长度的整倍数
2: In sig/nt : 长的对象长度不是短的对象长度的整倍数

十万火急!万分感谢!!!
二维码

扫码加我 拉你入群

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

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

关键词:Library require BRARY stats mass 程序 报错 循环

沙发
truly_x 发表于 2016-4-22 18:45:17
虽然看不懂这个检验,但是下面这两行
   omega=ome/nt;sigma=sig/nt
里的nt是三维的,似乎做不了除数,改成
omega=ome/nt[1];sigma=sig/nt[1]就没有报错了

藤椅
yyyyyy1991 发表于 2016-4-24 19:24:39
truly_x 发表于 2016-4-22 18:45
虽然看不懂这个检验,但是下面这两行
   omega=ome/nt;sigma=sig/nt
里的nt是三维的,似乎做不了除数,改 ...
十分感谢十分感谢!原来错误在这里!

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

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