LCA 参数数量和自由度

机器算法验证 r 自由程度 比克 潜类 基于模型的聚类
2022-04-14 14:39:10

我有一系列医生的索赔申请。我想将聚类分析作为一种探索性工具,以根据收入代码、程序代码等内容来查找医生如何计费的模式。数据都是多态的,根据我的基本理解,潜在类算法适用于此种数据。我正在尝试使用 R 的一些集群包,特别poLCAmclust针对此分析。在使用 对数据样本运行测试模型后,我收到警报poLCA

> library(poLCA)
> # Example data structure - actual test data has 200 rows:
> df <- structure(list(RevCd = c(274L, 320L, 320L, 450L, 450L, 450L, 
636L, 636L, 636L, 450L, 450L, 450L, 301L, 305L, 450L, 450L, 352L, 
301L, 300L, 636L, 301L, 450L, 636L, 636L, 307L, 450L, 300L, 300L, 
301L, 301L), PlaceofSvc = c(23L, 23L, 23L, 23L, 23L, 23L, 23L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 
23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L, 23L), TypOfSvc = c(51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 
51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 51L, 
51L, 51L, 51L), FundType = c(3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 
3L, 3L, 3L, 3L, 3L, 3L), ProcCd2 = c(1747L, 656L, 656L, 1375L, 
1376L, 1439L, 1623L, 1645L, 1662L, 176L, 1374L, 1376L, 958L, 
1032L, 1368L, 1374L, 707L, 960L, 347L, 1662L, 859L, 1375L, 1654L, 
1783L, 882L, 1440L, 332L, 332L, 946L, 946L)), .Names = c("RevCd", 
"PlaceofSvc", "TypOfSvc", "FundType", "ProcCd2"), row.names = c(1137L, 
1138L, 1139L, 1140L, 1141L, 1142L, 1143L, 1144L, 1145L, 1146L, 
1147L, 1945L, 1946L, 1947L, 1948L, 1949L, 1950L, 1951L, 1952L, 
1953L, 1954L, 1955L, 1956L, 1957L, 1958L, 1959L, 2265L, 2266L, 
2267L, 2268L), class = "data.frame")

> clust <- poLCA(cbind(RevCd, PlaceofSvc, TypOfSvc, FundType, ProcCd2)~1, df, nclass = 3)

========================================================= 
Fit for 3 latent classes: 
========================================================= 
number of observations: 200 
number of estimated parameters: 7769 
residual degrees of freedom: -7569 
maximum log-likelihood: -1060.778 

AIC(3): 17659.56
BIC(3): 43284.18
G^2(3): 559.9219 (Likelihood ratio/deviance statistic) 
X^2(3): 33852.85 (Chi-square goodness of fit) 

ALERT: number of parameters estimated ( 7769 ) exceeds number of observations ( 200 ) 

ALERT: negative degrees of freedom; respecify model 

我的新手假设是我需要运行更多的迭代才能获得稳健的结果?例如“......在您可以合理地确定您已经找到产生全局最大似然解的参数估计之前,必须多次运行 poLCA。” http://www.sscnet.ucla.edu/polisci/faculty/lewis/pdf/poLCA-JSS-final.pdf)。或者,也许某些变量,特别是 CPT 和收入代码,有太多的唯一值,我需要将这些变量聚合到更高级别的类别中以减少参数的数量?

mclust当我使用基于 BIC 优化模型的package 运行模型时,我没有收到任何此类警报。

> library(mclust)
> clustBIC <- mclustBIC(df)
> summary(clustBIC, data = df)

classification table:
      1   2 
     141  59 

 best BIC values:
        VEV,2     VEV,3     EEV,3 
      -4562.286 -4706.190 -5655.783

如果有人可以对上述警报有所了解,将不胜感激。我还计划使用poLCA文档中的脚本来运行模型的多次迭代,直到对数似然最大化。然而它的计算量很大,我担心在我有机会发布这个之前这个过程会崩溃。如果我在这里遗漏了一些明显的东西,请提前道歉;我是聚类分析的新手。

2个回答

两者都基于有限混合模型执行基于模型的聚类分析。然而,专为潜在类别分析 (LCA) 而设计,这是适用于分类(多分)数据的特定混合模型类别的名称。反之,估计高斯混合,因此适用于定量变量。

您应该通过分析变量的性质和结构在两类模型之间进行选择。请注意,使用 LCA,您将变量视为定性的,即忽略有关模态排序的信息。

至于 poLCA,每个变量中的唯一值太多,无法识别模型。独立参数的数量与每个变量的模态数量(您所谓的唯一值)有关,并且必须低于变量的不同配置的数量(在您的情况下,单位中不同的观察到的 5 个结果,这是)。特别是,如果是具有个潜在类别的 3 变量模型的模态数,则独立参数的数量为: 200mambmck

(k1)+k[(ma1)+(mb1)+(mc1)]
所以,是的:如果你想使用 LCA,你需要聚合模态以减少参数的数量。

顺便说一句,要多次运行 poLCA,您可以简单地使用nrep选项。

如前所述,poLCA仅处理分类数据。那么这对它如何处理您的数据意味着什么呢?从帮助文档中poLCA

...清单变量必须仅包含整数值,并且必须使用从 1 到每个变量的最大结果数的连续值进行编码。

这意味着对于您的每个变量,poLCA将假设每个值都是一个唯一的类别,并且有尽可能多的可能类别(结果)作为变量中的最大值。查看您提供的数据,这意味着 RevCd 是一个具有 600 多个独特级别的分类变量!ProcCd2 似乎存在类似问题,其他三个变量也可能存在(如果不了解更多关于数据集的结构,很难确定)。

mclust另一方面,它被设计为仅适用于连续数据。这意味着当你给它一个分类变量时,它只是像处理它一样处理它(这几乎肯定不是你想要的)。假设您的变量 FundType 是分类的,三个级别 1、2 和 3 对应于三种不同类型的基金。如果你处理它,就好像它是连续的,那么你没有估计与三个不同的基金有任何关系,你估计的是一些组成的潜在连续变量(我们称之为“基金”),它从基金 1 线性增加到基金 2,基金 2 到基金 3。除了在极少数情况下具有序数分类变量外,这是无稽之谈。

我的猜测是,您想使用连续变量和分类变量的组合来确定潜在类别。没有数学上的理由你不能这样做,但poLCAmclust不会运行你需要的模型。depmixs4可以处理分类和连续清单变量,因此您可能希望从那里开始。另请参阅这篇带有相关问题的帖子:Latent class model with both continuous and categorical indicator in R