R語言在收入不平等指標測度上的應用~
最近在研究個人所得稅的收入再分配效應,不是心甘情願的,畢業論文需要
因為使用了CHIPS的資料庫,微觀住戶調查數據是我見過最變態的數據源,沒有之一~
其中所使用到的理論模型中需要計算很多個人所得稅、再分配效應和累進性指標,經過參考各方文獻資料,依靠著自己對於R語言的一丁點兒基礎,終於把所有的指標計算代碼整理完了,因為代碼太多,除了預處理和數據清洗的之外,這裡分享一下我覺得可能會對學術研究人員有用的幾段核心代碼!
以下代碼一共分為兩類,一類是計算個人所得稅的代碼,一類是衡量收入分配不均等的測度指標。
個人所得稅:
大家都知道,我國現行的個人所得稅是分類徵收的,11個類別,但是通常計算比較複雜的是帶有費用扣除和累進稅率的收入類型,這裡我僅以典型的工資薪金收入所得和經營性所得的應納稅額計算為例,按照最新稅法標準計算,其他的類別大多都執行比例稅率,計算較為簡單。
工資薪金所得稅:
其中的Salary表示工資薪金收入;Three_one表示三險一金;tax_Salary表示應納稅所得額。因為我拿到的工資薪金收入是全年的,所以算了月均應納稅所得額,實際中個人所得稅都是按月繳納的,所以計算應納稅所得額的時候,需要自己修改一下以下語法:
計算工資薪金所得收入應納稅所得額:
house_2013_data$tax_Salary<-ifelse(house_2013_data$Salary-house_2013_data$Three_one-3500*12<0,0,house_2013_data$Salary-house_2013_data$Three_one-3500*12)/12
工資薪金所得收入應納稅所得額:
house_2013_data<-within(house_2013_data,{ Salary_tax=NA Salary_tax[tax_Salary<=0]=0 Salary_tax[tax_Salary>0 & tax_Salary<=1500] =tax_Salary[tax_Salary>0 & tax_Salary<=1500 ] *.03 Salary_tax[tax_Salary>1500 & tax_Salary<=4500] =tax_Salary[tax_Salary>1500 & tax_Salary<=4500 ] *.10-105 Salary_tax[tax_Salary>4500 & tax_Salary<=9000] =tax_Salary[tax_Salary>4500 & tax_Salary<=9000 ] *.20-555 Salary_tax[tax_Salary>9000 & tax_Salary<=35000] =tax_Salary[tax_Salary>9000 & tax_Salary<=35000] *.25-1005 Salary_tax[tax_Salary>35000 & tax_Salary<=55000] =tax_Salary[tax_Salary>35000 & tax_Salary<=55000] *.30-2755 Salary_tax[tax_Salary>55000 & tax_Salary<=80000] =tax_Salary[tax_Salary>55000 & tax_Salary<=80000] *.35-5505 Salary_tax[tax_Salary>80000] =tax_Salary[tax_Salary>80000]*.45-13505 })house_2013_data$Salary_tax<-12*house_2013_data$Salary_tax
經營性凈收入應納稅額計算:
Business_F(個體工商戶的生產經營活動、企事業單位的承包經營、承租經營活動)
tax_Bussiness指經營性收入的應納稅所得額,經營性收入按年度繳納。
house_2013_data$tax_Bussiness<-ifelse(house_2013_data$Business<42000,0,house_2013_data$Business-42000)house_2013_data<-within(house_2013_data,{ Business_tax=NA Business_tax[Business==0]=0 Business_tax[Business>0 & Business<=15000 ] =Business[Business>0 & Business<=15000 ]*.05 Business_tax[Business>15000 & Business<=30000 ] =Business[Business>15000 & Business<=30000 ]*.10-750 Business_tax[Business>30000 & Business<=60000 ] =Business[Business>30000 & Business<=60000 ]*.20-3750 Business_tax[Business>60000 & Business<=100000] =Business[Business>60000 & Business<=100000]*.30-9750 Business_tax[Business>100000]=Business[Business>100000 ]*.35-14750})
因為個人所得稅的計算肯定是要給納稅人打標籤的, 即算出來的應納稅額必然要與納稅人的ID一一對應,所以我直接用了含有稅前收入的數據框作為函數的參數,具體運用的時候,記得你的數據框中必須要有同名的變數,或者可以修改上述代碼中稅前收入的變數名,改成與你的含稅前收入的數據框稅前收入名稱一致即可。
收入不平等指標:
基尼係數:
Gini<-function(income){library("caTools") cum_income <- cumsum(sort(c(0,income))) sum_income <- cum_income[length(cum_income)] xarray <- seq(0,length(cum_income)-1) / (length(cum_income)-1) yarray <- cum_income/sum_income B <- trapz(x=xarray,y=yarray) A <- 0.5 - Breturn (A/(A+B))}
其幾何解釋如下圖所示:
以上基尼係數的代碼是本人根據基尼係數幾何法原理,同時參考了 知乎大神@何世提的Python版本思路,使用前提出幾點建議,基尼係數對0值和負值極度敏感,倘若你的收入收入中含有零值和負值,最好提前做清洗處理,雖然理論上來說,零值和負值的確也能解釋的通。
import numpy as npdef gini_coef(wealths): cum_wealths = np.cumsum(sorted(np.append(wealths, 0))) sum_wealths = cum_wealths[-1] xarray = np.array(range(0, len(cum_wealths))) / np.float(len(cum_wealths)-1) yarray = cum_wealths / float(sum_wealths) B = np.trapz(yarray, x=xarray) A = 0.5 - B return A / (A+B)
以上Python版本來自於知乎知名話題答主何史提大神:
作者:何史提
鏈接:https://www.zhihu.com/question/20219466/answer/25936162
再分配效應指數:
再分配效應,也即MT指數,用于衡量一項稅收政策對收入不平等的影響程度,其經過多年發展,出現了很多分解公式,已經衍生了很多附屬指標,這裡我將與其有關聯的累進性指標P指數也同時納入MT指數的演算法中:
所用到的內置函數:
#基尼係數:Gini<-function(income){library("caTools") cum_income <- cumsum(sort(c(0,income))) sum_income <- cum_income[length(cum_income)] xarray <- seq(0,length(cum_income)-1) / (length(cum_income)-1) yarray <- cum_income/sum_income B <- trapz(x=xarray,y=yarray) A <- 0.5 - Breturn (A/(A+B))}####稅前收入排序的稅後基尼係數,與尼基係數公式唯一不同點是順序是按照稅前收入排序的Gini_N<-function(income){library("caTools") cum_income <- cumsum(c(0,income)) sum_income <- cum_income[length(cum_income)] xarray <- seq(0,length(cum_income)-1) / (length(cum_income)-1) yarray <- cum_income/sum_income B <- trapz(x=xarray,y=yarray) A <- 0.5 - Breturn (A/(A+B))}
MT指數
MT<-function(Salary_gini_data){library(dplyr) GX<-Gini(Salary_gini_data$Salary) GY<-Gini(Salary_gini_data$aftertax_salary) CT<-Gini(Salary_gini_data$Salary_tax) CY<-Salary_gini_data%>%arrange(Salary)%>%.[,"aftertax_salary"]%>%Gini_N t <-sum(Salary_gini_data$Salary_tax)/sum(Salary_gini_data$Salary) CXT<-Gini(Salary_gini_data$tax_Salary) P <-CT-GX H <-CY-GY V <-t*P/(1-t) Ded<-CT-CXT Ratio<-CXT-GX MT<-(CY-GY)+t*P/(1-t)return(data.frame(Name=c("稅前尼基係數","稅後基尼係數","稅收集中度","稅後收入集中度(按照稅前收入排序)","平均稅率","應納稅所得額集中率","MT指數","累進性指數","橫向公平效應","縱向公平相應","免徵額累進性","稅率結構累進性"), Index=c("GX","GY","CT","CY","t","CXT","MT","P","H","V","Ded","Ratio"), Scale=c(GX,GY,CT,CY,t,CXT,MT,P,H,V,Ded,Ratio) ))}
MT公式的參數仍然是一個數據框,數據框中的四個必備變數是:
Salary:稅前收入;
Salary_tax:tax_Salary;
Salary_tax:應納稅所得額;
aftertax_salary:稅後收入。
如果不想更改以上代碼,你需保證你指定的數據框中含有以上四個同名變數,當然你可以將代碼中的變數修改為你數據框中的四個相同指標的變數名。
> MT(Salary_gini_data)
Name Index Scale
1 稅前尼基係數 GX 0.3683065715
2 稅後基尼係數 GY 0.3665269164
3 稅收集中度 CT 0.9758636882
4 稅後收入集中度(按照稅前收入排序) CY 0.3661935005
5 平均稅率 t 0.0029255582
6 應納稅所得額集中率 CXT 0.9713859292
7 MT指數 MT 0.0026007263
8 累進性指數 P 0.6075571167
9 橫向公平效應 H -0.0003334159
10 縱向公平相應 V 0.0017826590
11 免徵額累進性 Ded 0.0044777590
12 稅率結構累進性 Ratio 0.6030793577
聯繫方式:
微信:ljty1991
博客主頁:raindu』s home
個人公眾號:數據小魔方(datamofang)
團隊公眾號:EasyCharts
推薦閱讀:
※怎麼看待這張圖?
※本人所處三線弱城市,月收入7000,馬上要小孩,買裸車16w左右的B級車合適嗎,生活壓力會很大嗎?
※虛擬經濟從業者相對實體經濟從業者的高收入合理嗎?
※為什麼明星收入這麼高?合理嗎?