Stata中如何对数据集除ID列外所有变量执行PCA?遇观测值不足错误
Stata做PCA报"insufficient observations"错误的解决办法
为啥会报错?
说白了就是有效观测数不够——要么是你选的变量里缺失值太多,删完有缺失的观测后剩下的数量撑不起PCA计算;要么是有效观测数比你要分析的变量数还少,协方差矩阵根本算不出来。
具体怎么解决
- 先查缺失值情况:
敲命令misstable summarize,就能看到所有变量的缺失值数量和占比。重点看那些非ID变量,有没有单个变量缺一半以上,或者好几个变量同时缺的情况特别严重。 - 别逐个选变量,批量处理:
假设你的ID列叫id,先把除它之外的变量存成一个宏:
然后直接用这个宏跑PCA:ds id, not local pca_vars `r(varlist)'
这样既省事儿,也能一次性看到所有目标变量的有效观测数够不够。pca `pca_vars' - 处理缺失值:
- 如果缺失不多,PCA默认会自动删掉有缺失的观测(
casewise选项),但删完还是不够的话:- 把缺得特别多的变量直接删掉:比如某个变量90%都是空值,敲
drop 变量名再跑。 - 用多重插补补缺失值(这个方法更严谨):
mi set flong mi register imputed `pca_vars' mi impute chained (regress) `pca_vars', add(5) mi estimate: pca `pca_vars' - 临时分析的话,也可以用均值补(正式分析别用这个):
replace 变量名 = mean(变量名) if missing(变量名)
- 把缺得特别多的变量直接删掉:比如某个变量90%都是空值,敲
- 如果缺失不多,PCA默认会自动删掉有缺失的观测(
- 调整变量数和观测数的比例:
PCA要求有效观测数得比变量数多(至少多几个,结果才靠谱)。比如你有20个变量,有效观测数至少得25个以上才行。要是实在凑不够观测数,就先做相关性分析,把和其他变量高度相关的变量删掉,减少变量数量后再跑PCA。
内容的提问来源于stack exchange,提问作者Aritra
相关产品推荐
相关产品推荐

