|
以下内容摘自连玉君老师:
*================
28 * MLE 的基本步骤
29 *================
30 * 1. 推导最大似然函数
31 * 2. 编写似然函数的stata程序(可选:似然函数的一阶和二阶导数)
32 * 3. 设定解释变量和被解释变量,完整设定:ml model 命令
33 * 4. 估计最大似然函数:ml maximize 命令
*==================================
37 * 一个简单的实例:多元线性回归模型
38 *==================================
39
40 * 变量的均值-方差
41 * Assumption:x_i -- i.i.d. N(u, sigma^2)
42 * 待估参数 [u, sigma^2]
43
44 * 对数似然函数(简单设定):
45 * lnL = Sum{ln Normal[(x_i-u)/s]} - ln(sigma)
46 * 对数似然函数(完整设定):
47 * lnL = -0.5*N*ln(2*pi) - 0.5*N*ln(sigma^2) - (1/(2*sigma^2))*Sum(x_i-u)^2
48
49 doedit mymean_lf.ado
50 *---------------------------------------------------------------*
51 cap program drop mymean_lf
52 program define mymean_lf
53
54 version 9.1 /*声明Stata版本*/
55 args lnf mu sigma /*输入项:似然函数,参数1,参数2,……*/
56
57 quietly replace `lnf' = ln(normalden($ML_y1, `mu', `sigma'))
58 /*$ML_y1 默认写法,表示被解释变量*/
59 end
60 *---------------------------------------------------------------*
* 说明:normalden(x,m,s) = normalden((x-m)/s)/s if s>0
62 * 参见:help density functions
63 sysuse auto, clear
64 gen cons = 1
65 ml model lf mymean_lf (Mean: price = cons) (Sigma: )
66 ml maximize
67 sum price
68
69 * 另一种设定方法:
70 doedit mynormal0_lf.ado
71 *----------------------------------------------------------------*
72 cap program drop mynormal0_lf
73 program define mynormal0_lf
74 version 9.1
args lnf mu sigma
76 quietly replace `lnf' = ln(normalden(($ML_y1 - `mu')/`sigma')) - ln(`sigma')
77 end
78 *----------------------------------------------------------------*
79 ml model lf mynormal0_lf (Mean: price=cons) (Sigma: )
80 ml check
81 ml maximize
82
83
84
85 *-- 线性回归模型
86
87 * 基本思想:y_i -- N(u_i, sigma^2)
88 * 将 y_i 的期望设定为某些变量的线性函数,即
89 * E[y_i] = u_i = x_i*b,可以得到:
90 * y -- N(xb, sigma^2)
91
92 sysuse auto, clear
93 ml model lf mymean_lf (price=mpg wei len) (sigma: )
94 ml maximize
95 est store mle_reg
* 与 OLS 结果的对比
98 reg price mpg wei len
99 est store ols_reg
100 esttab mle_reg ols_reg, mtitle(mle_reg ols_reg)
101
102
103 *-- 异方差
104
105 * 基本思想:y_i -- N(u_i, sigma_i^2)
106 * 将 y_i 的方差也设定为某些变量的线性函数,
107 * E[y_i] = u_i = x_i*b,
108 * Var[y_i] = sigma_i^2 = z_i*h, 可以得到:
109 * y_i -- N(x_i*b, z_i*h)
110
111 ml model lf mymean_lf (price=mpg wei len) (sigma: wei)
112 ml maximize
|