0

我将数据样本排列在 1000 x 56 数组中,我想提取最适合每列数据的 Rician 分布参数。我正在使用这个VGAM包,它看起来非常合适,并给出了文档中的示例riceff

vee = exp(2); sigma = exp(1);
y = rrice(n <- 1000, vee, sigma)
fit = vglm(y ~ 1, riceff, trace=TRUE, crit="c")

我认为以下代码可以正常工作

nu <- rep(-1,ncol(data))
sigma <- rep(-1,ncol(data))

for( coln in seq(ncol(data)) ) {
  fdata <- c(data[,coln])
  fit <- vglm( fdata ~ 1, riceff, trace=TRUE, crit="c" )
  sigma[coln] <- matrix(Coef(fit)[1])[1,1]
  nu[coln] <- matrix(Coef(fit)[2])[1,1]
}

但相反我得到了错误

VGLM    linear loop  1 :  coefficients = -723936.834084,     598.301767
Error in if ((temp <- sum(wz[, 1:M, drop = FALSE] < wzepsilon))) warning(paste(temp,  : 
  argument is not interpretable as logical

至于我的数据,我进行了一些基本检查

> is.matrix(data)
[1] TRUE
> dim(data)
[1] 1000   56
> summary(data)
       V1           
 Min.   :1.402e-05  
 1st Qu.:9.533e-04  
 Median :1.548e-03  
 Mean   :1.640e-03  
 3rd Qu.:2.175e-03  
 Max.   :4.657e-03  

 ... (omitted for brevity)

      V56           
 Min.   :5.252e-05  
 1st Qu.:1.125e-03  
 Median :1.692e-03  
 Mean   :1.776e-03  
 3rd Qu.:2.293e-03  
 Max.   :5.903e-03

摘要中的任何信息都没有表明NaN某处有隐藏,所以我不知道为什么 vglm 失败了。

有谁知道可能是什么问题?非常感谢任何见解。

4

1 回答 1

1

正如 Ben Bolker 所建议的,这是我自己的问题的“解决方案”(供将来参考):

包中的vglm函数VGAM不一定对所有数据输入都表现良好。由于很多数据通常接近于瑞利分布,因此该命令会以那个奇怪的错误退出(Koay 反转也失败,我假设出于类似的原因)。如果我通过 将我的数据与广义瑞利分布相匹配genrayleigh,那么一切都运行良好。

正如 Ben 所建议的,尝试两者的一种方法是使用trytryCatch尝试两者,或者NA在拟合函数发生故障时发出值。

tryCatch( {
  fit <- vglm( fdata ~ 1, riceff, trace=TRUE, crit="c" )
  # extract fit parameters here
  # ...
}, error = function(ex) {
  # insert NA value into your data here
  # ...
} )
于 2011-07-12T21:30:57.610 回答