🍎 連享會主頁:lianxh.cn
New! lianxh 命令發布了: GIF 動圖介紹
隨時搜索 Stata 推文、教程、手冊、論壇,安裝命令如下:
. ssc install lianxh
連享會 · 最受歡迎的課
🍓 2021 Stata 寒假班
⌚ 2021 年 1.25-2.4
🌲 主講:連玉君 (中山大學);江艇 (中國人民大學)
👉 課程主頁:https://gitee.com/arlionn/PX
作者: 王如玉 (中國人民銀行金融研究所)
郵箱: 15242968@qq.com
編者按: 本文摘譯自以下文章,特此致謝!
Source: Anatolyev S, Skolkova A. Many instruments: Implementation in Stata[J]. The Stata Journal, 2019, 19(4): 849-866. -Link-
溫馨提示: 文中連結在微信中無法生效。請點擊底部「閱讀原文」。
目錄
1. 背景
2. LIML 方法
3. mivreg 命令
4. 模擬運行案例
4.1 數據生成
4.2 蒙特卡洛模擬
4.3 運行結果比較
5. 真實數據案例
6. 參考文獻
7. 相關推文
1. 背景
在實證研究中,工具變量經常被認為是解決內生性問題的有效方法。但是隨著理論發展,學者也發現在弱工具變量、以及多工具變量等情況下,兩階段最小二乘 (2SLS) 無法得到一致估計。由此,學者開始提出新的估計方法,例如有限信息最大似然法 (LIML)、以及偏差校正二階段最小二乘法 (bias-corrected 2SLS) 等,並在 LIML 方法基礎上,提出同方差和異方差不同情況下的模型。但上述方法並未推廣開來,直到 Stata 中 mivreg 命令的發布。
為此,本文將為大家簡要介紹有限信息最大似然法 (LIML) 和 mivreg 命令的實現。
2. LIML 方法
假定回歸方程如下:
其中,
其中,
其中,
2.1 同方差的情況其中,
數學上,可以等價為解以下問題:
其中,
但 LIML 估計值有一個缺陷,它的低階矩也是不存在的。Fuller (1977) 的校準解決了這個問題,如下式定義
令 LIML 或 FULL 的殘差矢量為
傳統的
偏誤校正的
在誤差正態性或
在誤差非正態性以及
2.2 異方差的情況同上,Fuller (1977) 對異方差穩健的 LIML 估計值,即 HLIM 估計值,進行了校準,校準後的估計值稱為 HFUL。
Chao 等 (2014) 將
其中,
這個改進版的
3. mivreg 命令
在 Stata 命令窗口中輸入如下命令,即可安裝 mivreg 命令,並獲取下文提到的案例的完整 dofile 。
net describe st0580, from(http://www.stata-journal.com/software/sj19-4)
net install st0580
net get st0580mivreg 命令的語句和參數簡單介紹如下:
mivreg depvar [indepvars] (varlist1 = varlist2) [if] [in] [, hom het robust fuller level(#)]
depvar 為被解釋變量,indepvars 為解釋變量,varlist1 為內生變量,varlist2 為工具變量;hom 為同方差的情況,使用 LIML (默認) 或 FULL (與 fuller 選項同時使用) 的估計值;het 為異方差的情況,使用 HLIM(默認)或 HFUL (與 fuller 選項同時使用) 的估計值;fuller 為 Fuller 校正,將得到 FULL (與 hom 選項同時使用) 或 HFUL (與 het 選項同時使用) 的估計值;level(#) 為置信區間設置,默認為 95%。4. 模擬運行案例4.1 數據生成
本節將用 Hausman 等 (2012) 生成的模擬數據集展示 mivreg 的使用。估計方程為:
第一階段方程為:
其中,
其中,
其中,同方差的情況下
值得注意的是,集中度 (concentration parameter) 是衡量工具變量強度的一種參數。設模型為
4.2 蒙特卡洛模擬蒙特卡洛模擬是使用計算機進行重複的隨機抽樣來產生模擬概率分布的數據。本文使用的 Stata 的完整模擬程序見前文提及的 dofile 。例如,同方差情形下的蒙特卡洛模擬,以及使用 mivreg 與 ivregress 命令以不同方法對模擬數據進行回歸的命令如下:
clear
set trace off
set matsize 10000
local portion = 1000 // 此參數表示一個步驟進行多少次重複迭代,如果想進行x次模擬,則在此輸入x/10
local launch = 0 // 此參數表示進行多少步驟,建議設為0
local i_step = 9
local i_start = `launch' * (`i_step' + 1) + 1
forvalues i = `i_start'/`=`i_start' + `i_step'' {
clear mata
scalar l = 30
set obs 400
matrix repl = J(`portion', 7, 0)
matrix pval_x = J(`portion', 9, 0)
matrix pval_x_c = J(`portion', 9, 0)
matrix pval_spec = J(`portion', 9, 0)
qui gen z1 = .
qui gen u2 = .
qui gen v1 = .
qui gen v2 = .
qui gen ee = .
qui gen x = .
qui gen y = .
qui gen one = 1
di `i'
local start_seed = `portion' * (`i' - 1) + 1
local end_seed = `i' * `portion'
forvalues k = `start_seed'/`end_seed' {
set seed `k'
scalar phi = 0.8
scalar gam = sqrt(32/_N)
tempname beta10 beta20
scalar `beta10' = 1
scalar `beta20' = 1
qui replace z1 = rnormal()
qui replace u2 = rnormal()
qui replace v1 = rnormal()
qui replace v2 = 0.86 * rnormal()
qui replace ee = 0.30 * u2 + sqrt((1 - 0.30^2) / (phi^2 + 0.86^4)) * (phi * v1 + 0.86 * v2)
qui replace x = gam * z1 + u2
qui replace y = `beta10' + `beta20' * x + ee
forvalues t = 2/4 {
if mod(`k', `portion') == 1 & mod(`i', `=`i_step' + 1') == 1 {
gen z`t' = z1^`t'
}
else {
qui replace z`t' = z1^`t'
}
}
forvalues t = 5/29 {
if mod(`k', `portion') == 1 & mod(`i', `=`i_step' + 1') == 1 {
gen d`t' = round(runiform())
gen z`t' = d`t' * z1
}
else {
qui replace d`t' = round(runiform())
qui replace z`t' = d`t' * z1
}
}
qui ivregress 2sls y one (x = z*), nocons // 2SLS
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 1] = beta[1,1]
qui estat overid
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 1] = r(p_basmann) // p-value for Basmann χ2 statistic
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 1] =r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 1] = r(p)
qui mivreg y one (x = z*), hom // non-robust LIML
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 2] = beta[1,1]
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 2] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 2] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 2] = r(p)
qui mivreg y one (x = z*), hom fuller // non-robust FULL
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 3] = beta[1,1]
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 3] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 3] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 3] = r(p)
qui mivreg y one (x = z*), hom robust // robust LIML
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 4] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 4] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 4] = r(p)
qui mivreg y one (x = z*), hom robust fuller // robust FULL
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 5] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 5] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 5] = r(p)
qui mivreg y one (x = z*), het robust // HLIM
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 4] = beta[1,1]
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 6] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 6] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 6] = r(p)
qui mivreg y one (x = z*), het robust fuller // HFUL
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 5] = beta[1,1]
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 7] = e(jpv)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 7] = r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 7] = r(p)
qui ivregress liml y one (x = z*), nocons // LIML
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 6] = beta[1,1]
qui estat overid
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 8] = r(p_basmann)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 8] =r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 8] = r(p)
qui ivregress gmm y one (x = z*), nocons // GMM
matrix beta = e(b)
matrix repl[`=`k' - (`i' - 1)*`portion'' , 7] = beta[1,1]
qui estat overid
matrix pval_spec[`=`k' - (`i' - 1)*`portion'' , 9] = r(p_HansenJ)
qui test x = 1
matrix pval_x[`=`k' - (`i' - 1)*`portion'', 9] =r(p)
qui test x = one = 1
matrix pval_x_c[`=`k' - (`i' - 1)*`portion'', 9] = r(p)
if mod(`k',10) == 0 {
di `k'
}
}
if `i' == 1 {
matrix many_repl = repl
matrix many_pval_x = pval_x
matrix many_pval_x_c = pval_x_c
matrix many_pval_spec = pval_spec
}
else {
matrix many_repl = many_repl \ repl
matrix many_pval_x = many_pval_x \ pval_x
matrix many_pval_x_c = many_pval_x_c \ pval_x_c
matrix many_pval_spec = many_pval_spec \ pval_spec
}
drop z1 u2 v1 v2 ee x y one
}
4.3 運行結果比較本節將比較在同方差、異方差情形下各進行 10000 次回歸的結果。
首先來看參數估計值。下表展示了 ivregress 計算的 2SLS、LIML 和 GMM 的估計值的模擬分布百分比,以及 mivreg 計算的 LIML、FULL、HLIM 和 HFUL 估計值的模擬分布百分比。
Estimator | Homoskedastic case | Heteroskedastic case
| 5% | 25% | 50% | 75% | 95% | 5% | 25% | 50% | 75% | 95%
command ivregress
2SLS | 0.93 | 1.06 | 1.14 | 1.23 | 1.35 | 0.85 | 1.02 | 1.14 | 1.26 | 1.43
GMM | 0.91 | 1.05 | 1.14 | 1.23 | 1.37 | 0.85 | 1.02 | 1.14 | 1.26 | 1.42
LIML | 0.47 | 0.83 | 1.00 | 1.16 | 1.42 |-4.08 |-0.27 | 0.49 | 1.07 | 4.48
command mivreg
LIML | 0.47 | 0.83 | 1.00 | 1.16 | 1.42 |-4.08 |-0.27 | 0.49 | 1.07 | 4.48
FULL | 0.52 | 0.84 | 1.01 | 1.17 | 1.41 |-1.14 |-0.03 | 0.56 | 1.09 | 2.77
HLIM | 0.43 | 0.82 | 1.00 | 1.17 | 1.43 | 0.15 | 0.76 | 1.01 | 1.22 | 1.62
HFUL | 0.52 | 0.84 | 1.01 | 1.17 | 1.43 | 0.30 | 0.79 | 1.02 | 1.22 | 1.602SLS 和 GMM 估計值相似,且總是向右偏誤的。在同方差的情形下,其他估計值都能得出無偏誤的結果。LIML 估計值比 HLIM 估計值略向中心集中,因此有較高的效率。Fuller 校準值都更向中心集中,說明它們更抵制離群值。在異方差的情形下,HLIM 和 HFUL 都是中位數無偏誤的。它們的 Fuller 校準值也更集中且對稱。
原文也列出了對估計值的實際拒絕率和規範檢驗結果的比較,得出的結論是,傳統的 2SLS、GMM 和 LIML 的規範檢驗值存在嚴重失真,而 mivreg 的檢驗值比較準確。
下表展示了各種檢驗的實際拒絕率。
ivregress 生成的 2SLS 和 LIML 檢驗有兩種形式:非穩健的和異方差穩健的 (這裡的穩健實際對大量工具變量並不穩健)。在特徵檢驗中,使用了 Basmann (1957) 方差估計值。mivreg 生成的檢驗值則使用了如下的估計值和穩健選項:非穩健的 LIML、非穩健的 FULL、穩健的 LIML、穩健的 FULL、HLIM 和 HFUL。
可以預見,2SLS、GMM 和 LIML 方法的傳統的參數檢驗產生了較嚴重的偏誤。這個例子的偏誤還不是很大,但通常可能產生更大的偏誤,詳見 Anatolyev 和 Gospodinov (2011)。在同方差的情況下,所有的 mivreg 檢驗產生的偏誤都顯著減小,但 「異方差穩健」 的版本看來更可靠。在異方差的情況下,理論上只有 「異方差穩健」 的版本是有效的,且其拒絕率近似於名義拒絕率。Fuller 校準版本沒有對拒絕率產生顯著影響。如果我們依賴於 「同方差」 的特徵檢驗,但實際上同方差假設並不成立,在此情形下特徵檢驗結果也顯示了巨大的偏誤。因此我們在異方差的情形下不能使用同方差的特徵檢驗,否則就會在工具變量有效的情形下,卻得到無效的信號。
5. 真實數據案例
本節使用經典的已婚婦女勞動力產出的真實數據 (Mroz,1987) 展示。其中,被解釋變量為工作時長 hours,唯一的內生解釋變量為工資的對數 lwage,6 個外生控制變量 nwifeinc、educ、age、kidslt6、 kidsge6,以及常數 1。此外還有 8 個基礎工具變量 exper、expersq、fatheduc、motheduc、hushrs、husage、huseduc,以及 mtr,合計 14 個工具變量。
作為一個整體,8 個基礎工具變量的強度是高的:第一階段回歸的 F 統計值為 183.5。為了提升估計的效率,充分利用工具變量的信息,我們還考慮了一套擴展的工具變量——基礎工具變量加上所有它們的交互項,因此總共有 92 個工具變量。工具變量數量與樣本量之比很大,約為 0.215。雖然傳統工具適用於基礎的工具變量集,但擴展的工具變量集顯然需要能夠處理多個工具變量的系統。
下表展示了對工資對數的各模型的估計值,包括 OLS、異方差穩健 2SLS (使用基礎和擴展工具變量集),以及 3 個多工具變量穩健的估計方法 LIML、FULL 和 HFUL (使用擴展工具變量集)。
Options | Estimator | Instruments | Estimate | (Standard error)
command reg
robust | OLS | − | −17.4 | (81.4)
command ivregress
robust | 2SLS | basic only | 1179.1 | (185.2)
robust | 2SLS | extended | 536.4 | (101.5)
command mivreg
hom | LIML | extended | 1120.6 | (195.3)
hom robust fuller | FULL | extended | 1110.0 | (197.2)
het robust fuller | HFUL | extended | 1058.3 | (170.5)顯然,由於未考慮內生性,使用 reg 命令得到的 OLS 估計值是不一致的,其數值甚至是負的,具有極大的內生性偏誤。兩個 2SLS 的估計值之間具有超出兩倍的差異,顯示了傳統工具及 ivregress 命令在多個工具變量的情況下不可行。而使用 mivreg 得到的 LIML、FULL 和 HFUL 估計值與 2SLS 僅使用基礎工具變量時得到的估計值接近。在同方差情形下的 LIML 和 FULL 估計值,與異方差情形下的 HLIM 估計值之間有一點差異,雖然不大,但已使得 HFUL 估計值更加可靠。與 2SLS 相比,HLIM 的較小的標準差,可以理解為使用了擴展的工具變量集後獲得的效率提升。
使用 LIML 估計:
*數據下載地址:
*https://gitee.com/arlionn/data/raw/master/data01/mroz.dta
*http://www.stata.com/data/jwooldridge/eacsap/mroz.dta
use "http://www.stata.com/data/jwooldridge/eacsap/mroz.dta", clear
* 或 bcuse mroz
unab vars: nwifeinc educ age kidslt6 kidsge6 exper expersq fatheduc motheduc hushrs husage huseduc mtr
local nvar: word count `vars´
forval i = 1/`nvar´ {
forval j = 1/`=`i´-1´ {
local x : word `i´ of `vars´
local y : word `j´ of `vars´
generate `x´X`y´ = `x´ * `y´
}
}
generate one = 1
mivreg hours nwifeinc educ age kidslt6 kidsge6 one (lwage = nwifeinc educ age kidslt6 kidsge6 one exper expersq fatheduc motheduc hushrs husage huseduc mtr *X*) if inlf==1 , hom運行結果為:
MIVREG estimation (HOM)
First-stage summary Number of obs = 428
F( 7, 421) = 95.74
F( 86, 336) = 2.07 Prob > F = 0.0000
Prob > F = 0.0000 R-squared = -0.5157
R-squared = 0.8471 Adj R-squared = -0.5373
Root MSE = 1.1e+03
LIML estimation
Bekker variance estimation
---
hours | Coef. Std. Err. t P>|t| [95% Conf. Interval]
---+----
lwage | 1120.595 195.3494 5.74 0.000 736.6134 1504.577
nwifeinc | -7.890468 5.261349 -1.50 0.134 -18.23225 2.451317
educ | -133.1851 31.79141 -4.19 0.000 -195.6748 -70.69543
age | -9.954741 7.918058 -1.26 0.209 -25.51859 5.609111
kidslt6 | -246.5892 143.8619 -1.71 0.087 -529.3663 36.18793
kidsge6 | -65.87682 44.77805 -1.47 0.142 -153.8932 22.13958
one | 2345.98 487.9451 4.81 0.000 1386.868 3305.093
---
Instrumented: lwage
Instruments: nwifeinc educ age kidslt6 kidsge6 one exper expersq fatheduc
motheduc hushrs husage huseduc mtr educXnwifeinc ageXnwifeinc
ageXeduc kidslt6Xnwifeinc kidslt6Xeduc kidslt6Xage
kidsge6Xnwifeinc kidsge6Xeduc kidsge6Xage kidsge6Xkidslt6
experXnwifeinc experXeduc experXage experXkidslt6 experXkidsge6
expersqXnwifeinc expersqXeduc expersqXage expersqXkidslt6
expersqXkidsge6 expersqXexper fatheducXnwifeinc fatheducXeduc
fatheducXage fatheducXkidslt6 fatheducXkidsge6 fatheducXexper
fatheducXexpersq motheducXnwifeinc motheducXeduc motheducXage
motheducXkidslt6 motheducXkidsge6 motheducXexper
motheducXexpersq motheducXfatheduc hushrsXnwifeinc hushrsXeduc
hushrsXage hushrsXkidslt6 hushrsXkidsge6 hushrsXexper
hushrsXexpersq hushrsXfatheduc hushrsXmotheduc husageXnwifeinc
husageXeduc husageXage husageXkidslt6 husageXkidsge6
husageXexper husageXexpersq husageXfatheduc husageXmotheduc
husageXhushrs huseducXnwifeinc huseducXeduc huseducXage
huseducXkidslt6 huseducXkidsge6 huseducXexper huseducXexpersq
huseducXfatheduc huseducXmotheduc huseducXhushrs huseducXhusage
mtrXnwifeinc mtrXeduc mtrXage mtrXkidslt6 mtrXkidsge6 mtrXexper
mtrXexpersq mtrXfatheduc mtrXmotheduc mtrXhushrs mtrXhusage
mtrXhuseduc
---
AG specification test:
J statistic = 0.1748
Prob > J = 0.8059
---使用 FULL 估計,選項 hom, robust, fuller,命令為:
mivreg hours nwifeinc educ age kidslt6 kidsge6 one (lwage = nwifeinc educ ///
age kidslt6 kidsge6 one exper expersq fatheduc motheduc hushrs husage ///
huseduc mtr *X*) if inlf==1 , hom robust fuller使用 HFUL 估計,選項 het, robust, fuller,命令為:
mivreg hours nwifeinc educ age kidslt6 kidsge6 one (lwage = nwifeinc educ ///
age kidslt6 kidsge6 one exper expersq fatheduc motheduc hushrs husage ///
huseduc mtr *X*) if inlf==1 , het robust fuller6. 參考文獻
溫馨提示: 文中連結在微信中無法生效。請點擊底部「閱讀原文」。
Anatolyev, S. 2019. Many instruments and/or regressors: A friendly guide. Journal of Economic Surveys 33: 689–726.Anatolyev, S., and N. Gospodinov. 2011. Specification testing in models with many instruments. Econometric Theory 27: 427–441. -Link-Anatolyev, S., and P. Yaskov. 2017. Asymptotics of diagonal elements of projection matrices under many instruments/regressors. Econometric Theory 33: 717–738. -Link-Angrist, J. D., and A. B. Krueger. 2001. Instrumental variables and the search for identification: From supply and demand to natural experiments. Journal of Economic Perspectives 15: 69–85. -Link-Basmann, R. L. 1957. A generalized classical method of linear estimation of coefficients in a structural equation. Econometrica 25: 77–83. -Link-Bekker, P. A. 1994. Alternative approximations to the distributions of instrumental variable estimators. Econometrica 62: 657–681. -Link-Chao, J. C., J. A. Hausman, W. K. Newey, N. R. Swanson, and T. Woutersen. 2014. Testing overidentifying restrictions with many instruments and heteroskedasticity. Journal of Econometrics 178: 15–21. -Link-Fuller, W. A. 1977. Some properties of a modification of the limited information estimator. Econometrica 45: 939–954. -Link-Hansen, C., J. Hausman, and W. K. Newey. 2008. Estimation with many instrumental variables. Journal of Business & Economics Statistics 26: 398–422. -Link-Hausman, J. A., W. K. Newey, T. Woutersen, J. C. Chao, and N. R. Swanson. 2012. Instrumental variable estimation with heteroskedasticity and many instruments. Quantitative Economics 3: 211–255. -Link-Lee, Y., and R. Okui. 2012. Hahn–Hausman test as a specification test. Journal of Econometrics 167: 133–139. -Link-Mroz, T. A. 1987. The sensitivity of an empirical model of married women’s hours of work to economic and statistical assumptions. Econometrica 55: 765–799. -Link-7. 相關推文
Note: 產生如下推文列表的命令為:
lianxh 工具變量 IV, m
安裝最新版 lianxh 命令:
ssc install lianxh, replace溫馨提示: 文中連結在微信中無法生效。請點擊底部「閱讀原文」。
Stata新命令-pdslasso:眾多控制變量和工具變量如何挑選?IV-工具變量法:第一階段係數符號確定時的小樣本無偏估計IV 經典:尋找 IV 的足跡——Card(1993)Abadie新作:簡明IV,DID,RDD教程和綜述
連享會 · 最受歡迎的課
🍓 2021 Stata 寒假班
⌚ 2021 年 1.25-2.4🌲 主講:連玉君 (中山大學);江艇 (中國人民大學)
👉 課程主頁:https://gitee.com/arlionn/PX
關於我們
🍎 連享會 ( 主頁:lianxh.cn ) 由中山大學連玉君老師團隊創辦,定期分享實證分析經驗。👉 直達連享會:【百度一下:連享會】即可直達連享會主頁。亦可進一步添加 主頁,知乎,面板數據,研究設計 等關鍵詞細化搜索。
New! lianxh 命令發布了: GIF 動圖介紹
隨時搜索連享會推文、Stata 資源,安裝命令如下:
. ssc install lianxh
使用詳情參見幫助文件 (有驚喜):
. help lianxh