我将数据样本排列在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失败的原因感到茫然。
有没有人知道可能是什么问题?非常感谢任何见解。
答案 0 :(得分:1)
正如Ben Bolker所建议的,这是我自己问题的“解决方案”(供将来参考):
vglm
包中的VGAM
函数不一定适用于所有数据输入。由于大量数据通常接近瑞利分布,因此该命令只是以奇怪的错误退出(Koay反转也失败了,出于类似的原因,我假设)。如果我通过genrayleigh
将数据与广义Rayleigh分布拟合,那么一切都运行良好。
正如Ben建议的那样,尝试这两种方法的一种方法是使用try
或tryCatch
来尝试两者,或在拟合函数出现故障时发出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
# ...
} )