R 绕过';BLAS/LAPACK例程';DGEBAL&x27;给出了错误代码-3';在CNmixt fn中(受污染的混合包装)

R 绕过';BLAS/LAPACK例程';DGEBAL&x27;给出了错误代码-3';在CNmixt fn中(受污染的混合包装),r,error-handling,lapack,blas,mixture-model,R,Error Handling,Lapack,Blas,Mixture Model,我使用,对多维数据进行聚类。我的数据维度范围从3到9。大多数数据都可以毫无问题地进行集群,但我始终难以对7D数据进行集群 很抱歉不能包含独立的reprex,但我知道错误确实发生在我自己的数据中。你可以通过谷歌硬盘下载 要重现错误,请执行以下操作: library(ContaminatedMixt) df = read.csv (file = "210102_7clickcodas.csv", header = TRUE,

我使用,对多维数据进行聚类。我的数据维度范围从3到9。大多数数据都可以毫无问题地进行集群,但我始终难以对7D数据进行集群

很抱歉不能包含独立的reprex,但我知道错误确实发生在我自己的数据中。你可以通过谷歌硬盘下载

要重现错误,请执行以下操作:

library(ContaminatedMixt)
df = read.csv (file = "210102_7clickcodas.csv",
                     header = TRUE,
                     fileEncoding =  "UTF-8-BOM")
df = round(df, 3) 
clusters = CNmixt (
  df,
  G = 2:10,
  contamination = TRUE,
  model = NULL,
  initialization = "kmeans",
  parallel = TRUE)
我要求CNmixt做的是将2个、3个、4个、10个簇与数据匹配,然后选择最佳簇数(基于标准-我使用ICL,但BIC、AIC等也是选项)。但是,当我运行此代码时,总是会遇到以下错误:

Error in checkForRemoteErrors(val) : 
  one node produced an error: BLAS/LAPACK routine 'DGEBAL' gave error code -3
有时,多个节点会产生错误,但错误消息始终相同。我试图通过将G设置为2:10范围内的每个值而不是范围本身(G=2,然后G=3,然后G=4,等等)来排除导致问题的G值。看起来CNmixt无法将7D数据划分为4个集群。这样做会导致抛出错误并使程序停止运行

最重要的是,我想: a) 告诉CNmixt程序绕过导致错误的任何G值并继续。因此,如果G=4是问题所在,程序将适应2个集群,3个集群,尝试适应4个集群,但失败,然后继续适应5个集群。在拟合2:9聚类的最后,它将选择优化标准并成功拟合的聚类数。我认为这将涉及直接调整(我认为是.CNmixtG2函数),但是一种不操纵CNmixt源代码的方法也将非常棒

b) 了解发生此错误的原因也很好。我知道以前有人问过这个错误(例如),根据我读到的,错误代码-3似乎意味着第三个INFO参数中有一个非法值。但事实证明,要弄清楚“DGEBAL”函数在CNmixt代码中的何处被调用,它到底在做什么,以及它失败的原因,对我来说确实是一个挑战


任何关于如何做到这一点的建议都将不胜感激

这种方法可能适合你。如果查看
CNmixt()
函数的R代码,它只会重复调用
CNmixt\u main()
函数,尽管此函数不是从命名空间导出的。我做的第一件事是使用
expand.grid()
设置搜索网格,以获取集群数量和模型的所有组合

eg <- expand.grid(G=2:10, 
            model=c("EII", "VII", "EEI", "VEI", "EVI", "VVI", 
                    "EEE", "VEE", "EVE", "EEV", "VVE", "VEV", 
                    "EVV", "VVV"), 
            stringsAsFactors=FALSE)
接下来,我们可以将IC值附加到我们搜索的参数上

eg <- bind_cols(eg, as_tibble(ICS))
最后,我们可以选择最好的模型,再次假设最好的ICL是最小的

best_per_cluster %>% 
  ungroup %>% 
  filter(ICL == min(ICL))
# # A tibble: 1 x 10
#         G model    AIC    BIC   AIC3   CAIC    AWE    ICL   AICc   AICu
#     <int> <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
#   1     2 VII   28960. 28854. 28941. 28835. 28653. 28724. 28960. 28940.
best_per_cluster <- eg %>% 
  group_by(G) %>% 
  filter(ICL == min(ICL, na.rm=TRUE)) %>% 
  arrange(G)
best_per_cluster 
# # A tibble: 9 x 10
# # Groups:   G [9]
#      G model    AIC    BIC   AIC3   CAIC    AWE    ICL   AICc   AICu
#   <int> <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
# 1     2 VII   28960. 28854. 28941. 28835. 28653. 28724. 28960. 28940.
# 2     3 EVI   31190. 30955. 31148. 30913. 30511. 30786. 31188. 31145.
# 3     4 VEI   34230. 33984. 34186. 33940. 33518. 33702. 34228. 34183.
# 4     5 EVI   35896. 35504. 35826. 35434. 34763. 35373. 35891. 35818.
# 5     6 EEI   34959. 34629. 34900. 34570. 34004. 34446. 34955. 34894.
# 6     7 EVI   38211. 37663. 38113. 37565. 36625. 37450. 38201. 38099.
# 7     8 EEI   39301. 38870. 39224. 38793. 38054. 38058. 39294. 39215.
# 8     9 EEI   37999. 37518. 37913. 37432. 36607. 37259. 37991. 37902.
# 9    10 EII   34709. 34205. 34619. 34115. 33252. 33900. 34700. 34607.
best_per_cluster %>% 
  ungroup %>% 
  filter(ICL == min(ICL))
# # A tibble: 1 x 10
#         G model    AIC    BIC   AIC3   CAIC    AWE    ICL   AICc   AICu
#     <int> <chr>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
#   1     2 VII   28960. 28854. 28941. 28835. 28653. 28724. 28960. 28940.
> sessionInfo()
R version 4.0.3 (2020-10-10)
Platform: x86_64-apple-darwin17.0 (64-bit)
Running under: macOS Catalina 10.15.4

Matrix products: default
BLAS:   /System/Library/Frameworks/Accelerate.framework/Versions/A/Frameworks/vecLib.framework/Versions/A/libBLAS.dylib
LAPACK: /Library/Frameworks/R.framework/Versions/4.0/Resources/lib/libRlapack.dylib

locale:
[1] en_CA.UTF-8/en_CA.UTF-8/en_CA.UTF-8/C/en_CA.UTF-8/en_CA.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ContaminatedMixt_1.3.4.1

loaded via a namespace (and not attached):
 [1] Rcpp_1.0.5           pillar_1.4.6         compiler_4.0.3      
 [4] gower_0.2.1          plyr_1.8.6           class_7.3-17        
 [7] iterators_1.0.12     tools_4.0.3          rpart_4.1-15        
[10] ipred_0.9-9          mclust_5.4.6         lubridate_1.7.9     
[13] mixture_1.5.1        lifecycle_0.2.0      tibble_3.0.3        
[16] gtable_0.3.0         nlme_3.1-149         lattice_0.20-41     
[19] pkgconfig_2.0.3      rlang_0.4.7          Matrix_1.2-18       
[22] foreach_1.5.0        rstudioapi_0.11      parallel_4.0.3      
[25] mvtnorm_1.1-1        prodlim_2019.11.13   stringr_1.4.0       
[28] withr_2.2.0          dplyr_1.0.2          pROC_1.16.2         
[31] generics_0.0.2       vctrs_0.3.4          recipes_0.1.12      
[34] stats4_4.0.3         nnet_7.3-14          grid_4.0.3          
[37] caret_6.0-86         tidyselect_1.1.0     data.table_1.13.0   
[40] glue_1.4.2           R6_2.4.1             survival_3.2-7      
[43] lava_1.6.7           reshape2_1.4.4       ggplot2_3.3.2       
[46] purrr_0.3.4          magrittr_1.5         ModelMetrics_1.2.2.2
[49] splines_4.0.3        MASS_7.3-53          scales_1.1.1        
[52] codetools_0.2-16     ellipsis_0.3.1       mnormt_2.0.1        
[55] timeDate_3043.102    colorspace_1.4-1     stringi_1.5.3       
[58] munsell_0.5.0        tmvnsim_1.0-2        crayon_1.3.4