R语言 如何从循环中保存全局最大对数似然数据?

tf7tbtn2  于 2023-05-11  发布在  其他
关注(0)|答案(1)|浏览(114)

我在做这个:

## Example data
library(poLCA)
data(gss82)
f <- cbind(PURPOSE,ACCURACY,UNDERSTA,COOPERAT)~1

mlmat <- matrix(NA,nrow=500,ncol=4)

## Do repreat 500 times LCA for best llik
for (i in 1:500) {
  gss.lc <- poLCA(f,gss82,nclass=3,maxiter=3000,tol=1e-7)
  mlmat[i,1] <- gss.lc$llik
  o <- order(gss.lc$probs$UNDERSTA[,1],decreasing=T)
  mlmat[i,-1] <- gss.lc$P[o]
 }

这是来自poLCA纸(http://www.sscnet.ucla.edu/polisci/faculty/lewis/pdf/poLCA-JSS-final.pdf p14.表1)
这是结果:

我用循环做了500次,只在R的数据面板上显示一个目标。
我想知道如何保存最大对数似然的输出是-2754.545,因为它是全局的最大对数似然。

oxiaedzo

oxiaedzo1#

根据您留下的注解,您不需要for循环,也不需要mlmat。
您可以运行500次相同的代码并将结果保存到列表中。然后选择列表中具有最高lik的项。在这一点上,你可以只选择你正在寻找的列表中的项目。

library(purrr)

# run 500 times
gss.lcs <- map(1:500, \(i) poLCA(f,gss82,nclass=3,maxiter=3000,tol=1e-7))

# get the position of the highest one
pos <- gss.lcs |> map_dbl("llik") |> which.max()
pos

# get the element with the highest llik
gss.lc <- gss.lcs[[pos]]

gss.lc

相关问题