0

1000 x 56 の配列に配置されたデータ サンプルがあり、各列のデータに最適なライス分布のパラメーターを抽出したいと考えています。私は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 が提案したように、両方を試す 1 つの方法は、両方を使用する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
  # ...
} )
于 2011-07-12T21:30:57.610 に答える