全部版块 我的主页
论坛 计量经济学与统计论坛 五区 计量经济学与统计软件 Stata专版
7145 8
2009-07-11
本人用stata做SUR model,现在已经得到一个矩阵  i,j=k,l,e,m 分别是资本,劳动,能源和材料,delta(i, j)即是三个factor cost share的回归方程
delta(i, j)=
                 c1         c2                 c3             c4(常数项)
r1   .0002233   -.000292       -.0000451      0.0002883                             cost factor share for k
r2   -.000292   -.000587        -.0002467      0.001473                                cost factor share for l
r3  -.0000451  -.0002467      .0005686        0.0002246                              cost factor share for e
r4  0.0001138  0.0011257   -0.0002768     0.9980141                               cost factor share for m

其中1959年的数据如下
year       cost          k          l          e           m          pk         pl           pe        pm
1959  358.435 .06185 .27303 .04563 .61948 1.30758 1.7343 1.36756 1.30774

s(i)= i*p(i)/ cost   即factor cost share for each k,l,e,m

要求计算1959年的elasticities of substitution theta(i,j)计算公式如下
theta(m,n)=delta(i, j)+s(i)s(j)    (m不等于n)
theta(m.m)=delta(i, i)+s(i)*(s(i)-1)  (m等于n, 主对角线上的)

其实问题很直接,就是用stata做一个循环计算,得到一个4*4的矩阵,但是我是菜鸟,实在对于stata里面的looping束手无策啊,恳请版上大牛们帮帮忙,多谢多谢了
二维码

扫码加我 拉你入群

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

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

全部回复
2009-7-11 16:35:37
才4*4矩阵,而且1959年数据比较不规则,将数据拷到excel,用excel做得了,应该也比较方便。:-)
二维码

扫码加我 拉你入群

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

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

2009-7-11 19:53:33
满足你的要求,但请自行检验程序过程和计算结果:
// 输入1959年数据
clear
input year       cost          k          l          e           m          pk         pl           pe        pm
        1959  358.435 .06185 .27303 .04563 .61948 1.30758 1.7343 1.36756 1.30774
end

mkmat cost, matrix(c1959)                // cost
mat list c1959
mkmat k l e m, matrix(klem)        // i
mat list klem
mkmat p*, matrix(pklem)                // pi
mat list pklem

// 输入回归系数矩阵delta
clear
input c1 c2 c3 c4
        .0002233   -.000292       -.0000451      0.0002883
        -.000292   -.000587        -.0002467      0.001473
        -.0000451  -.0002467      .0005686        0.0002246
        0.0001138  0.0011257   -0.0002768     0.9980141
end

mkmat c1-c4, matrix(delta)
mat list delta

// 计算s(i)
mat s = J(4,1,.)
forv i = 1/4 {
        mat s[`i',1] = klem[1,`i']*pklem[1,`i']/c1959[1,1]
}
mat list s

// 计算theta(i,j)
mat theta = J(4, 4, .)
forv i = 1/4 {
        forv j = 1/4 {
                if `i' == `j' {
                        mat theta[`i',`j'] = delta[`i',`j']+s[`i',1]*(s[`j',1]-1)
                }
                else{
                        mat theta[`i',`j'] = delta[`i',`j']+s[`i',1]*s[`j',1]
                }
        }
}
mat list theta
二维码

扫码加我 拉你入群

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

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

2009-7-11 20:03:16
由数据直接计算s(i)矩阵,省掉3楼程序中mkmat c1959和klem和pklem的步骤:
// 输入1959年数据
clear
input year cost k l e m pk pl pe pm
        1959  358.435 .06185 .27303 .04563 .61948 1.30758 1.7343 1.36756 1.30774
end

// 计算s(i)
mat s = J(4,1,.)
local i = 0
foreach v in k l e m {
        local i = `i' + 1
        mat s[`i',1] =`v'[1]*p`v'[1]/cost[1]        
}
mat list s

// 输入回归系数矩阵delta
clear
input c1 c2 c3 c4
        .0002233   -.000292       -.0000451      0.0002883
        -.000292   -.000587        -.0002467      0.001473
        -.0000451  -.0002467      .0005686        0.0002246
        0.0001138  0.0011257   -0.0002768     0.9980141
end

mkmat c1-c4, matrix(delta)
mat list delta

// 计算theta(i,j)
mat theta = J(4, 4, .)
forv i = 1/4 {
        forv j = 1/4 {
                if `i' == `j' {
                        mat theta[`i',`j'] = delta[`i',`j']+s[`i',1]*(s[`j',1]-1)
                }
                else{
                        mat theta[`i',`j'] = delta[`i',`j']+s[`i',1]*s[`j',1]
                }
        }
}
mat list theta
二维码

扫码加我 拉你入群

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

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

2009-7-12 00:06:42
非常感谢您的回复
我现在程序时这样(修改了一些数据)
// input the data of 1959
clear
input year cost k l e m pk pl pe pm
        1959  358.435 .06185 .27303 .04563 .61948 1.30758 1.7343 1.36756 1.30774
end

// input s(i)
matrix s = J(4,1,.)
local i = 0
foreach v in k l e m {
        local i = `i' + 1
        mat s[`i',1] =`v'[1]        
}
matrix list s

// inputing the coefficient matrix delta
clear
input c1 c2 c3 c4
        0.0298704   0.0000221    -0.0082035    0.021689
        0.0000221   0.0748772    -0.0032119   -0.0716874
        -0.0082035  -0.0032119    0.029383      -0.0179676
         0.021689       -0.0716874   -0.0179676  0.111344
end

mkmat c1-c4, matrix(delta)
matrix list delta
// Calculating theta(i,j)
matrix theta = J(4, 4, .)
forv i = 1/4 {
        forv j = 1/4 {
                if `i' == `j' {
                        matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*(s[`j',1]-1))/(s[`i',1]*s[`i',1])
                }
                else{
                        matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*s[`j',1])/(s[`i',1]*s[`j',1])
                }
        }
}
matrix list theta

matrix stheta = J(1, 4, .)
forv j = 1/4 {
      matrix stheta[1, `j'] = s[`i',1]*theta[`i',`i']
}
matrix list stheta

但是运行的结果,总是说找不到s这个矩阵,我实在是觉得很奇怪啊,因为在运行结果中可以看到s这个矩阵已经出来了啊。。。您或者其他高人可以帮忙看一下这个运行结果么?非常感谢

do "C:\DOCUME~1\YINYAN~1\LOCALS~1\Temp\STD000000.tmp"

. // input the data of 1959
. clear

. input year cost k l e m pk pl pe pm

          year       cost          k          l          e          m         pk         p
> l         pe         pm
  1.         1959  358.435 .06185 .27303 .04563 .61948 1.30758 1.7343 1.36756 1.30774
  2. end

.
. // input s(i)
. matrix s = J(4,1,.)

. local i = 0

. foreach v in k l e m {
  2.         local i = `i' + 1
  3.         mat s[`i',1] =`v'[1]        
  4. }

. matrix list s

s[4,1]
           c1
r1     .06185
r2  .27303001
r3     .04563
r4  .61948001

.
. // inputing the coefficient matrix delta
. clear

. input c1 c2 c3 c4

            c1         c2         c3         c4
  1.         0.0298704   0.0000221    -0.0082035    0.021689
  2.         0.0000221   0.0748772    -0.0032119   -0.0716874
  3.         -0.0082035  -0.0032119    0.029383      -0.0179676
  4.          0.021689       -0.0716874   -0.0179676  0.111344
  5. end

.
. mkmat c1-c4, matrix(delta)

. matrix list delta

symmetric delta[4,4]
           c1         c2         c3         c4
r1   .0298704
r2   .0000221   .0748772
r3  -.0082035  -.0032119    .029383
r4    .021689  -.0716874  -.0179676    .111344

. // Calculating theta(i,j)
. matrix theta = J(4, 4, .)

. forv i = 1/4 {
  2.         forv j = 1/4 {
  3.                 if `i' == `j' {
  4.                         matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*(s[`j',1]-1)
> )/(s[`i',1]*s[`i',1])
  5.                 }
  6.                 else{
  7.                         matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*s[`j',1])/(s
> [`i',1]*s[`j',1])
  8.                 }
  9.         }
10. }
s not found
r(111);

end of do-file
r(111);
二维码

扫码加我 拉你入群

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

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

2009-7-12 01:14:53
在我电脑上运行了你的程序,发现结果和你的不同,出错是标注成红字的程序段:

......
. // Calculating theta(i,j)
. matrix theta = J(4, 4, .)
. forv i = 1/4 {
  2.         forv j = 1/4 {
  3.                 if `i' == `j' {
  4.                         matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*(s[`j',1]-1))/(s[`i',1]*s[`i',1])
  5.                 }
  6.                 else{
  7.                         matrix theta[`i',`j'] = (delta[`i',`j']+s[`i',1]*s[`j',1])/(s[`i',1]*s[`j',1])
  8.                 }
  9.         }
10. }
. matrix list theta
symmetric theta[4,4]
            c1          c2          c3          c4
r1  -7.3597563
r2   1.0013087  -1.6581498
r3  -1.9067588   .74218918  -6.8031912
r4   1.5660731   .57615688   .36435841  -.32411399
.
. matrix stheta = J(1, 4, .)

. forv j = 1/4 {
  2.       matrix stheta[1, `j'] = s[`i',1]*theta[`i',`i']
  3. }
s not found
r(111);
end of do-file
r(111);



更改为:
matrix stheta = J(1, 4, .)
forv j = 1/4 {
      matrix stheta[1, `j'] = s[`j',1]*theta[`j',`j']   // 非matrix stheta[1, `j'] = s[`i',1]*theta[`i',`i']
}
matrix list stheta
二维码

扫码加我 拉你入群

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

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

点击查看更多内容…
相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群