按地区和年份计算浓度指数(面板数据)

时间:2012-10-04 07:52:43

标签: r function loops panel inequality

这是我的第一篇文章,并且非常坚持尝试构建我的第一个函数,使用面板数据(年份= 1998:2007)与公司= obs计算Herfindahl对公司总产出的指标。到了年份(1998-2007)和地区(“西部”,“中部”,“东部”,“NE”),我在通过函数传递参数时遇到了问题。我想我需要使用两个循环(一个用于时间,一个用于区域)。任何帮助都是有用的..我真的不想将我的数据分组400次以获得一次一个herfindahl测量。提前谢谢!

下面我提供:1)我的入门代码(只返回一个值); 2)期望的输出(包含hefindahl措施的2个区域)年份和2)年区域); 3)原始数据

1)我的入门代码

myherf<- function (x, time, region){
time = year # variable is defined in my data and includes c(1998:2007)
region = region # Variable is defined in my data, c("West", "Central","East","NE")
    for (i in 1:length(time)) {
      for (j in 1:length(region)) {
        herf[i,j] <- x/sum(x)
        herf[i,j] <- herf[i,j]^2
        herf[i,j] <- sum(herf[i,j])^1/2        
      }
    }
  return(herf[i,j])
}

myherf(extractiveoutput $ x,i,j)
  herf [i,j]&lt; - x / sum(x)中的错误:找不到对象'herf'


2)我期望的结果是以下两个向量:

A. (1x10 vector)              
Year  herfindahl(yr)  
1998    x                        
1999    x                       
...                             
2007    x                       

B. (1x40 vector)  
Year  Region   hefindahl(yr-region)  
1998  West      x                                     
1998  Central   x                                    
1998  East      x    
1998  NE        x    
...  
2007  West      x    
2007  Central   x  
2007  East      x   
2007  northeast x   

3)原始数据

Obs. industry year  region    grossoutput  
1         06 1998    Central 0.048804830  
2         07 1998    Central 0.011222478  
3         08 1998    Central 0.002851575  
4         09 1998    Central 0.009515881  
5         10 1998    Central 0.0067931  
...  

12        06 1999    Central 0.050861447  
13        07 1999    Central 0.008421093  
14        08 1999    Central 0.002034649  
15        09 1999    Central 0.010651283  
16        10 1999    Central 0.007766118  
...  
111       06 1998       East 0.036787413  
112       07 1998       East 0.054958377  
113       08 1998       East 0.007390260  
114       09 1998       East 0.010766598  
115       10 1998       East 0.015843418  
...  
436       31 2007       West 0.166044176  
437       32 2007       West 0.400031011  
438       33 2007       West 0.133472059  
439       34 2007       West 0.043669662  
440       45 2007       West 0.017904620  

1 个答案:

答案 0 :(得分:0)

您可以使用conc库中的ineq功能。使用data.table,解决方案非常简单快捷。

library(ineq)
library(data.table)

# convert your data.frame into a data.table
  setDT(df)

# calculate inequality of grossoutput by region and year
  df[, .(inequality = conc(grossoutput, type = "Herfindahl")), by=.(region, year) ]