楼主: 潜水的猫
17168 19

[编程问题求助] stata如何计算空间基尼系数? [推广有奖]

  • 0关注
  • 0粉丝

高中生

45%

还不是VIP/贵宾

-

威望
0
论坛币
6 个
通用积分
8.5479
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
213 点
帖子
21
精华
0
在线时间
18 小时
注册时间
2007-1-25
最后登录
2013-11-30

相似文件 换一批

+2 论坛币
k人 参与回答

经管之家送您一份

应届毕业生专属福利!

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

经管之家联合CDA

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

感谢您参与论坛问题回答

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

+2 论坛币
请教各位,想按照下图文献中的公式计算空间基尼系数rg,不知道应该如何写code,
1.jpg
我有尝试用这个帖子里说的算,但是出现了负值(应该是0到1之间):https://bbs.pinggu.org/thread-494345-3-1.html
sort province income
by province: egen t=sum(_n*income)
by province: egen s=sum(income)
by province: g gini=2*t/(_N*s)-1-1/_N


请高手指教!
二维码

扫码加我 拉你入群

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

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

关键词:Stata 基尼系数 tata province Income 基尼系数 空间 如何

沙发
夏目贵志 发表于 2013-10-10 02:05:52 |只看作者 |坛友微信交流群
发一些数据上来,不然这个问题不好回答

使用道具

藤椅
潜水的猫 发表于 2013-10-10 14:46:22 |只看作者 |坛友微信交流群
夏目贵志 发表于 2013-10-10 02:05
发一些数据上来,不然这个问题不好回答
注意力完全被娘口三三吸引。。。

回来。。。。

数据大概长这样(简化为有2个地区、2年的数据):n是地区行业数量:3(共有11、12、13三个行业);
i,j属于{1,2,3};
x应该是行业{11,12,13}各自在每年(year)每地区(prvcid)三个行业总值中的份额,也就是根据下表中的prod来计算的;
u应该是在每年(year)每省(prvcid)x的均值。
yearindidprvcidprod

1999

11

110000

12356

1999

11

120000

56423

1999

12

110000

5698

1999

12

120000

7842

1999

13

110000

99632

1999

13

120000

10254

2000

11

110000

16897

2000

11

120000

66812

2000

12

110000

10235

2000

12

120000

5996

2000

13

110000

78985

2000

13

120000

33000



然后不会在stata中写|xi-xj|。。。和同学讨论了,rg的公式和底下参考的帖子给出的这个是不同的表达式,所以不能直接用。。。

谢谢猫老师!

使用道具

板凳
夏目贵志 发表于 2013-10-10 23:45:00 |只看作者 |坛友微信交流群
猫老师很开心。托我送你这个礼物:
  1. * make sure variable names are not used
  2. cap drop x
  3. cap drop n
  4. cap drop u
  5. cap drop rg
  6. * generate share for each industry
  7. gen x = prod
  8. * generate the number of industries by province and year
  9. by year prvcid: egen n = count(x)
  10. * generate the average shares by province and year
  11. by year prvcid: egen u = mean(x)
  12. * calculate for each year separately
  13. gen rg=.
  14. * get a list of years
  15. levelsof year, clean
  16. local yearlist = r(levels)
  17. foreach year in `yearlist' {
  18.         * get a list of province id numbers
  19.         preserve
  20.         keep if year==`year'
  21.         levelsof prvcid, clean
  22.         local provlist = r(levels)
  23.         restore
  24.         * calculate rg for each province
  25.         foreach prov in `provlist' {
  26.                 * get a list of industries for the province
  27.                 preserve
  28.                 keep if prvcid==`prov'&year==`year'
  29.                 levelsof indid, clean
  30.                 local indlist = r(levels)
  31.                 restore
  32.                 * get a list of shares (x)
  33.                 foreach ind in `indlist' {
  34.                         su x if prvcid==`prov'&year==`year'&indid==`ind', meanonly
  35.                         local x`ind' = r(mean)
  36.                 }
  37.                 * calculate the double summation
  38.                 local dsum = 0
  39.                 foreach ind1 in `indlist' {
  40.                         foreach ind2 in `indlist' {
  41.                                 local dsum = `dsum' + abs(`x`ind1''-`x`ind2'')
  42.                         }
  43.                 }
  44.                 * get the value of n
  45.                 su n if prvcid==`prov'&year==`year', meanonly
  46.                 local n = r(mean)
  47.                 * get the value of u
  48.                 su u if prvcid==`prov'&year==`year', meanonly
  49.                 local u = r(mean)
  50.                 * calculate and store rg
  51.                 local rg`prov'`year'=(2*`n'^2*`u')^(-1)*`dsum'
  52.                 * store results
  53.                 replace rg = `rg`prov'`year'' if prvcid==`prov'&year==`year'
  54.         * end for each province
  55.         }
  56. * end for each year
  57. }
  58. * display results
  59. preserve
  60. keep year prvcid n u rg
  61. duplicates drop
  62. noi list, noobs sep(0)
  63. restore
复制代码
你给的示例数据算出来的结果是
  1.   +-----------------------------------------+
  2.   | year   prvcid   n          u         rg |
  3.   |-----------------------------------------|
  4.   | 1999   110000   3   39228.67   .5321165 |
  5.   | 1999   120000   3   24839.67   .4346185 |
  6.   | 2000   110000   3   35372.33   .4319132 |
  7.   | 2000   120000   3   35269.33   .3831846 |
  8.   +-----------------------------------------+
复制代码
已有 2 人评分学术水平 热心指数 信用等级 收起 理由
nkczxx + 1 + 1 + 1 热心帮助其他会员
潜水的猫 + 1 + 1 + 1 娘口三三赛高!!!

总评分: 学术水平 + 2  热心指数 + 2  信用等级 + 2   查看全部评分

使用道具

报纸
夏目贵志 发表于 2013-10-10 23:50:16 |只看作者 |坛友微信交流群
猫老师还说,你的这个公式有问题,按照这个公式,rg是不会等于1的。假定x1=1,x2=0,n=2。求和的结果是2,按照公式rg=(2*n^2*u)^(-1)*2=2/(8*u)。这里如果要rg=1,那么u必须等于1/4。显然在只有两个行业,总产值是1的情况下,u无论如何也不该是1/4的。

猫老师要喝酒吃包子了。。。

使用道具

地板
潜水的猫 发表于 2013-10-11 20:44:44 |只看作者 |坛友微信交流群
夏目贵志 发表于 2013-10-10 23:50
猫老师还说,你的这个公式有问题,按照这个公式,rg是不会等于1的。假定x1=1,x2=0,n=2。求和的结果是2,按 ...
= =!!!猫老师在STATA界也是kamisama一般的存在么。。。

不过猫老师的例子中,如果x1=1,x2=0,其实不是n=2,而是n=1只有一个行业的情况了,求和的结果。。。我有点晕了...

使用道具

7
潜水的猫 发表于 2013-10-11 20:48:32 |只看作者 |坛友微信交流群
另外想请教猫老师一下,实际中我的数据里indid里面有11A这种形式,造成indid变成了string,有没有办法把它变成数值的形式。。=================
后来我回到txt源文件把indid替换掉了。。。。

使用道具

8
夏目贵志 发表于 2013-10-11 22:04:49 |只看作者 |坛友微信交流群
潜水的猫 发表于 2013-10-11 20:48
另外想请教猫老师一下,实际中我的数据里indid里面有11A这种形式,造成indid变成了string,有没有办法把它变 ...
替换掉也是可以的。 或者就用encode命令。help encode就能看到用法了。

使用道具

9
夏目贵志 发表于 2013-10-11 22:12:32 |只看作者 |坛友微信交流群
潜水的猫 发表于 2013-10-11 20:44
= =!!!猫老师在STATA界也是kamisama一般的存在么。。。

不过猫老师的例子中,如果x1=1,x2=0,其实不是 ...
如果某个地区产出是完全集中的,那么就表示除了一个行业之外,其他所有行业的产出都为0。即地区工业总产出等于这一个行业的产出。所以我给的那个例子里,n=2是没问题的。我说求和的结果rg公式里除了(1/(2n^2*u))的部分,即double summation的结果。

一般情况下,如果某地区有n个行业,x_1, ..., x_n,且除x_1外的所有x都为0,求和的结果就是x_1*n*(n-1),将x_1 normalize成1,得n*(n-1)。带入:rg=(n*(n-1))/(2n^2*u)=(n-1)/(2*n*u),可见u的取值无法使rg=1。

不过无所谓啦。等解决你的问题就好。

使用道具

10
夏目贵志 发表于 2013-10-11 22:18:41 |只看作者 |坛友微信交流群
我可是高级妖怪的哦~
miao.jpg

使用道具

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

本版微信群
加好友,备注jltj
拉您入交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-5-3 10:26