分享

有限混合模型FMM具体的操作指南和说明, 非常实用!

 计量经济圈 2023-03-20 发布于浙江

所有计量经济圈方法论丛的code程序, 宏微观数据库和各种软件都放在社群里.欢迎到计量经济圈社群交流访问.

“人类”学者,整理了fmm(1.有限混合模型FMM,异质性分组分析的新筹码,2.一篇中文“有限混合模型FMM”文章, 可以看看)模型具体的操作指南和说明,可以说是非常实用。这是他或她在进行论文研究方法模仿的过程中学习整理出来的材料。

FMM模型

有限混合分布模型(FMM)是一种统计模型,可以用于对复杂数据进行建模和分析。它是一种基于概率的方法,可以将数据分解成多个分布,每个分布都有自己的权重和参数。FMM常用于聚类分析、异常检测、分类等领域。
1. 原理
FMM(Finite Mixture Model)模型是一种基于概率分布的混合模型,它假设数据集是由多个分布不同的子群体组成,每个子群体都有自己的分布特征。FMM模型的目标是通过最大化似然函数来确定每个子群体的参数,从而将数据集分成不同的子群体。
2. 特点
(1)FMM模型可以处理非线性和非正态分布的数据。
(2)FMM模型可以识别数据集中的不同子群体,并对不同子群体的特征进行建模
(3)FMM模型可以用于聚类分析、异常检测、分类等多种任务。
(4)FMM模型可以通过贝叶斯方法进行参数估计,从而避免了过拟合的问题。
3. 适用情况
FMM模型适用于以下情况:
(1)数据集中存在多个不同的子群体。
(2)数据集中的数据分布不满足正态分布假设。
(3)需要识别数据集中的异常值。
(4)需要对数据集进行聚类分析或分类。
4.完整分析案例
利用stata中的fmm模型分析综合评价指标的流程及代码和结果解读:
1. 数据准备
首先需要准备好待分析的数据,包括综合评价指标和其他可能影响综合评价指标的变量。这里假设已经将数据读入stata中,并且已经进行了必要的数据清洗和变量转换。
2. 模型拟合
使用stata中的fmm命令拟合fmm模型。假设综合评价指标是y,其他可能影响综合评价指标的变量包括x1、x2和x3,共分为3个组别。则模型拟合的代码如下:
```
fmm y x1 x2 x3, k(3) distn(nbinomial) twostep
```
其中,k(3)表示将数据分为3个组别,distn(nbinomial)表示使用负二项分布作为组别分布的假设,twostep表示使用两步法(two-step)估计模型参数。
\3. 结果解读
模型拟合完成后,可以使用stata中的estat命令查看模型拟合结果。其中,estat fmm命令可以查看每个组别的比例、均值和方差等参数,如下所示:
```
estat fmm, detail
```
如果需要查看每个观测值所属的组别,可以使用predict命令,如下所示:
```
predict group
```
其中,group表示每个观测值所属的组别。
如果需要查看不同组别的概率,可以使用predict命令,如下所示:
```
predict p1 p2 p3, pr
```
其中,p1、p2和p3分别表示每个观测值属于第1个、第2个和第3个组别的概率,pr表示输出概率。
4. 结果分析
根据模型拟合结果,可以对综合评价指标进行分类,进而分析不同组别之间的差异和影响因素。例如,可以使用tab命令查看不同组别的均值和方差,如下所示:
```
tab group y, stat(mean sd)
``
其中,group表示分组变量,y表示综合评价指标,stat(mean sd)表示输出均值和标准差。
可以进一步使用reg命令分别对不同组别的综合评价指标进行回归分析,以探究影响不同组别的因素。例如,对于第1个组别,可以使用以下命令进行回归分析:
```
reg y x1 x2 x3 if group==1
```
其中,if group==1表示只对属于第1个组别的观测值进行回归分析。
通过对不同组别的综合评价指标进行回归分析,可以发现不同组别之间的差异和影响因素,从而为制定针对性的政策和措施提供参考。

细节解读

下面是使用FMM的步骤:
1. 数据准备:首先需要准备数据集,数据集应该是一个矩阵,每一行代表一个样本,每一列代表一个特征。
2. 模型选择:选择一个合适的有限混合分布模型,比如高斯混合模型(GMM)或者混合多项式模型(MNM)。选择模型时需要考虑数据的特点,比如数据是否服从正态分布、是否存在离群值等。
3. 参数估计:使用EM算法或者其他优化算法来估计模型的参数。EM算法是一种迭代算法,它通过交替进行E步和M步来最大化似然函数。
4. 模型评估:使用一些评估指标来评估模型的拟合程度,比如BIC、AIC、对数似然等
5. 预测和应用:使用训练好的模型来进行预测和应用,比如聚类分析、异常检测、分类等。
下面是一个使用Python实现FMM的例子:
``
from sklearn.mixture import GaussianMixture
# 准备数据集
X = [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6], [6, 7], [7, 8], [8, 9], [9, 10]]
# 选择模型
model = GaussianMixture(n_components=2)
# 参数估计
model.fit(X)
# 模型评估
print(model.bic(X))
print(model.aic(X))
# 预测和应用
y_pred = model.predict(X)
print(y_pred)
```
在这个例子中,我们使用了sklearn库中的高斯混合模型来对数据进行建模。我们首先准备了一个简单的数据集X,然后选择了一个两个分布的混合模型。我们使用fit方法来估计模型的参数,使用bic和aic方法来评估模型的拟合程度,最后使用predict方法来预测数据集X的标签。
以下是使用Stata实现FMM的步骤:
1. 准备数据:将数据导入Stata,并根据需要进行预处理。
2. 安装fmm命令:在Stata中输入以下命令来安装fmm命令:
ssc install fmm
3. 运行fmm命令:在Stata中输入以下命令来运行fmm命令:
fmm dependent_var [indep_var1 indep_var2 … indep_varn], ncomponents(k)
其中,dependent_var是因变量,indep_var1至indep_varn是自变量,k是混合模型的组数。
4. 解释结果:fmm命令将输出每个组的参数估计值、标准误、置信区间和组的权重等信息。根据需要,可以使用其他Stata命令来进一步分析和解释结果。
在Stata中,使用fmm命令进行有限混合模型分析时,运算出的结果包括:
1. 模型拟合指标:包括AIC、BIC、HQIC等模型拟合指标,用于评估模型的拟合程度和模型选择。
2. 模型参数估计:包括每个混合成分的权重、均值和方差等参数的估计值。
3. 模型诊断信息:包括残差分析、模型假设检验、混合成分数目选择等模型诊断信息,用于评估模型的有效性和假设检验。
4. 预测结果:可以使用fmm命令对新数据进行预测,得到每个混合成分的概率和预测值。
在使用Stata中的fmm命令进行有限混合模型拟合后,可以使用以下命令导出和解读结果:
1. 导出结果
使用命令“estat fmm, save(filename)”可以将拟合结果保存到文件中。例如,使用以下命令将结果保存到文件“fmm_results.txt”中:
```
estat fmm, save(fmm_results.txt)
```
2. 解读结果
通过导出的结果文件,可以查看有限混合模型的参数估计结果和模型拟合信息。以下是一些常见的要素:
- 模型参数:有限混合模型通常包含多个组件,每个组件都有自己的参数。在结果文件中,可以查看每个组件的参数估计值、标准误、置信区间和p值等信息。这些信息可以帮助我们了解每个组件的特征和对观测数据的贡献程度。
- 模型选择准则:有限混合模型的拟合需要选择组件数量和类型等参数。在结果文件中,可以查看使用的模型选择准则和最终选择的模型。常见的模型选择准则包括AIC、BIC和HQIC等。这些信息可以帮助我们了解选择的模型是否合理。
- 模型拟合信息:在结果文件中,还可以查看模型的拟合信息,如对数似然值、似然比、拟合优度指数等。这些信息可以帮助我们了解模型的拟合程度和对观测数据的解释能力。
FMM模型的结果可以通过以下几个方面进行解读:
1. 模型的拟合程度:可以通过模型拟合度的指标,如AIC、BIC、Log Likelihood等来评估模型的拟合程度。一般来说,这些指标的数值越小,模型的拟合程度越好。
2. 变量的影响程度:可以通过模型系数的符号和大小来判断变量对结果的影响程度。系数为正表示该变量与结果呈正相关,系数为负表示该变量与结果呈负相关,系数的绝对值越大表示影响程度越大。
3. 模型的预测能力:可以通过模型的预测能力来评估模型的有效性。可以将部分数据作为训练集,用训练好的模型对另一部分数据进行预测,并计算预测误差指标,如均方根误差(RMSE)、平均绝对误差(MAE)等。
4.模型的稳定性:可以通过交叉验证等方法来评估模型的稳定性。交叉验证可以将数据集分为若干部分,每次用其中一部分作为测试集,其余部分作为训练集,计算模型的预测误差指标,并求其平均值,以此来评估模型的稳定性。
解读模型的拟合程度是评估模型有效性的一个重要步骤。以下是解读模型拟合程度的原理、代码和分析:
原理:
模型的拟合程度可以通过比较模型预测值与实际观测值之间的差异来评估。常见的方法是计算模型预测值与实际观测值之间的残差平方和(RSS)或均方误差(MSE),并将其与总变差(TSS)进行比较。TSS表示实际观测值与其均值之间的差异,可以通过计算实际观测值的方差来估计。拟合程度越好,RSS或MSE与TSS之比越小。
代码:
Stata中可以使用命令“predict”和“estat”来计算模型的预测值和拟合程度指标。具体步骤如下:
1. 使用“reg”命令拟合模型,例如:
```
reg y x1 x2 x3
```
其中,y是因变量,x1、x2和x3是自变量。
2. 使用“predict”命令计算模型的预测值,例如:
```
predict yhat
```
其中,yhat是模型的预测值。
3. 使用“estat”命令计算模型的拟合程度指标,例如:
```
estat rss
estat mse
estat tss
``
其中,rss是残差平方和,mse是均方误差,tss是总变差。
分析:
模型的拟合程度可以通过比较rss或mse与tss之比来评估。如果rss或mse占tss的比例很小,说明模型的预测能力很好,拟合程度很高。反之,如果rss或mse占tss的比例很大,说明模型的预测能力很差,拟合程度很低。
例如,如果计算出的rss为100,mse为10,tss为1000,则rss/tss为0.1,mse/tss为0.01。这意味着模型的预测能力很好,拟合程度很高。
需要注意的是,拟合程度并不是唯一的评估模型有效性的指标,还需要考虑模型的假设检验、参数估计的精度、模型的预测能力等因素。
模型的预测能力是评估模型有效性的重要指标之一。以下是通过交叉验证来评估模型预测能力的一般步骤:
1. 将数据集分为训练集和测试集。
2. 在训练集上拟合模型。
3. 使用训练好的模型对测试集进行预测,并计算预测误差。
4. 重复步骤2和3多次,每次使用不同的训练集和测试集,以得到更稳健的预测误差估计。
5. 汇总多次预测误差,计算平均误差和标准差。
6. 使用平均误差和标准差来评估模型的预测能力。
以下是在Stata中进行交叉验证的代码示例:
```
// 将数据集分为训练集和测试集
use "data.dta", clear
sample 60, count
split train test, seed(123)
// 在训练集上拟合模型
regress y x1 x2 x3, robust
// 使用训练好的模型对测试集进行预测,并计算预测误差
predict yhat_test, xb
gen residual_test = y - yhat_test
// 重复步骤2和3多次,每次使用不同的训练集和测试集
forvalues i = 1/10 {
 sample 60, count
 split traini' testi', seed(`i'*123)
 regress y x1 x2 x3 if train`i', robust
 predict yhat_testi' if testi'
 gen residual_testi' = y - yhat_testi'
}
// 汇总多次预测误差,计算平均误差和标准差
collapse (mean) residual_test residual_test* (sd) residual_test residual_test*, by(test)
// 使用平均误差和标准差来评估模型的预测能力
summarize residual_test
```
在上述代码中,我们将数据集分为训练集和测试集,并使用训练集上的数据来拟合模型。然后,我们将训练集和测试集分别用于多次交叉验证,每次使用不同的训练集和测试集来计算预测误差。最后,我们汇总多次预测误差,并计算平均误差和标准差来评估模型的预测能力。
如果平均误差较小,标准差较小,则说明模型的预测能力较好。反之,如果平均误差较大,标准差较大,则说明模型的预测能力较差。
FMM模型可以处理面板数据,其基本思路是将面板数据分解为静态和动态的部分。静态部分是面板数据中的个体固定效应,动态部分则是个体随时间变化的效应。在FMM模型中,静态部分可以用混合效应模型来处理,动态部分可以用动态因子模型来处理。
具体来说,FMM模型处理面板数据的步骤如下:
1. 将面板数据分解为静态和动态部分。
2. 对静态部分进行混合效应模型估计,得到个体的固定效应。
3. 对动态部分进行动态因子模型估计,得到个体随时间变化的效应。
4. 将个体固定效应和随时间变化的效应组合起来,得到每个个体的总效应。
处理面板数据的FMM模型代码与结果解读示例:
1. 导入面板数据
假设面板数据文件名为“panel_data.dta”,包含两个变量“id”和“y”,其中“id”为面板数据的单位编号,“y”为面板数据的观测值。
```
use panel_data.dta, clear
```
2. 进行FMM模型估计
在Stata中,可以使用fmm命令进行FMM模型估计。下面的代码指定了三个混合成分,并使用默认的最大似然估计方法进行估计。
```
fmm y, k(3)
```
3. 检查模型拟合优度
可以使用fmmcheck命令检查模型拟合优度。下面的代码对模型进行了检查,并得到了模型拟合优度的统计量。
```
fmmcheck
```
4. 导出估计结果
可以使用estimates命令导出估计结果。下面的代码将估计结果导出到一个名为“fmm_results.txt”的文本文件中。
```
estimates save "fmm_results.txt", replace
```
5. 解读估计结果
估计结果包括每个混合成分的权重、均值和方差等参数。下面是估计结果的示例解读:
```
FMM model fitted using ML
Number of mixture components (k): 3
-----------------------------------------------------------
Component | Weight |  Mean  | Variance | 1/Weight | LogLike
----------+---------+----------+----------+----------+-------
   1 | 0.3929 | 1.23850 | 0.00000 | 2.5477 | -126.01
    2 | 0.3571 | 2.78448 | 0.00000 | 2.8000 | -127.92
   3 | 0.2500 | 3.90344 | 0.00000 | 4.0000 | -132.49
------------------------------------------------------------
Log likelihood = -126.01
BIC = 260.51
AIC = 258.01
```
其中,“Weight”表示每个混合成分的权重,“Mean”表示每个混合成分的均值,“Variance”表示每个混合成分的方差,“1/Weight”表示每个混合成分的倒数权重。Log likelihood、BIC和AIC用于评估模型的拟合优度。在这个例子中,模型使用了三个混合成分,每个混合成分的权重、均值和方差都被估计出来了。
在fmm模型中,每个个体都有一定的概率属于不同的混合成分。可以使用stata中的predict命令来查看每个个体属于不同混合成分的概率。具体步骤如下:
1. 首先,使用fmm命令估计fmm模型并保存结果。
2. 使用predict命令来预测每个个体属于每个混合成分的概率。以下是一个示例代码:
```
predict p1 p2 p3 p4, pr
```
其中,p1p2p3p4分别代表每个个体属于第一、第二、第三和第四个混合成分的概率,pr选项表示预测概率。
3. 查看预测结果。可以使用browse命令或list命令来查看预测结果。以下是一个示例代码:
```
browse p1 p2 p3 p4
```
在结果中,每一行代表一个个体,每一列代表一个混合成分的概率。可以根据概率大小来判断每个个体属于哪个混合成分。
需要注意的是,每个混合成分的概率之和应该等于1。如果发现某些个体的概率之和不等于1,可能是由于模型拟合不充分或者数据存在问题。
与fmm模型类似的模型包括:
1. 混合效应模型:混合效应模型是一种广义线性混合模型,它可以同时考虑固定效应和随机效应。与fmm模型相似,混合效应模型也可以对数据进行聚类,同时考虑不同的组别之间的差异。
2. 隐马尔可夫模型:隐马尔可夫模型是一种基于概率的序列建模方法,它可以用于对序列数据进行建模和分类。与fmm模型相似,隐马尔可夫模型也可以对数据进行聚类,但是它假设数据是由一个隐藏的马尔可夫链生成的。
3. 混合自回归模型:混合自回归模型是一种时间序列建模方法,它可以对时间序列数据进行聚类和预测。与fmm模型相似,混合自回归模型也可以考虑不同的组别之间的差异,但是它是基于时间序列数据进行建模的。
这些模型与fmm模型的异同点如下:
1. 聚类方式不同:fmm模型是一种非参数聚类方法,它不需要事先指定聚类的数量。而混合效应模型、隐马尔可夫模型和混合自回归模型都需要事先指定聚类的数量。
2. 数据类型不同:fmm模型适用于各种类型的数据,包括连续型、离散型和混合型数据。而混合效应模型、隐马尔可夫模型和混合自回归模型更适用于特定类型的数据,如面板数据、序列数据和时间序列数据。
3. 建模方式不同:fmm模型是一种非参数建模方法,它不需要对数据的分布进行假设。而混合效应模型、隐马尔可夫模型和混合自回归模型都是基于特定的概率分布进行建模的。

一些社群学术讨论:1.“显著不显著的后背是什么, 非(半)参估计里解决内生性”,2.“计量社群里关于使用交互项还是中介效应分析开展机制研究的讨论”,3.“为啥面板数据回归中, 即使X对Y的解释程度很大, 但R-square一般都很小?”,4.多期DID中使用双向固定效应可能有问题! 又如何做平行趋势检验? 多期DID方法的最新进展如何?,5.收入和年龄等变量是将其转化成有序离散变量还是当成连续变量进行回归呢?6.控制变量就能影响结果显著性, 所以存在很大操作空间, 调参数是常用手段吗?7.回归中常数项显著说明模型中有遗漏变量问题?8.审稿人有义务告诉你回归中可能的遗漏变量么?9.针对很多实证问题的讨论, 随手保存的部分内容以飨学者,10.未引入交互项主效应为正, 引入后变为负, 解释出来的故事特别好, 主效应符号确实增强了故事性,11.双向固定效应多期DID最新进展和代码汇总, 关于控制变量和固定效应选取的讨论,12.逐年匹配的PSM-DID操作策略, 多时点panel政策评估利器,13.多期DID前沿方法大讨论, e.g., 进入-退出型DID, 异质性和动态性处理效应DID, 基期选择问题等,14.针对经济学领域中介效应模型问题的回应和理性讨论,15.讨论a(b)对b(a)的新方向论文, 经济学期刊分区问题, 3个机制存在时计量模型设计问题,16.如果解决了内生性, 那么是否意味着证实了变量之间的因果关系呢?17.解释变量提升一个标准差,被解释变量提升几个百分比呢?18.关于DID中对照组与处理组的比例问题?19.双重差分法和事件研究法的区别主要在哪里?20.双重差分法和事件研究法的区别主要在哪里?21.统计上不显著的变量表明该变量对结果变量没有影响吗?22.IV与Y在理论上无直接关系, 但用Y对IV做回归发现IV是显著的, 这是咋回事?23.Heckman模型和工具变量IV之间的差异?

一些前人经验帖,例如,1.经济学高质量论文(AER)写作"三步曲", 2万字宝贵干货,2.如何从审稿人角度写出一篇好的经济学文章?3.震撼回信! 邹恒甫教授回答中国中青年经济学者100问精选 (一),4.视频, 《计量经济学: 经济学实证研究方法论》,5.讲座视频: 模型内生性分类, 检验与处理,6.一个完整的实证分析框架: 从数据, 模型到结果检验,7.Katz&Goldin: TOP5刊上撰写论文的十个最重要的规则,8.顶级博士生如何开始经济学研究? 伦敦政治经济学院P.hd必读,9.用得好理论,你才能成为实证文章写作高手,10.经济学实证研究中常见的40个误区, 你掌握了可以发AER,11.实证经济学研究如何选题?前辈的总结和自己的实践经验,12.写论文的三个层次, 有-精-深环环相扣, 实在精彩!13.美国教授告诉你模型在微观实证研究中到底重不重要,14.芝加哥大学教授的经济学博士生论文写作指南,15.我是如何把文章发表到Top5期刊上的, 39点过来人的经验和教训!16.怎样用好最重要的几年? 给北大经济学研究生谈学习经验,17.22年诺奖得主Dybvig关于“做顶级经济学研究的一些经验想法”!18.5张Slides学习如何写高质量论文的各部分
拓展性阅读:"实证研究13篇"功夫秘笈, 中青年学者研究必备锦囊!关于各种因果识别方法的120份经典实证文献汇总”,②哈佛大学新修订完成的因果推断经典大作免费下载!附数据和code,③因果推断的统计方法总结, 177份文献政策评估的计量方法综述, 包括最新因果推断方法在教育领域使用IV, RDD, DID, PSM多吗? 使用具体文献,⑥看完顶级期刊文章后, 整理了内生性处理小册子,⑤工具变量精辟解释, 保证你一辈子都忘不了,⑦DID, 合成控制, 匹配, RDD四种方法比较, 适用范围和特征,⑧关于双重差分法DID的32篇精选Articles专辑!关于(模糊)断点回归设计的100篇精选Articles专辑!匹配方法(matching)操作指南, 值得收藏的16篇文章等,⑪MIT广为流传的政策"处理效应"读本,⑫DID的研究动态和政策评估中应用的文献综述,⑬最新政策效应评估的四种方法,⑭政策效应评估的基本问题,15.海归博导: 如果你想读我的博士生, 那请阅读并签署这份指导协议!16.TOP刊: 如果你找不到ideas,那就步行或淋浴吧

下面这些短链接文章属于合集,可以收藏起来阅读,不然以后都找不到了。

4年,计量经济圈近1500篇不重类计量文章,

可直接在公众号菜单栏搜索任何计量相关问题,

Econometrics Circle




数据系列空间矩阵 | 工企数据 | PM2.5 | 市场化指数 | CO2数据 |  夜间灯光 官员方言  | 微观数据 | 内部数据
计量系列匹配方法 | 内生性 | 工具变量 | DID | 面板数据 | 常用TOOL | 中介调节 | 时间序列 | RDD断点 | 合成控制 | 200篇合辑 | 因果识别 | 社会网络 | 空间DID
数据处理Stata | R | Python | 缺失值 | CHIP/ CHNS/CHARLS/CFPS/CGSS等 |
干货系列能源环境 | 效率研究 | 空间计量 | 国际经贸 | 计量软件 | 商科研究 | 机器学习 | SSCI | CSSCI | SSCI查询 | 名家经验
计量经济圈组织了一个计量社群,有如下特征:热情互助最多前沿趋势最多、社科资料最多、社科数据最多、科研牛人最多、海外名校最多。因此,建议积极进取和有强烈研习激情的中青年学者到社群交流探讨,始终坚信优秀是通过感染优秀而互相成就彼此的。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章