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參數用於控制是否進行零方差檢驗。如果數據是零方差,說明數據完全一樣,沒有分析的意義。因此默認是進行檢查。通過檢查一旦發現零方差,將會停止后續分析,並在結果文件中輸出樣本零方差信息。不檢查的情形較為罕見,個人認為可能在防止個別變量零方差阻礙整個分析上才會關閉檢查。





