楼主: jianhui80
4762 13

[区域经济学] 用R语言呈现Elhost书中的表2.2 [推广有奖]

已卖:437份资源

学科带头人

4%

还不是VIP/贵宾

-

威望
1
论坛币
4428 个
通用积分
61.8219
学术水平
89 点
热心指数
97 点
信用等级
67 点
经验
1609 点
帖子
715
精华
1
在线时间
1963 小时
注册时间
2011-7-21
最后登录
2025-5-15

楼主
jianhui80 学生认证  发表于 2016-12-19 21:55:55 |AI写论文

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

求职就业群
赵安豆老师微信:zhaoandou666

经管之家联合CDA

送您一个全额奖学金名额~ !

感谢您参与论坛问题回答

经管之家送您两个论坛币!

+2 论坛币
由Elhost编写,肖光恩译的《空间计量经济学:从横截面到面板》的matlab代码可以到Elhost个人主页上查找,下面由我给出R语言代码,今天给出的是表2.2的结果。需要申明的是,由于stargazer包现在只能识别errorsarlm和lagsarlm,故而在表没有显示SLX和GNS。
  1. library(spdep)
  2. library(stargazer)

  3. data(oldcol)
  4. lw <- nb2listw(COL.nb, style="W")

  5. OLS <- lm(CRIME ~ INC + HOVAL , data = COL.OLD)

  6. SAR <- lagsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"), method="eigen", quiet=FALSE)

  7. SEM <- errorsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,lw, method="eigen", quiet=FALSE)

  8. SLX <- lmSLX(CRIME ~ INC + HOVAL, data=COL.OLD, listw=lw)                        

  9. SAC <- sacsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"))

  10. SDM <- lagsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"), method="eigen", quiet=FALSE,type = "mixed")

  11. SDEM <- errorsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,lw, method="eigen", quiet=FALSE,etype = "emixed")               

  12. GNS <- sacsarlm(CRIME ~ INC + HOVAL, data=COL.OLD,nb2listw(COL.nb, style="W"),type = "sacmixed")

  13. stargazer(OLS,SAR,SEM,SDM,SDEM, type = "text",model.names = F, column.labels = c("OLS","SAR","SEM","SDM","SDEM"), title=" comparison of the estimation results explaining the crime rate")
复制代码
table2.2

注:(1)截距项是原来的100倍,标准误稍有出入;
     (2)对数似然值差别很大,这个还需找到计算上的差别。
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

关键词:host HOS R语言 matlab代码 Library library 经济学 matlab 横截面 空间

区域经济学是经济学中还未开放的花骨朵。

沙发
xixia333 发表于 2016-12-19 23:10:11
很赞,希望楼主继续分享,谢谢!

藤椅
wingate99 发表于 2016-12-20 14:41:47
感谢楼主!!!!

板凳
jianhui80 学生认证  发表于 2017-1-10 17:32:48
  1. % Anselin's Columbus neighborhood spatial data sample
  2. %
  3. %
  4. load wmat.dat; load anselin.dat; % load the data;
  5. anselin(:,1:3)=anselin(:,1:3)/100;
  6. y = anselin(:,1);
  7. W = wmat;
  8. N=49;
  9. W=zeros(N,N);
  10. for p=1:232
  11.     W(wmat(p,1),wmat(p,2))=1;
  12. end
  13. W=normw(W);
  14. lambda=eig(W);
  15. nobs = length(y);
  16. % construct an explanatory variables matrix
  17. x = [ones(nobs,1) anselin(:,2) anselin(:,3)];
  18. wx = W*anselin(:,2:3);
  19. % set up variable names
  20. vnames = strvcat('Crime','constant','income','house value');

  21. % OLS model
  22. results = ols(y,x);  % compare to least-squares estimates
  23. prt(results,vnames);  % print results
  24. loglikelihood = -(N/2)*log(2*pi) - (N/2)*log(results.si2) - (1/results.si2)*results.resid'*results.resid

  25. LMsarsem_panel(results,W,y,x); % (Robust) LM tests

  26. lm1=lmlag_panel(y,[ones(nobs,1) x],W);
  27. prt_tests(lm1);

  28. lm2=lmerror_panel(y,[ones(nobs,1) x],W);
  29. prt_tests(lm2);

  30. lm3=lmlag_robust_panel(y,[ones(nobs,1) x],W);
  31. prt_tests(lm3);

  32. lm4=lmerror_robust_panel(y,[ones(nobs,1) x],W);
  33. prt_tests(lm4);

  34. % Spatial lag model
  35. result = sarpaul(y,x,W); % estimate spatial autoregressive model
  36. prt(result,vnames);  % print results
  37. % Exact direct/indirect effects estimates
  38. nvar=2;   
  39. beta=result.beta(2:3);
  40. rho=result.rho;
  41. for p=1:nvar
  42.     C=zeros(N,N);
  43.     for i=1:N
  44.         for j=1:N
  45.             if (i==j) C(i,j)=beta(p);
  46. %           else C(i,j)=beta(nvar+p)*W(i,j);
  47.             end
  48.         end
  49.     end
  50.     S=(eye(N)-rho*W)\C;
  51.     EAVD(p,1)=sum(diag(S))/N; % average direct effect
  52.     EAVI(p,1)=sum(sum(S,2)-diag(S))/N; % average indirect effect
  53.     EAVC(p,1)=sum(sum(S,1)'-diag(S))/N; % average indirect effect
  54.     EAVCtot(p,1)=EAVD(p,1)+EAVI(p,1);
  55. end
  56. fprintf(1,'    direct    indirect   total \n');
  57. [EAVD EAVI EAVCtot]     
  58. result.N=result.nobs;
  59. result.cflag=1;
  60. result.xwith=x;
  61. spat_model=0;
  62. direct_indirect_effects_estimates(result,W,spat_model);

  63. %Spatial error model
  64. result = sempaul(y,x,W); % estimate spatial error model
  65. prt(result,vnames);  % print results

  66. % OLS model with exogenous interaction effects
  67. vnames = strvcat('Crime','constant','income','house value','W*income','W*house value');
  68. results = ols(y,[x wx]);  % compare to least-squares estimates
  69. prt(results,vnames);  % print results
  70. loglikelihood = -(N/2)*log(2*pi) - (N/2)*log(results.si2) - (1/results.si2)*results.resid'*results.resid

  71. % Spatial Durbin model
  72. vnames = strvcat('Crime','constant','income','house value','W*income','W*house value');
  73. v1names = strvcat('Crime','constant','income','house value');
  74. result = sarpaul(y,[x wx],W); % estimate spatial Durbin model
  75. prt(result,vnames);  % print results
  76. % Exact direct/indirect effects estimates
  77. nvar=2;   
  78. beta=result.beta(2:5);
  79. rho=result.rho;
  80. for p=1:nvar
  81.     C=zeros(N,N);
  82.     for i=1:N
  83.         for j=1:N
  84.             if (i==j) C(i,j)=beta(p);
  85.             else C(i,j)=beta(nvar+p)*W(i,j);
  86.             end
  87.         end
  88.     end
  89.     S=(eye(N)-rho*W)\C;
  90.     EAVD(p,1)=sum(diag(S))/N; % average direct effect
  91.     EAVI(p,1)=sum(sum(S,2)-diag(S))/N; % average indirect effect
  92.     EAVC(p,1)=sum(sum(S,1)'-diag(S))/N; % average indirect effect
  93.     EAVCtot(p,1)=EAVD(p,1)+EAVI(p,1);
  94. end
  95. fprintf(1,'    direct    indirect   total \n');
  96. [EAVD EAVI EAVCtot]     

  97. result.N=result.nobs;
  98. result.cflag=1;
  99. result.xwith=[x wx];
  100. spat_model=1;
  101. direct_indirect_effects_estimates(result,W,spat_model);

  102. % Spatial Durbin error model
  103. result = sempaul(y,[x wx],W); % estimate spatial error model
  104. prt(result,vnames);  % print results

  105. % SAC / SARAR / Clifford-Ord/ Kelejian-Prucha model
  106. result = sacpaul(y,x,W);
  107. prt(result,v1names);  % print results

  108. % Exact direct/indirect effects estimates
  109. nvar=2;   
  110. beta=result.beta(2:3);
  111. rho=result.rho;
  112. for p=1:nvar
  113.     C=zeros(N,N);
  114.     for i=1:N
  115.         for j=1:N
  116.             if (i==j) C(i,j)=beta(p);
  117. %           else C(i,j)=beta(nvar+p)*W(i,j);
  118.             end
  119.         end
  120.     end
  121.     S=(eye(N)-rho*W)\C;
  122.     EAVD(p,1)=sum(diag(S))/N; % average direct effect
  123.     EAVI(p,1)=sum(sum(S,2)-diag(S))/N; % average indirect effect
  124.     EAVC(p,1)=sum(sum(S,1)'-diag(S))/N; % average indirect effect
  125.     EAVCtot(p,1)=EAVD(p,1)+EAVI(p,1);
  126. end
  127. fprintf(1,'    direct    indirect   total \n');
  128. [EAVD EAVI EAVCtot]     

  129. result.N=result.nobs;
  130. result.cflag=1;
  131. result.xwith=x;
  132. spat_model=0;
  133. direct_indirect_effects_estimates(result,W,spat_model);

  134. %%% Full model
  135. result = sacpaul(y,[x wx],W);
  136. prt(result,vnames);  % print results
  137. parm=[result.beta;result.rho;result.lam;result.sige];

  138. % Exact direct/indirect effects estimates
  139. nvar=2;   
  140. beta=result.beta(2:5);
  141. rho=result.rho;
  142. for p=1:nvar
  143.     C=zeros(N,N);
  144.     for i=1:N
  145.         for j=1:N
  146.             if (i==j) C(i,j)=beta(p);
  147.             else C(i,j)=beta(nvar+p)*W(i,j);
  148.             end
  149.         end
  150.     end
  151.     S=(eye(N)-rho*W)\C;
  152.     EAVD(p,1)=sum(diag(S))/N; % average direct effect
  153.     EAVI(p,1)=sum(sum(S,2)-diag(S))/N; % average indirect effect
  154.     EAVC(p,1)=sum(sum(S,1)'-diag(S))/N; % average indirect effect
  155.     EAVCtot(p,1)=EAVD(p,1)+EAVI(p,1);
  156. end
  157. fprintf(1,'    direct    indirect   total \n');
  158. [EAVD EAVI EAVCtot]     

  159. result.parm=parm;
  160. result.N=result.nobs;
  161. result.cflag=1;
  162. result.xwith=[x wx];
  163. spat_model=1;
  164. direct_indirect_effects_estimates(result,W,spat_model);
复制代码

报纸
jianhui80 学生认证  发表于 2017-1-10 17:36:04
上面的Matlab代码来自Elhost主页CRSEModels文件中的demo_crime_rates.m

地板
jianhui80 学生认证  发表于 2017-1-10 17:54:34
我们可以在R代码的基础上得到OLS的AIC和对数似然值
logLik_lm.model       
Log likelihood of the linear model for rho=0
AIC_lm.model       
AIC of the linear model for rho=0

  1. SAR$logLik_lm.model
  2. SAR$AIC_lm.model
复制代码

7
jianhui80 学生认证  发表于 2017-1-10 18:01:57
当然也可以直接用
  1. logLik(OLS)
  2. AIC(OLS)
复制代码

8
jianhui80 学生认证  发表于 2017-1-10 18:38:45
尽管我们发现用R和Matlab得到的对数似然值完全不一样,然而,我们发现似然比却是一致的,比如书中35页中写到“OLS模型的对数似然值从13.776增加到17.075。对SLX和OLS模型进行似然比检验的统计量为6.598,其自由度为2,在5%的水平下临界值为6”。
LR.sarlm(SLX,OLS)

        Likelihood ratio for spatial linear models

data:  
Likelihood ratio = 6.5981, df = 2, p-value = 0.03692
sample estimates:
Log likelihood of SLX Log likelihood of OLS
            -184.0782             -187.3772

9
w财经w 学生认证  发表于 2018-1-11 20:58:08
jianhui80 发表于 2017-1-10 17:32
您好,楼主大神,在matlab上运行您给的这个程序,出现了
??? Reference to non-existent field 'si2'.

Error in ==> RENda at 25
loglikelihood = -(N/2)*log(2*pi) - (N/2)*log(results.si2) -
(1/results.si2)*results.resid'*results.resid;

求教怎么破???

10
w财经w 学生认证  发表于 2018-1-12 08:58:59
jianhui80 发表于 2017-1-10 17:32
楼主,上个提问的问题自己解决了,问下从您第27行开始的稳健LM估计出现了以下问题:
??? Undefined function or method 'prt_tests' for input arguments of type 'struct'.

Error in ==> demo_crime_rates at 27
prt_tests(lm1);

求教如何解决,自己改了半天程序都不行啊

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

本版微信群
jg-xs1
拉您进交流群
GMT+8, 2025-12-31 03:47