*********** simulation de l'ISF clear set mem 500m set more off /******************************phase 1: appel des différentes variables et paramètres*/ /* choix de l'annee pour laquelle on veut caler la distri du patrimoine taxable*/ global annee_sim=2010 global annee_tabisf=min(2008, $annee_sim) /*********** appel des paramètres globaux */ do Programmes/do_appel_parametres /******** appel des paramètres de la distri du K taxable ISF*/ insheet using "Parametres/parametresISF.txt", clear names keep if real(annee)==$annee_tabisf /* nbre de tranches de bareme ISF*/ global ntranches=nbtranches /* Calcul des parametres de la loi de Pareto pour distri des patrimoines taxables ISF */ destring _all, replace forval x=1/$ntranches{ egen y_tot_seuil`x'=rowtotal(y_isf`x'-y_isf$ntranches) egen n_tot_seuil`x'=rowtotal(n_isf`x'-n_isf$ntranches) g y_mean_seuil`x'=y_tot_seuil`x'/n_tot_seuil`x' g b_isf_`x'=y_mean_seuil`x'*1000000/seuil`x'_isf g a_isf_`x'=b_isf_`x'/(b_isf_`x'-1) } /* Transformation de tous les parametres en macrovariables */ foreach var of varlist _all{ global `var'=`var' } /******** appel des variables de capital et surtout du patrimoine eco total calcule par les rendements */ use Fichiers/indiv_revcap_$annee_sim, clear keep id_ind pondv k* csg_yk csk pl rfon_fictif_cn rfon_reel_cn yk_cn is tf csk rfin_cn rfon_cn rfin_dist_cn rfin* rfin_int_livret rfin_int_pel_csg rfin_av_csg rfin_div_pea_csg so id_indiv save Fichiers/indiv_isf_$annee_sim, replace /******** appel des variables demographiques*/ use Fichiers/indiv_demo_$annee_sim, clear keep id_indiv mat marie age decl nenf so id_indiv merge id_indiv using Fichiers/indiv_isf_$annee_sim ta _merge drop _merge so id_indiv save Fichiers/indiv_isf_$annee_sim, replace /******** appel des variables de revenus du foyer pour calculer revenu total pour bouclier fiscal*/ use Fichiers/indiv_conj_$annee_sim, clear keep id_indiv rfin_pv_irpp_foy rfin_pl_irpp_foy nonsalexo_irpp_foy pension_irpp_foy nonsal_irpp_foy sal_irpp_conj chom_irpp_conj nonsal_irpp_foy nonsal_irpp_conj so id_indiv merge id_indiv using Fichiers/indiv_isf_$annee_sim ta _merge drop if _merge==1 drop _merge so id_indiv save Fichiers/indiv_isf_$annee_sim, replace /******** appel des variables irpp pour calculer bouclier fiscal*/ use Fichiers/indiv_irpp_$annee_sim, clear keep id_indiv irpp_tot rbc_irpp rfr_irpp salchom_imp pension_imp nonsal_imp rfon_imp sort id_indiv merge id_indiv using Fichiers/indiv_conj_$annee_sim keep id_indiv irpp_tot rbc_irpp rfr_irpp salchom_imp pension_imp nonsal_imp rfon_imp rfin_av_bar_irpp_foy rfin_div_bar_irpp_foy rfin_int_bar_irpp_foy sort id_indiv merge id_indiv using Fichiers/indiv_ded_$annee_sim keep id_indiv irpp_tot rbc_irpp rfr_irpp salchom_imp pension_imp nonsal_imp rfon_imp rfin_av_bar_irpp_foy rfin_div_bar_irpp_foy rfin_int_bar_irpp_foy pens_alim_rec_foy sort id_indiv merge id_indiv using Fichiers/indiv_isf_$annee_sim ta _merge drop if _merge==1 drop _merge sort id_indiv save Fichiers/indiv_isf_$annee_sim, replace /******** appel des variables csg pour calculer bouclier fiscal*/ use Fichiers/indiv_cotsoc_$annee_sim, clear keep id_indiv csg_ya csg_yr so id_indiv merge id_indiv using Fichiers/indiv_isf_$annee_sim ta _merge drop if _merge==1 drop _merge so id_indiv save Fichiers/indiv_isf_$annee_sim, replace so id_indiv /********************************phase 2: imputation de la distribution du patrimoine taxable ISF*/ g pondv2=pondv replace pondv2=pondv/2 if mat=="M" g kfon_fictif_cn=rfon_fictif_cn/$r_fon_cn g k_cn2=k_cn -kpro_cn -.4*kfon_fictif_cn replace k_cn2=2*(k_cn -kpro_cn -.4*kfon_fictif_cn) if mat=="M" replace k_cn2=0 if k_cn==. /* Patrimoine eco total */ g k_cn3=k_cn replace k_cn3=2*(k_cn) if mat=="M" replace k_cn3=0 if k_cn==. tabstat pondv2, s(sum) so k_cn2 su pondv2 g classtkcn=(r(sum)-sum(pondv2)+1) replace classtkcn = classtkcn[_n-1] if k_cn2==k_cn2[_n-1] g classtkcn2 =1-(r(sum)-sum(pondv2)+1)/r(sum) replace classtkcn2= classtkcn2[_n-1] if k_cn2==k_cn2[_n-1] scalar sommefoyers=r(sum) scalar sommefoyers=r(sum) g aPareto=. g ymin=. scalar sum1=$n_tot_seuil1 scalar sum2=$n_tot_seuil2 scalar sum3=$n_tot_seuil3 scalar sum4=$n_tot_seuil4 scalar sum5=$n_tot_seuil5 scalar sum6=$n_tot_seuil6 scalar a1=$a_isf_1 scalar a2=$a_isf_2 scalar a3=$a_isf_3 scalar a4=$a_isf_4 scalar a5=$a_isf_5 scalar a6=$a_isf_6 scalar ymin1=$seuil1_isf scalar ymin2=$seuil2_isf scalar ymin3=$seuil3_isf scalar ymin4=$seuil4_isf scalar ymin5=$seuil5_isf scalar ymin6=$seuil6_isf forval x=1/$ntranches{ scalar frac_overseuil`x'=1-sum`x'/sommefoyers replace aPareto=a`x' if classtkcn2>=frac_overseuil`x' replace ymin=ymin`x' if classtkcn2>=frac_overseuil`x' } egen somi=max(classtkcn), by(ymin) gen q=1-classtkcn/somi g actifnetISF=. replace actifnetISF=ymin/(1-q)^(1/aPareto) /*Correction ratio K taxable sur K eco at the very top (top 300 contribuables) */ g ratio_0_theoISF=actifnetISF/k_cn3 su ratio_0_theo if classtkcn<600 & classtkcn>300 scalar ratiocorrection=r(mean) replace actifnetISF=k_cn3*ratiocorrection if classtkcn<=300 g ratiotheoISF=actifnetISF/k_cn3 /* Calage sur patrimoine taxable total */ su actifnetISF [w=pondv2] if classtkcn2>=frac_overseuil1, d scalar masse_actifnetISF=r(sum)/1000000 replace actifnetISF=actifnetISF*$y_tot_seuil1/masse_actifnetISF save Fichiers/indiv_isf_$annee_sim, replace if $annee_sim>$annee_tabisf{ use Fichiers/indiv_revcap_$annee_sim, clear su k_cn [w=pondv], d global k_cn_0=r(sum) use Fichiers/indiv_isf_$annee_sim su k_cn [w=pondv], d global k_cn_1=r(sum) replace actifnetISF=actifnetISF*$k_cn_1/$k_cn_0 save Fichiers/indiv_isf_$annee_sim, replace } /*imputation simplifiée du patrimoine taxable ISF des non imposables*/ replace actifnetISF=min(0.5*k_cn3,700000) if actifnetISF==. /**************************phase 3: application du barème ISF au patrimoine taxable ISF*/ ** programme bareme de l'ISF : scalar ymin0=0 scalar ymin7=. scalar tx0=0 scalar tx1=$tx1_isf scalar tx2=$tx2_isf scalar tx3=$tx3_isf scalar tx4=$tx4_isf scalar tx5=$tx5_isf scalar tx6=$tx6_isf cap program drop baremeisf program baremeisf args KtaxISF isfx g base=`KtaxISF' g `isfx'=0 g i0=0 forval n=1/6{ local p=`n'-1 local m=`n'+1 replace `isfx'=(tx`n'*(base-ymin`n')+i`p') if base>= ymin`n' & (base0 & ISFbrut>0 /*Imputation des reductions d'ISF pour investissement PME et dons*/ su ISFbrut [w=pondv2], d scalar recettesbrutes=r(sum)/1000000 scalar reduc=$tot_reduc_pme_isf+$tot_reduc_dons_isf scalar tx_reduc_isf=reduc/recettesbrutes replace ISF=ISF-ISFbrut*tx_reduc_isf so id_indiv save Fichiers/indiv_isf_$annee_sim, replace /************************** phase 5: simulation du bouclier fiscal (Article 1649-0 A du CGI) et du plafonnement de 85% des revenus (art. 885 V du CGI)*/ /* CSG-CRDS sur les revenus du conjoint */ g csg_y_conj=($tx_csg_ded+$tx_csg_nonded)* 1/(1-$tx_csg_ded) * (sal_irpp_conj+chom_irpp_conj) + ($tx_csg_ded_nonsal+$tx_csg_nonded_nonsal)* 1/(1-$tx_csg_ded_nonsal)*(nonsal_irpp_conj) g sommeimpots_plafISF=ISF+irpp_tot+(pl+csg_yk + csk + csg_ya + csg_yr +tf) if ISF>0 replace sommeimpots_plafISF=ISF+irpp_tot+2*(pl+csg_yk + csk+tf) + csg_ya+ csg_yr+csg_y_conj if mat=="M" & ISF>0 g sommerevenus_plafISF= max(0, rfr_irpp+ rfin_int_livret*2 + rfin_int_pel_csg*2 + rfin_av_csg*2 /*+ rfin_div_pea_csg*2 */) baremeisf ymin4 ISFplaf su ISFplaf scalar ISFplaf2=r(mean) g reduc_plaf85ISF=max(0, min(sommeimpots_plafISF- $tx_plaf*(sommerevenus_plafISF), min(.5*ISF, .5*ISFplaf2))) g ISF_plaf85=max(0, ISF-reduc_plaf85ISF) g reduc_bouclier=max(0, sommeimpots_plafISF- $tx_bouclier*(sommerevenus_plafISF)) g ratio=sommeimpots_plafISF/sommerevenus_plafISF gen tbouclier=ratio>$tx_bouclier gen tplaf85=ratio>$tx_plaf /* Prise en compte du take up imparfait du bouclier fiscal*/ g takeupbouclier=$takeupbouclier1 replace takeupbouclier=$takeupbouclier2 if actifnet>= ymin4 & (actifnet = ymin5 & (actifnet = ymin6 set seed 1234 bys ymin: g uni=uniform() if tbouclier==1 g boucliertaker=(uni<=takeupbouclier) replace reduc_bouclier=reduc_bouclier*boucliertaker /**************phase 6: application du barème ISF au patrimoine economique */ baremeisf k_cn3 ISFkeco save Fichiers/indiv_isf_$annee_sim, replace /**************phase 7: sauvegarde de tableaux de recettes brutes, nettes et patrimoine taxables, agregats et tab par tranches du bareme */ egen masse_isf=total(ISF_plaf85*decl*pondv/1000000000) egen masse_isfkeco=total(ISFkeco*decl*pondv/1000000000) egen masse_bouclier=total(reduc_bouclier*decl*pondv/1000000000) egen masse_plaf85=total(reduc_plaf85ISF*decl*pondv/1000000000) collapse masse* outsheet using Resultats/Isf/statdes_isf_agreg_$annee_sim.xls, replace use Fichiers/indiv_isf_$annee_sim, clear g base2= actifnetISF g tranche=0 forval n=1/6{ local m=`n'+1 replace tranche=`n' if base2>= ymin`n' & (base0, by(tranche) outsheet using Resultats/Isf/statdes_isf_bytranche1_$annee_sim.xls, replace use Fichiers/indiv_isf_$annee_sim, clear g base2= actifnetISF g tranche=0 forval n=1/6{ local m=`n'+1 replace tranche=`n' if base2>= ymin`n' & (base0, by(tranche) outsheet using Resultats/Isf/statdes_isf_bytranche2_$annee_sim.xls, replace /****************phase 8: recalcul des variables au niveau individuel et sauvegarde du fichier final*/ use Fichiers/indiv_isf_$annee_sim, clear keep id_indiv pondv ISF_plaf85 ISF ISFbrut ISFkeco reduc_bouclier actifnetISF k_cn boucliertaker sommerevenus_plafISF sommeimpots_plafISF marie decl gen k_isf=actifnetISF/(1+marie) gen isf_brut=ISFbrut/(1+marie) gen isf_net=max(ISF/(1+marie),0) gen isf=ISF_plaf85/(1+marie) gen isf_keco=ISFkeco/(1+marie) gen bouclier=reduc_bouclier/(1+marie) keep id_indiv pondv isf isf_brut isf_net bouclier k_isf isf_keco ISF_plaf85 ISF ISFbrut ISFkeco reduc_bouclier actifnetISF k_cn boucliertaker sommerevenus_plafISF sommeimpots_plafISF marie decl order id_indiv pondv isf isf_brut isf_net bouclier k_isf isf_keco ISF_plaf85 ISF ISFbrut ISFkeco reduc_bouclier actifnetISF k_cn boucliertaker sommerevenus_plafISF sommeimpots_plafISF marie decl compress _all sort id_indiv save Fichiers/indiv_isf_$annee_sim, replace