结构方程中的缺失数据处理讨论

结构方程中的缺失数据处理 EM FIML MI 软件操作与理论探讨李晓煦2006 10 06香港中文大学教育心理系lixiaoxu cuhk edu hk 第一部分 软件操作 LISREL8 7 2 专业的结构方程分析软件FIML EMSAS9 1 3 胜任大规模的数据 高强度的运算MI EMR2 3 1 开源的公共软件 灵活的自由编程EM MI LISREL提供的例子 浏览LISREL的安装目录打开子目录 MISSINGEX 把数据文件grant dat和程序文件MISSEX2A ls8复制到自己创建的临时练习目录中 在应用任何一方法之前 检查数据是否因为缺失而错列看最后几列数据的缺失率是否特别大检查缺失值的标记 把不合理的数值改为缺失用直方图 散点图概览 尤其是数据量很大时 Excel中的数据预览 如何导入自由格式 列对齐格式数据到Excel 数据 获取外部数据 导入文本文件 如何在Excel中看直方图与描述统计量 工具 加载宏 勾选 分析工具库 确定 工具 数据分析 选需要的统计分析功能 点 确定 在弹出窗口点 帮助 当数据量大于65526或者变量多于256时 需要用LISREL或者SAS R之类的软件 LISREL中的数据预览 导入数据 File ImportData 选数据文件 确认 设定临时数据文件名 确认 手工设定变量个数 首行是否变量名看多变量散点图 单变量直方图Graphs 留意散点图中对鼠标右键功能的提示 留意直方图中的样本量NLISREL中需要定义缺失值Data DefineVariables 选变量 点MissingValues LISREL图形界面中的缺失值设置 全部的缺失值都写在下方Globalmissingvalues一栏 如果写在上方Missingvalues栏 Lisrel8 7 2会在某些场合不认 除了设置缺失值 DefineVariables窗口中 还要点VariableTypes设置变量类型 EM 的两层意思 Expectation Maximization EM 是源自缺失数据处理的一种参数估计算法 在许多广泛应用的模型 比如HLM 上有重要的应用缺失数据中的EM方法特指用EM算法从含缺失的数据估计出协方差 相关系数矩阵 均值向量 大部分多元统计模型只需要协方差和均值输入 SEM只是其中一种 LISREL8 7 2中的EM方法 标记好缺失数据后 就可以在图形界面作EM估计 Statistics MultipleImputation 在弹出的窗口按缺省设置点run 拷贝编辑 out文件输出的协方差矩阵 作为 ls8文件的输入数据MI实际上是MultipleImputation的缩写 但LISREL8 7 2并不提供完整的MI功能 EM是三个方法中最容易实现的方法 所以FIML和MI都缺省地利用EM方法来提供迭代的初值 什么是FullInationMaximizing Likelihood 与EM MI方法不同 FIML缺失数据方法只针对SEM 假如所有的观测缺失的变量都相同 等同于缺失的变量从模型里去掉 按缺失的模式把所有的观测分组 每组内的数据缺失的变量都相同 分组建模 再限制各组的参数相等 就是FIML方法 FIML方法的具体实现变化很多 不同的软件有所差别 LISREL8 7 2中的FIML法 FIML方法不计算协方差矩阵 而是直接对样本数据建模 看例子MISSEX2A ls8DANI 6 MI 9RAFI GRANT datRA就是Rawdata FI就是File 这一句取代了通常CM KM语句的协方差矩阵输入 此外 在DA句中MI就是MissingValue 表示数据中 9用来标记缺失数据 MultipleImputation方法 与SingleImputation对比 SingleImputation就是把所有缺失位置给一个修补的数值 用修补的结果建模MultipleImputation就是按某种特定的随机抽样法则去修补 对多个修补的版本分别建模 然后汇总各个版本的参数估计结果 SAS中的MI与EM方法 SAS是昂贵的商业软件 胜任大规模 比如样本量超过10万 或高运算量的数据处理与统计 SAS的帮助文档内容翔实 范例很具体 但规模太大 组织稍有些乱 初学者往往不能迅速查到 MI方法适用于一般的多元统计模型 比如多层分析 SAS9的MI方法 附带EM 子程序是ProcMI 能提供原始数据替算缺失值的多组采样版本 此外还提供了ProcMIANALYZE用于合并各个采样版本对应的模型估计结果 SAS提供的EM与MI的范例 EM方法的范例EM是适用一般多元统计模型的缺失数据处理方法 最后输出的是均值与方差矩阵的 无偏 估计值 MI方法的范例MI输出的中间结果是原始数据替算缺失值后的多个 缺省为5个 采样版本 这些版本的数据逐一用于模型估计 得到的估计参数分为两类 一类是均值估计 一类是协方差 方差估计 这两类参数都输入给ProcMIANALYZE汇总为最后的结果 例子中做的是多元回归模型 SAS中分析结构方程模型的子程序是ProcCALIS 参考 例子中的ProcMIAnalyze中要把旧版本的var改成新版本的modeleffects SAS的MI范例解析 原始含缺失的数据 ProcMI 抽样m份修补的数据 模型估计 m份参数估计结果 ProcMIAnalyze 合并一份最终结果 R中的EM MI方法 Copyleftv s Copyright Copyleft 或译为 公共版权 版权左派 Copyleft软件提供源代码 允许用户修改 传播 但禁止化公为私 任何人利用Copyleft源代码创作的软件也必须按Copyleft条款发布 但只限于软件 不包含书籍文章 R程序任何的扩展程序包都免费并开放源代码 但关于R的文章或书籍仍可以有版权 参考 https secure wikimedia org wikipedia zh wiki Copyleft 在R中安装norm程序包 要在R中应用EM方法 需要安装专门处理缺失数据多元统计的norm程序包 norm包的主页是 cran r project org src contrib Descriptions norm html可以下载norm压缩包 把压缩包里的norm文件夹保存到R安装目录的子目录 library 下 也可以在主窗口菜单下选择更新网站的镜像Packages SetCRANMirror 然后点Packages InstallPackage s 在弹出的程序包选项里选择需要添装的项目 在R中启动程序包 每次启动norm程序包 需要在主窗口菜单点Packages Loadpackage 在弹出的窗口中选norm 然后点确认 在命令窗里输入 help em norm 回车 弹出的帮助窗口解释em norm的用法 首先从最后一段的实例入手 这段例子可以直接copy运行 得到EM估计的协方差矩阵 data mdata 这一句把数据框mdata载入 sthetahatgetparam norm s thetahat corr TRUE r lookatestimatedcorrelations 1 2 3 4 5 1 1 000000000 88753257 0 096423420 48891760 7145953 2 0 887532571 000000000 093452970 51977210 5429959 3 0 096423420 093452971 000000000 2930083 0 3598209 4 0 488917590 519772070 293008261 00000000 3029066 5 0 714595290 54299589 0 359820940 30290661 0000000 R中的EM方法 中的数据框 agehageweduinckid1343012400001245441660150334242175530024302212602002553461065800463335123450027674412835005828281641000393028151500001043NANA412602113430175500011240NA7670503136755NA78000314343016NA215252612NA1164440206780021736NA18832001184237NANA319222273200022038NA02500032165NA57000042234361285000123403516NANA2438381895000225413712NA2 在命令窗口输入 mdata回车 看这个例子所用的数据 其中NA在R中标记缺失数据 实际应用中 用户还需要掌握与R交换数据的技术 把自己的数据输入到R形成例子中的mdata数据框 把计算出来的相关系数矩阵存成外部文件 建议初次接触R的读者首先花一个学时 通过在R中作练习 学习李东风老师的在线入门讲义前半部分 至 输入输出 一节 R中的 缺失模式 报告 注意语句 s prelim norm mdata dopreliminarymanipulations输入s回车看这个预处理的结果 1 2 3 4 5 1411111410111111011110011311101111001111100 1 2 3 4 5 1 0 53008882 0 63531440 0 1731410 0 8248034 1 1088319 2 0 410391341 058857330 67332600 11215610 6652991 14 0 188096030 332783731 09655951 7326544 0 2217664 15 0 01709964NA 1 23122460 43300080 6652991 18 2 12035526NA 1 65445810 57017361 5523647 19 2 291351652 38999225NA0 94216740 6652991 20 0 23939495NANA 0 7662143 0 2217664 R的MI方法与sem包 R的norm包还提供了应用于一般MI方法的子程序 在命令窗里输入help mi inference 和help imp norm 看相关的帮助 更专业的MI方法软件包是mitools 在R中分析结构方程模型 需要安装运行sem程序包 参考Fox J 2006 StructuralequationmodelingwiiththesempackageinR StructuralEquationModeling 13 465 486 第二部分 理论背景与方法比较 理念与现状Rubin的理论框架EM FIML MI各自的原理三种方法对比无偏性与效率软件界面便利性相互关系实质性困难 现状 缺失数据常见 令人满意的处理报告却罕见 最糟糕 修饰数据为整齐 不报告缺失数据差强人意 报告用列删法 LD 对删法 PD 或者单次替算 SI 法专业水准 采用近年受到推荐的FIML EM或者MI方法 不同报告背后的理念对比 整理修饰的数据信息不完整 形式整齐含缺失的原数据形式不整齐 信息完整 影响专业方法普及的因素 软件界面对方法普及作用最关键最直接的因素是审稿人的标准 正在变化不理想的方法并不是在所有情况下都必定导致致命错误 不同缺失模式的实际例子 学生可能因为漏交答题纸而没有成绩 可能因为平时作业成绩优秀被豁免参加考试 可能因为某一科发挥太差而放弃剩下科目 可能因为看到考卷太难而索性交白卷 Rubin经典框架的思路 最大似然估计是否可以不受缺失机制影响 只要缺失模式的概率由模式中观测位的变量值确定 独立于缺失位的值IgnorableMissingMissingatRandom MAR MCARMNAR MCAR 缺失模式的概率与任何变量值无关MNAC No