Mplus应用说明 B_T_002_02 基础语法与应用第一篇
1. 基础语法与应用
1.1. 模型逻辑
建立因变量和潜变量之间的逻辑关系。也就是打算建立的模型结构。按照模型结构梳理数据,准备好数据文件,编写模型代码和估计方式,运行,获取各路径的参数,分析结果,推出结论。因此,Mplus运行的逻辑就是从关系模型到运算结果,中间采用Mplus程序进行逻辑组织,也就是从逻辑代码出发或者利用Diagrammer(Mplus提供的关系图制作工具)从关系图出发,运行结果,并标注到关系图上,以便为相关研究提供结论。
Mplus提供了向导工具,对SEM,EFA等采集必要信息,自动生成模型代码,供运行查阅结果。具体见Mplus->Language Generator下各菜单功能。算是一个发展方向。
Diagrammer可以直观构建模型,并同步编写代码。
1.2. Mplus语言结构
Mplus采用标志段加简单语句构成语言结构,不是通用语言结构,不能进行特定算法逻辑表达,可以看作是内部实现的运算功能的参数表。标志段,Mplus称为命令(command),冒号隔开后按照命令的种类提供相应参数,用分号将各参数设置隔开。代码段每行最多不得超过90个字符,如果超过,将被截断,而且截断后报错语句不完整。
Data、Variable是所有Mplus分析程序必须有的两个命令。 !*作为注释开头,直到*!,首尾之间内容都是注释,不进行解释运行。在编辑器中使用时,他不会识别到全部注释并以正确的颜色标记,但是不影响正常使用(单行注释是没有问题的)。这个bug可以给Muthén兄弟还是父子俩提提。命令和参数都可以简写成四个字以上的形式。变量、关键字没有大小写区分,也就是大小写随意。例如定义变量时:
Vari: names are Y1 XY1-XY4;
model: y1 on xy1,xy3-xy4;
“-”作为序列关键字,不论是在定义变量名称还是在模型使用名称时,都可以用他来简写序列名称,如XVal1-XVal3和XVal1 XVal2 XVal3等价。
TITLE命令用于为分析提供标题。
DATA命令用于提供有关要分析的数据集的信息。
VARIABLE命令用于提供有关要分析的数据集中变量的信息。
DEFINE命令用于转换现有变量和创建新变量。
ANALYSIS命令用于描述分析的技术细节。
MODEL命令用于描述要估计的模型。
OUTPUT命令用于请求未作为默认值包含的其他输出。
SAVEDATA命令用于保存分析数据、辅助数据和各种分析结果。
PLOT命令用于请求观察数据和分析结果的图形显示。
MONTECARLO命令用于指定蒙特卡洛模拟研究的详细信息。
1.3. Title命令
Title语法:
Title: 随便你些什么都行,但是不能把冒号和Mplus关键字放在一起用。这些关键字包含:title, data, variable, define, analysis, model, output, savedata, montecarlo, plot等。不跟冒号的时候,关键字是可以出现的。
Title也遵循代码段不超过90个字符的限制。超过后不会引起什么问题,会收到相应警告,说可能会被截断,但不影响正常运行。所以,Title的内容不要太长。
1.4. Data命令
Data语法:
Data:
File is xxx
Type is xxx
Nobservations are xxx
......
Data命令用于提供数据类型、缺失值等信息,最大记录数量为10000。除了缺失值(missing),数据都应该是数值型的。
1.4.1. File参数
File语法:
File is xxx(FileName);
指定文件名字及位置。如果文件路径中含有空格,那么文件路径必须用双引号引起来。相对路径符合微软相对路径命名习惯。以”..”表示当前目录。
File is c:\analysis\data.dat; !*没有空格的路径可以直接用。*!
File is “c:\Analysis Results\data.dat”; !*路径中存在空格*!
File is “..\Analysis Results\data.dat”;!*当前目录下Analysis Results文件夹下面的数据文件,相对文件路径是相对程序文件lnp来说的,所以..\temp.dat 和 temp.dat是一个位置*!
文件名字可以是任意名字,任意扩展名。“what happen.whp”也是合法的文件名。
文件必须是ASCII的,不能二进制、不能unicode(除兼容部分,其他都可能隐藏问题)
1.4.2. Format参数
Format语法:
Format is (format Statement,默认Free);
1.4.2.1. 自由模式
语法:
Format is free;
默认是自由模式(free),不写Format参数的时候就是默认自由模式。
数据可以被逗号,空格,制表符等作为间隔标记。可以是其中任意一种,或者多种。随意写都行。例如“1.25,0.32 0.54 0.33,0.62 0.1”是一个合法的自由格式数据。
数据文件的编码规则是Names参数规定了多少字段,那么一个记录宽度就按照该数量进行读取,数据文件必须包含完整的记录数据,不能多或者少。
例如:Names are Y X1-X5定义了6个数据字段,那么自由格式条件下,一个记录就必须有6个字段数据构成,整个数据文件中数据量必须是6的倍数,例如有120个数据,则,含有20个记录,也就是20个观测。如果不是6的整倍数数据,那么会收到错误提示:“Unexpected end of file reached in data file.”。自由模式下,数据读取只按照定义的字段数量进行,和数据存放的格式无关(也就是换行字符被认为是默认的间隔标记)。但是,应注意,Mplus读取数据的逻辑是每次读取一个记录,这个记录里面所有字段的分隔符可以是任何合法的分隔符,但是一旦读取完成一个记录后,本行后续所有数据将不被读取,跳转到下一行。
例如:Names are X Y Z;
对应的数据文件可以是:
11,12,13
21,22,23
31,32,33
也可以是:
11,12,
13,
21,
22,23,
31 32 33
但是,如果是:
11 12,13 21,22,23,
31,32 33
那么,第一行数据只会读取到13,后面的21,22,23将不会被读取。跳转到下一行后,31,32,33三个数据会作为另一个记录被读取。因此该数据文件只能读取两个记录(2观察数),且是11,12,13;31,32,33两组。
所以编辑数据文件的时候应当注意:
1、每行尽可能凑够一个记录的全部字段。多余的字段将被舍弃
2、每行数据凑不够足够字段,将跳转到后续行读取,直到读取完一个记录的全部字段,该行后续内容将被舍弃。
3、Names参数定义了数据读取的字段数量,而不是UseVariable定义的数量。
Summary类型的数据文件必须是Free的。
1.4.2.2. 固定模式
固定模式对数据位置,内容,解析方式进行了明确,所以读取速度快。但是自由模式的数据容易制作,也便于从其他软件导出,所以一般,建议使用Free模式。
语法:
Format is (FormatState1),(FormateState2),...;
Format statements常用的有:F、x、t、/。是一种类Fortran的数据结构描述。定了一个数据字段怎么读取。
固定模式用的类Fortran模式描述符F, I, G, E, x, t, /等是可以接受的,通常使用的是F, t, x, /。具体语句类似:
Format is 5F4.0, 10x, 6F1.0;!*定义了11个数据结构,读取完五个字段后跳10个字符读取6个1位的变量字段。*!
固定模式存在的主要可能就是从其他类Fortran工具获得的数据,或者能够通过类Fortran数据定义方式解析数据,都属于古代技术。
F语法:
zzFxx.yy 表示:
1、该字段一共有xx位,如F5.3表示该字段数据有5位
2、该字段一共有yy位小数,如F5.3表示该字段数据小数点后有3位,小数点前有2位,比如32.234。
3、一共定义了zz个变量,变量的结构全部是Fxx.yy,相当于缩写。例如5F5.3等价为:F5.3,F5.3,F5.3,F5.3,F5.3
4、当没有yy的时候,就只按照xx读取位数,如果数据本身有小数点,就能读出小数部分。例如:对34.234进行F6的读取就是:34.234,F4的读取就是34.2。小数点占1位。
x语法:
x表示将跳过n个字符(中文为2字符)后开始按照后续定义读取数据。例如:
FORMAT IS 5F4.0, 10x, 6F1.0;
表示按照先读取5个4位不含小数的变量,向后跳10个字符,然后读取6个1位不含小数的变量。因此,x不定义数据,而是确定向后移动若干量。
t语法:
t表示从第m个字符开始读取数据。例如:
FORMAT IS 5F4.0, t130, 6F1.0;
表示按照先读取5个4位不含小数的变量,然后从第130个字符处开始读取6个1位不含小数的变量。因此,t也不定义数据,而是确定后续读取数据的起点。
/语法:
/是一个神奇的开关,他的意思是,跳到下一个记录。用于纯手工访问记录数据。我个人感觉,基本用不上。除非是需要在多个数据上进行选择,如数据文件是一个,微调选择何种数据,就可以通过“/”方便的跳过记录。“//”表示跳过两个记录(两行),一次类推。
1.4.3. Type参数
Type参数辅助File参数确定数据文件的种类。Mplus可以对直接数据(称为独立数据Individual Data,ID)进行分析,也可以对协方差、相关系数、均值、标差等二次数据(称为摘要数据,SUMMARY DATA,SD)进行分析。所以需要Type参数告知Mplus具体的数据种类是什么。
Type语法:
Type is (TypeStatements1) (TypeStatements2) ...;
TypeStatements为种类参数,共分3类,共9种,分别描述如下。
1.4.3.1. 独立数据文件
Type is Individual;
数据矩阵的行表示一个记录(一个观测值),列为变量。Type的默认参数。可不写。也就是无Type参数和“Type is Individual”是等效的。
Individual不可以和其他参数混用,独占性参数。不能与摘要数据、编制数据参数同时出现。
1.4.3.2. 摘要数据
如果数据文件不是直接数据文件,而是协方差矩阵、相关系数矩阵等摘要数据(SUMMARY DATA,SD),就需要给确定是COVARIANCE, CORRELATION, FULLCOV, FULLCORR, MEANS, STDEVIATIONS六个参数中的一个或者几个。摘要数据(SD)只能是自由模式的数据。由于不知道观测数量,所以如果是摘要数据文件,还需要通过Data命令中的NObservations来告知MPlus具体的观测数量,以便开展需要样品量的计算。NObservations还可以是指定观测数(如:NObservations=100),即便数据文件里面有更多的观测数,MPlus也只会计算NObservations指定的前100个观测。
摘要数据的六个参数Covariance、Correlation、FullCov、FullCorr、Means、Stdeviations。
Covariance:下三角协方差数据;
FullCov:全协方差数据(上下三角都在);
Correlation:下三角相关系数矩阵;
FullCorr:全相关系数矩阵(上下三角都在);
Means:均值数据,以分隔符(任意合法分隔符)分隔的数据,一行读完;
Stdeviations:标差数据,以分隔符(任意合法分隔符)分隔的数据,一行读完;
Cov 和Corr两种矩阵数据、均值、标差可以都出现在数据中。
例如:
Type is Correlation Means Stdeviations;
按照该参数,第一行为均值,第二行为标差,第三行为相关系数矩阵。(目前理解,数据是按照参数顺序来,但是矩阵数据必须放后面,无论参数写前面或则后面。这个需要进行测试,待补充)。
例如,有五个因素,那么就有五个均值,五个标差,五行的相关系数。
特殊的:矩阵的读取与Individual数据读取逻辑一样,矩阵数据的读取按照要素数量,一直往下读取,直到读取完成。因此,矩阵数据也可以合并成一行来读取。
例如:
四要素的下半角矩阵
1.0
0.23 1.0
0.28 0.99 1.0
0.78 0.86 0.45 1.0
可以写成一行:
1.0 0.23 1.0 0.28 0.99 1.0 0.78 0.86 0.45 1.0
1.4.3.3. 编制数据
语法:Type is MenteCarlo/Imputation。每个单独使用。
采用蒙特卡洛或者多重插补方法改编、填补的数据在本文中称为编制数据。编制数据参数包含MonteCarlo、Imputation两个。
MonteCarlo参数值
使用该参数值,表示将要对1)采用MonteCarlo命令中(此处章节的MonteCarlo是Data命令中Type参数的MonteCarlo参数值,MonteCarlo命令见后续章节)RepSave参数保存的数据进行分析,或者2)其他软件Monte Carlo法生成的数据进行分析,应用于Monte Carlo研究中,其输出结果为Monte Carlo摘要格式。
使用该值后,在File参数中指定的文件应当含有类似如下的数据的文件名清单,而不是数据:
Data1.dat
Data2.dat
......
DataN.dat
从Data1.dat到DataN.dat数据文件的格式必须一致,能读取完全相同的数据。如果含有路径,使用File参数中对文件路径的规则进行。
输出结果包含每个参数的总体值、复制过程中参数估计的平均值、标准偏差、标准误差的平均值、每个参数的均方误差(M.S.E.)等结果。
Imputation参数值
使用该参数时,所针对的数据都是通过Monte Carlo法进行多重插补过程创建的数据,修补了缺失的信息(也就是数据中如果存在缺失的数据,就用其他数据存在的对应字段的数据估计一个大众化的数据作为缺失的代替,由此可以使用该笔记录中其他有效的信息。某些时候比全部删掉缺失数据的记录好)。类似MonteCarlo参数,一旦指定后,其数据文件是一个插补数据文件清单,清单中的文件都是用多重插补法创建的数据文件。在File参数中指定的文件应当含有类似如下的数据的文件名清单,而不是数据:
ImpData1.dat
ImpData2.dat
......
ImpDataN.dat
1.4.4. NObservations参数
语法:
NObservations=NumberOfObservations;
NumberOfObservations取整数,填入其他内容将触发错误:Numerical format error for NOBSERVATION option.
分析摘要数据的时候使用该参数,以提供观测数量(所有需要除以N的计算或自由度计算都需要观测数)。如果是使用独立数据文件,也可以设置该参数,但表示的意思是指定观测数量,Mplus将对数据的前N个观测进行分析,其他观测数据将被忽略。如果数据观测数量不足设置的观测数量,不会报错,将会按照实有数据观测量进行计算。
例如:一个数据文件有5组观测记录,不指定NObservations时Mplus按照5个记录进行分析,指定NObservations<=5时按照NObservations指定值进行分析,NObservations>5时,Mplus按照5个记录进行分析。
1.4.5. NGroups参数
语法:
NGroups=NumberOfGroups;
默认值为1。
用于对摘要数据进行分析。该参数指定了多组分析的组数。具体见多组分析。在独立数据分析中使用NGroups参数无效,该参数会直接被忽略,甚至参数值为非正整数都不会引发错误。
1.4.6. ListWise参数
语法:
ListWise=On/Off;
默认是Off(即不给出ListWise参数)。
默认情况下,如果一个观测记录中出现某个或者多个变量缺失(字段以缺失符占位),则用其他数据估计缺失的值。如果要求缺失数据不参加分析,则使用On参数值。
1.4.7. SWMatrix参数
语法:
SWMatrix=MatrixFileName;
MatrixFileName为信息矩阵文件名,服从File参数对文件路径要求。
当Analysis命令的Type参数设置TwoLevel参数范围的时候,需要提供样品统计信息矩阵的时候,利用SWMatrix进行指定;
当Data命令中Type=Imputation时,也可使用SWMatrix设定。如同数据文件为Imputation清单一样,此时指定的是一个内容为样品统计信息文件清单的文件名。
1.4.8. Variances
语法:
Variances= Check/NOCheck;
默认值为Check;
Variances参数用于控制是否进行零方差检验。如果数据是零方差,说明数据完全一样,没有分析的意义。因此默认是进行检查。通过检查一旦发现零方差,将会停止后续分析,并在结果文件中输出样本零方差信息。不检查的情形较为罕见,个人认为可能在防止个别变量零方差阻碍整个分析上才会关闭检查。