R直方图中断错误

时间:2015-08-21 11:49:54

标签: r algorithm histogram

我必须为我的论文准备一个算法来交叉检查一个理论结果,即N个周期的二项式模型收敛于N \到\ infty的对数正态分布。对于那些不熟悉这个概念的人,我必须创建一个算法,该算法采用起始值并将其与上乘数和下乘数相乘,并对N步的每个值继续这样做。该算法应返回一个向量,其元素的形式为StarterValue u ^ i d ^ {N-i} i = 0,\ dots,N 我提出的简单算法是

rata<-function(N,r,u,d,S){

  length(x)<-N
  for(i in 0:N){
    x[i]<-S*u^{i}*d^{N-i}
  }
  return(x)
}

N是周期数,其余只是非重要值(u表示向上d表示向下等) 为了提取我的结果,我需要制作生成的向量的对数的直方图,以证明它们是正态分布的。但是当我输入hist(x)时,对于N = 100000(我需要大量的步骤来证明收敛),我得到了error :(invalid number of breaks) 谁能帮忙?提前致谢。 一个例子

 taf<-rata(100000,1,1.1,0.9,1)
 taf1<-log(taf)
 hist(taf1,xlim=c(-400,400))

1 个答案:

答案 0 :(得分:3)

首先我修复你的功能:

rata<-function(N,r,u,d,S){
  x <- numeric(N+1)
  for(i in 0:N){
    x[i]<-S*u^{i}*d^{N-i}
  }
  return(x)
}

或依赖矢量化:

rata<-function(N,r,u,d,S){
  x<-S*u^{0:N}*d^{N-(0:N)}
  return(x)
}

taf<-rata(100000,1,1.1,0.9,1) 

查看结果,我们注意到它包含NaN值:

taf[7440 + 7:8]
#[1]   0 NaN 

发生什么事了?显然乘法变为NaN

1.1^7448*0.9^(1e5-7448)
#[1] NaN

1.1^7448
#[1] Inf

0.9^(1e5-7448)
#[1] 0

Inf * 0
#[1] NaN

为什么会出现Inf值?好吧,因为双重溢出(读help("double")):

1.1^(7440 + 7:8)
#[1] 1.783719e+308           Inf

当乘法器接近0(读help(".Machine"))时,浮点精度存在类似问题。

您可能需要使用任意精确数字。