楼主: chaoxionggou
5460 6

[编程问题求助] stata中tobit模型的极大似然估计式 [推广有奖]

  • 0关注
  • 0粉丝

等待验证会员

高中生

62%

还不是VIP/贵宾

-

威望
0
论坛币
1 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
169 点
帖子
15
精华
0
在线时间
49 小时
注册时间
2015-6-13
最后登录
2020-5-16

楼主
chaoxionggou 发表于 2017-8-24 11:45:15 |AI写论文
200论坛币
各位大侠:我现在在用stata做一个极大似然估计,估计式想参考tobit模型的极大似然估计式,但是在stata程序中只有直接做tobit的命令,即tobit y x1 x2 ll() ul()。我现在迫切地想要知道stata是通过什么样的极大似然估计式程序语言,来完成这个tobit模型的。或者如果有其他软件的tobit模型的极大似然估计也可!!恳请各位大侠帮助!不胜感激!!

关键词:tobit模型 极大似然估计 Stata Tobit tata

沙发
chaoxionggou 发表于 2017-8-24 11:52:06
谢谢各位!!!

藤椅
deem 学生认证  发表于 2017-8-24 14:02:13
stata是用ML吧
  1. help ml
复制代码
似然估计我不用stata的。。。

板凳
chaoxionggou 发表于 2017-8-24 15:03:03
deem 发表于 2017-8-24 14:02
stata是用ML吧似然估计我不用stata的。。。
谢谢,那您似然估计一般用什么软件呢?有tobit的编程语言吗?

报纸
deem 学生认证  发表于 2017-8-24 15:26:58
chaoxionggou 发表于 2017-8-24 15:03
谢谢,那您似然估计一般用什么软件呢?有tobit的编程语言吗?
MATLAB code
  1. function results = tobit(y,x,info)
  2. % PURPOSE: computes Tobit Regression
  3. %---------------------------------------------------
  4. % USAGE: results = tobit(y,x,info)
  5. % where: y = censored dependent variable vector (nobs x 1)
  6. %        x = independent variables matrix (nobs x nvar)
  7. %     info = a structure with options:
  8. %        info.trunc = 'left' or 'right' for censoring (default=left)
  9. %        info.limit = value for censoring (default=0)
  10. %        info.meth  = Hessian: ['dfp'], 'bfgs', 'gn', 'marq', 'sd'
  11. %        info.btol  =  tolerance for b convergence (default = 1e-8)
  12. %        info.ftol  = tolerance for FUN convergence (default = 1e-8)
  13. %        info.maxit = maximum # of iterations (default = 500)
  14. %        info.b     = starting values for parameters (default = ols)
  15. %---------------------------------------------------
  16. % RETURNS: a structure
  17. %        results.meth  = 'tobit'
  18. %        results.beta  = bhat
  19. %        results.tstat = t-stats
  20. %        results.yhat  = yhat
  21. %        results.resid = residuals
  22. %        results.sige  = e'*e/(n-k)
  23. %        results.rsqr  = rsquared
  24. %        results.rbar  = rbar-squared
  25. %        results.lik   = Log-Likelihood value
  26. %        results.iter  = # of iterations taken
  27. %        results.grad  = gradient at solution
  28. %        results.opt   = method of optimization used
  29. %        results.nobs  = nobs
  30. %        results.nobsc = # of censored observations
  31. %        results.nvar  = nvars
  32. %        results.y     = y data vector
  33. % --------------------------------------------------
  34. % SEE ALSO: maxlik, prt(results), plt(results), logit, probit
  35. %---------------------------------------------------

  36. % written by:
  37. % James P. LeSage, Dept of Economics
  38. % University of Toledo
  39. % 2801 W. Bancroft St,
  40. % Toledo, OH 43606
  41. % jlesage@spatial-econometrics.com


  42. % default options
  43. in.btol = 1e-6;
  44. in.ftol = 1e-7;
  45. in.maxit = 1000;
  46. in.hess = 'bfgs';
  47. in.call = 'other';
  48. [nobs nvar] = size(x);

  49. if nargin == 3 % user supplied options
  50.   if ~isstruct(info)
  51.     error('tobit: options should be in a structure variable');
  52.   end;

  53. sflag = 0;
  54. tflag = 0;
  55. vflag = 0;
  56. % parse options
  57. fields = fieldnames(info);
  58. nf = length(fields);
  59.   for i=1:nf
  60.     if strcmp(fields{i},'maxit')
  61.         in.maxit = info.maxit;
  62.     elseif strcmp(fields{i},'btol')
  63.         in.btol = info.btol;
  64.     elseif strcmp(fields{i},'ftol')
  65.         in.ftol = info.ftol;
  66.     elseif strcmp(fields{i},'meth')
  67.         in.hess = info.meth;
  68.      elseif strcmp(fields{i},'b');
  69.       baug = b; sflag = 1;
  70.      elseif strcmp(fields{i},'trunc');
  71.       if strcmp(info.trunc,'left');
  72.        tflag = 0;
  73.       else
  74.        tflag = 1;
  75.       end;
  76.       elseif strcmp(fields{i},'limit');
  77.         vflag = info.limit;      
  78.     end;
  79.   end;

  80. elseif nargin == 2
  81. sflag = 0; % use default options
  82. in.call = 'other';
  83. tflag = 0;
  84. vflag = 0;
  85. else
  86. error('tobit: wrong # of arguments');
  87. end;


  88. [nobs nvar] = size(x);

  89. % find # of censored observations
  90. if tflag == 1
  91.    results.nobsc = length(find(y >= vflag));
  92. else
  93.    results.nobsc = length(find(y <= vflag));
  94. end;

  95.    
  96. if sflag == 0
  97. % use ols starting values
  98. res = ols(y,x);
  99. b = res.beta;
  100. sige = res.sige;
  101. baug = [b
  102.        sige];
  103.     end;

  104. % maximize the likelihood function
  105. if tflag == 0 % case of left-truncation
  106. oresult = maxlik('to_llike',baug,in,y,x,vflag);
  107. elseif tflag == 1
  108. oresult = maxlik('to_rlike',baug,in,y,x,vflag);
  109. end;

  110. iter = oresult.iter;
  111. llf = -oresult.f;
  112. vcov = inv(oresult.hess);
  113. grad = oresult.g;
  114. time = oresult.time;
  115. beta = oresult.b;

  116. if iter == in.maxit
  117. fail = 1;
  118. else
  119. fail = 0;
  120. end;

  121. if fail == 1
  122. error('optimization failed in tobit');
  123. end;

  124. if iter == in.maxit
  125. warn(['no convergence in tobit in ' num2str(iter) ' iterations']);
  126. end;

  127. % now compute inference results

  128. results.nobs = nobs;
  129. results.nvar = nvar;
  130. results.iter = iter;
  131. results.beta = beta(1:nvar,1);
  132. bhat = beta(1:nvar,1);
  133. sig = beta(nvar+1,1);

  134. results.sige = sig;
  135. bcov = vcov(1:nvar,1:nvar);
  136. stdb = sqrt(diag(bcov));
  137. tstat = bhat./stdb;
  138. results.tstat = tstat;
  139. results.y = y;
  140. yhat = x*bhat;
  141. e = y - yhat;
  142. sigu = e'*e;
  143. results.yhat = yhat;
  144. results.resid = e;
  145. results.lik = llf;
  146. ym = y - mean(y);
  147. rsqr1 = sigu/(nobs-nvar);
  148. rsqr2 = ym'*ym;
  149. results.rsqr = 1.0 - rsqr1/rsqr2; % r-squared
  150. rsqr1 = rsqr1/(nobs-nvar);
  151. rsqr2 = rsqr2/(nobs-1.0);
  152. results.rbar = 1 - (rsqr1/rsqr2); % rbar-squared
  153. results.meth = 'tobit';
  154. results.opt = in.hess;
  155. results.grad = grad;
  156. results.time = time;
复制代码

地板
蓝色 发表于 2017-8-24 17:07:31

看看这本书写似然函数的语法
里面有logit等模型的例子
https://bbs.pinggu.org/thread-2995944-1-1.html

然后找计量经济学书,吧tobit模型的似然函数根据上面的例子写出来

7
也是晴天 在职认证  学生认证  发表于 2017-8-24 17:14:05
以下内容摘自连玉君老师:
*================
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

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注jltj
拉您入交流群
GMT+8, 2026-1-23 23:08