我正在使用PoLCA R软件包进行LCA分析,但分析结果自三天后才开始(它还没有找到最好的模型),偶尔会出现以下错误:“警告:迭代完成,最大可能没有找到” . 所以我在35个潜班上取消了这个过程 . 我正在分析16个变量(所有这些变量都是分类的)和36036行数据 . 当我在Boruta软件包中测试16个变量的变量重要性时,所有16个变量都很重要,因此我在使用poLCA的LCA分析中使用了所有16个变量 . 我应该走哪条路?我是否应该使用其他聚类方法(如k-modes)来聚类此数据集中的分类变量?我使用500次迭代的参数和nrep = 10模型估计数 . 我使用R脚本在LCA中找到最佳模型,其中一个输出如下:
for(i in 2:50){
lc <- poLCA(f, data, nclass=i, maxiter=500,
tol=1e-5, na.rm=FALSE,
nrep=10, verbose=TRUE, calc.se=TRUE)
if(lc$bic < min_bic){
min_bic <- lc$bic
LCA_best_model<-lc
}
}
================================================= ========适合35个潜在课程:==================================== =====================观测次数:36036估计参数数:2029剩余自由度:34007最大对数似然:-482547.1 AIC(35): 969152.2 BIC(35):986383 G ^ 2(35):233626.8(似然比/偏差统计量)X ^ 2(35):906572555(卡方拟合度)警告:迭代完成,最大似然没有找到
1 回答
您正在使用的脚本按顺序测试从2到50个类的每个模型,并保持具有最低BIC的模型 . BIC不是选择“最佳”模型的唯一或最佳方式,但足够公平 .
问题是,您正在估计很多参数,尤其是在最后的步骤中 . 您适合的课程越多,该过程就越耗时 . 此外,在这种情况下,收敛问题是可以预期的,因为你适合这么多的课程 . 这就是错误消息报告的内容,它找不到具有35个类的模型的最大可能性 .
我不知道你要解决什么问题,但是LCA中超过10个类的模型是不寻常的 . 您可以通过LCA尽可能地降低数据的复杂性 . 如果你 NEED 适合具有多个10-类的模型:
逐个适合它们,因此RAM消耗不会成为问题 .
增加了调用中的
nrep=
参数,因此您模型未偶然找到最大可能性的概率 - 随机初始数 - 减少 . 还会增加计算时间 .或者,您可以减少并行运行模型的计算时间 . 几乎每台现代PC都有2个或更多核心 . 下一个块中的函数
acl()
使用foreach()
和%dopar%
执行此操作,因此与OS无关 .acm()
返回模型列表,稍后可以选择"the best" . 下一个函数将从列表中检索intrest的数量,并创建一个格式良好的data.frame,其中包含有用的信息以选择正确数量的类 .它只需要一个参数:一个具有LCA模型列表的对象,正是
acl()
返回的内容 .这种并行方法应该减少计算时间 . 仍然有50个课程很多,你可能在50课之前获得最小的BIC方式 . 请记住,BIC惩罚模型随着估计参数的数量增加,帮助您找到模型中额外类别的收益递减点 .