├── .gitignore ├── README.md ├── code_in_notes ├── Benford.do ├── CI_large_sample.do ├── CI_small_sample.do ├── GMM_Poisson.do ├── GMM_ettobit.do ├── GMM_mini_chi2.do ├── MCMC_independent_integ.py ├── MCMC_independent_mh.py ├── MCMC_logistic.py ├── MCMC_random_walk.py ├── MLE_beta.do ├── MLE_beta_nod.do ├── MLE_censor.do ├── MLE_liml.do ├── MM_beta.do ├── MonteCarlo_simple.py ├── RUN_ALL.do ├── Titanic.do ├── ab_test.do ├── bootstrap_lognormal.do ├── bootstrap_lognormal_np.do ├── bootstrap_student.do ├── box_plot.do ├── brownian.py ├── bubble_chart.do ├── charts_bar.do ├── check_random.do ├── check_random.py ├── clustering_wholesale.do ├── datasets │ ├── OHIE_ED_visit.csv │ ├── OHIE_QJE.dta │ ├── Questionarie.pdf │ ├── ba_sales_data.csv │ ├── bond_interest.xlsx │ ├── ccapm.dta │ ├── cfps_adult.dta │ ├── cfps_family_econ.dta │ ├── chfs_ind.dta │ ├── citydata.dta │ ├── export.dta │ ├── hs300index.dta │ ├── rr000005.dta │ ├── soep_female_labor.dta │ ├── titanic.dta │ └── wholesale.csv ├── descriptive_mode.do ├── dgp_mle_censor.ado ├── dgp_mle_censor_simulate.do ├── empirical_distribution.do ├── exponential.do ├── exponential.py ├── gaussian_mixture.do ├── gencatutility.ado ├── geometric_mean.do ├── ginindex.do ├── histogram_kdensity.do ├── importance_sampling.py ├── qqplot_hs300.do ├── rejection.py ├── rejection_beta.do ├── rejection_beta.py ├── rejection_trunc.do ├── rejection_trunc_optimal.do ├── scatter_weight_height.do ├── simulate_CLT.do ├── simulate_CLT.py ├── simulate_LLN.do ├── simulate_LLN.py ├── simulation_lm_ols_test.do ├── simulation_lm_test.do ├── simulation_lr_test.do ├── simulation_wald_test.do ├── st_call_py_tree.do ├── standard_normal_mean.do ├── standard_normal_var.do ├── statistic_mean.do ├── test_power_function.do ├── test_under_null.do ├── ttest_mean_comparison.do ├── twosls_by_hand.do ├── uniform.c ├── uniform.do ├── uniform.py └── zipf_law.do ├── notebook_julia └── Julia.ipynb └── notebook_python ├── Bayes.ipynb ├── Brownian.ipynb ├── DiscreteMarkov.ipynb ├── LLN_CLT.ipynb ├── Martingale.ipynb ├── MonteCarlo.ipynb ├── Normal.ipynb ├── Numpy+Matplotlib+random.ipynb ├── Poisson_Process.ipynb ├── Random_number.ipynb ├── SDE.ipynb ├── Stochastic_integral.ipynb ├── Testing.ipynb ├── estimation.ipynb └── rejection_beta.pdf /.gitignore: -------------------------------------------------------------------------------- 1 | *.out 2 | .DS_Store 3 | *.eps 4 | *.pdf 5 | *.tex 6 | *.txt 7 | *.gph 8 | *.ipynb_* 9 | *.stswp 10 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 《数理统计》、《随机过程》课程代码 2 | 该项目中主要包含上海对外经贸大学司继春《数理统计》课程以及《随机过程》的相关代码,主要包括讲义中的示意性代码以及Python、Julia语言的Jupyter Notebook。 3 | ## 讲义中代码 4 | 讲义中的代码主要包含在以下地址中:[Code in Notes](https://github.com/sijichun/MathStatsCode/tree/master/code_in_notes),其中Stata数据文件包含在以下地址中:[Datasets](https://github.com/sijichun/MathStatsCode/tree/master/code_in_notes/datasets)。 5 | ## Python Notebook 6 | 除讲义中的代码以外,本课程还提供一些Jupyter Notebook。这些Notebooks可以作为编程作业的参考: 7 | ### 《数理统计》代码 8 | * [Numpy+Matplotlib+random 介绍](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/Numpy%2BMatplotlib%2Brandom.ipynb) 9 | * [生成多元正态分布](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/Normal.ipynb) 10 | * [大数定律与中心极限定律](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/LLN_CLT.ipynb) 11 | * [矩估计、极大似然估计与区间估计](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/estimation.ipynb) 12 | * [假设检验](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/Testing.ipynb) 13 | ### 《随机过程》代码 14 | 15 | * [马尔可夫链](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/DiscreteMarkov.ipynb) 16 | * [泊松过程](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/Poisson_Process.ipynb) 17 | * [布朗运动](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/Brownian.ipynb) 18 | * [蒙特卡洛](https://github.com/sijichun/MathStatsCode/blob/master/notebook_python/MonteCarlo.ipynb) 19 | ## Julia Notebook 20 | * [Julia介绍](https://github.com/sijichun/MathStatsCode/blob/master/notebook_julia/Julia.ipynb) 21 | -------------------------------------------------------------------------------- /code_in_notes/Benford.do: -------------------------------------------------------------------------------- 1 | // Benford.do 2 | clear all 3 | use datasets/citydata.dta 4 | keep if Year==2011 5 | 6 | // 将GDP转为字符串 7 | tostring v84, gen(gdp_string) 8 | // 取出GDP数字字符串的第一位 9 | gen first_digit=substr(gdp_string, 1,1) 10 | // 将第一位数字字符串转化为数字 11 | destring first_digit, replace 12 | // 统计频数 13 | tab first_digit 14 | // 创建一个数据框用于检验 15 | frame create chi2test Ng Ng_star 16 | quietly: su first_digit 17 | local N=r(N) 18 | forvalues i=1/9{ 19 | quietly: su first_digit if first_digit==`i' 20 | local Ng=r(N) 21 | local Ng_star=`N'*(log10(`i'+1)-log10(`i')) 22 | frame post chi2test (`Ng') (`Ng_star') 23 | } 24 | frame chi2test: gen test_stat=(Ng-Ng_star)^2/Ng_star 25 | frame chi2test: su test_stat 26 | frame chi2test: local test_stat=r(sum) 27 | di "test statistics= `test_stat'" 28 | local p=1-chi2(8 ,`test_stat') 29 | di "p-value= `p'" 30 | -------------------------------------------------------------------------------- /code_in_notes/CI_large_sample.do: -------------------------------------------------------------------------------- 1 | // CI_large_sample.do 2 | clear 3 | set seed 97 4 | set more off 5 | cap program drop CIz 6 | program define CIz, rclass 7 | syntax [, obs(integer 100) mu(real 3) confident_level(real 0.95)] 8 | quietly{ 9 | drop _all 10 | set obs `obs' 11 | tempvar d x 12 | tempname lb ub alpha 13 | local `alpha'=1-`confident_level' 14 | gen `d'=runiform()<0.5 15 | gen `x'=`d'*(rnormal()+`mu')+(1-`d')*(rnormal()-`mu') 16 | su `x' 17 | local `lb'=r(mean)-invnormal(1-``alpha''/2)*r(sd)/sqrt(`obs') 18 | local `ub'=r(mean)+invnormal(1-``alpha''/2)*r(sd)/sqrt(`obs') 19 | return scalar lb=``lb'' 20 | return scalar ub=``ub'' 21 | return scalar include_true=(``lb''<=0 & ``ub''>=0) 22 | } 23 | end 24 | 25 | simulate it=r(include_true), reps(10000): CIz, obs(10) 26 | su 27 | simulate it=r(include_true), reps(10000): CIz, obs(100) 28 | su 29 | -------------------------------------------------------------------------------- /code_in_notes/CI_small_sample.do: -------------------------------------------------------------------------------- 1 | // CI_small_sample.do 2 | clear 3 | set seed 97 4 | set more off 5 | cap program drop CIt 6 | program define CIt, rclass 7 | syntax [, obs(integer 10) mu(real 0) sigma(real 1) confident_level(real 0.95)] 8 | quietly{ 9 | drop _all 10 | set obs `obs' 11 | tempvar x 12 | tempname lb ub df alpha 13 | local `alpha'=1-`confident_level' 14 | local `df'=`obs'-1 15 | gen `x'=`sigma'*rnormal()+`mu' 16 | su `x' 17 | local `lb'=r(mean)-invttail(``df'',``alpha''/2)*r(sd)/sqrt(`obs') 18 | local `ub'=r(mean)+invttail(``df'',``alpha''/2)*r(sd)/sqrt(`obs') 19 | return scalar lb=``lb'' 20 | return scalar ub=``ub'' 21 | return scalar include_true=(``lb''<=`mu' & ``ub''>=`mu') 22 | } 23 | end 24 | 25 | simulate it=r(include_true), reps(10000): CIt, obs(10) mu(5) sigma(10) 26 | su -------------------------------------------------------------------------------- /code_in_notes/GMM_Poisson.do: -------------------------------------------------------------------------------- 1 | // GMM_Poisson.do 2 | clear all 3 | set more off 4 | set seed 20231130 5 | cap program drop est_lambda 6 | program est_lambda, eclass 7 | syntax varlist(max=1) [, lambda(real 1)] 8 | tempvar x2 9 | quietly{ 10 | gen `x2'=`varlist'^2 11 | gmm (`varlist'-{lambda=`lambda'}) (`x2'-({lambda}+{lambda}^2)), winit(identity) onestep 12 | } 13 | mat b=e(b) 14 | mat V=e(V) 15 | ereturn post b V 16 | ereturn display 17 | end 18 | 19 | frame create simulation lambda xmean 20 | forvalues i=1/1000{ 21 | clear 22 | quietly{ 23 | set obs 100 24 | gen x=rpoisson(10) 25 | su x 26 | local mean_x = r(mean) 27 | est_lambda x 28 | frame post simulation (_b[/lambda]) (`mean_x') 29 | } 30 | } 31 | frame simulation: su 32 | -------------------------------------------------------------------------------- /code_in_notes/GMM_ettobit.do: -------------------------------------------------------------------------------- 1 | // GMM_ettobit.do 2 | clear 3 | set more off 4 | set obs 500 5 | set seed 8997 6 | // 生成数据 7 | gen x=rnormal(3,2) 8 | local a=10 9 | local alpha=5 10 | local beta=3 11 | local sigma=2 12 | gen y = exp(`alpha'+`beta'*x+rnormal()*sqrt(`sigma'))-`a' 13 | // 生成工具 14 | gen x2=x^2 15 | gen x3=x^3 16 | gen x_e=exp(x) 17 | gen x_sin=sin(x) 18 | // 计算a的初始值 19 | su y 20 | local a_init=-1*r(min)+5 21 | // GMM估计 22 | gmm (log({a=`a_init'}+y)-{alpha=0}-{beta=0}*x) ((log({a}+y)-{alpha}-{beta}*x)*x) ((log({a}+y)-{alpha}-{beta}*x)*x2) ((log({a}+y)-{alpha}-{beta}*x)*x3) ((log({a}+y)-{alpha}-{beta}*x)*x_e) ((log({a}+y)-{alpha}-{beta}*x)*x_sin), winit(identity) 23 | 24 | -------------------------------------------------------------------------------- /code_in_notes/GMM_mini_chi2.do: -------------------------------------------------------------------------------- 1 | // GMM_mini_chi2.do 2 | clear all 3 | set more off 4 | set seed 20231213 5 | cap program drop est_lambda_chi2 6 | program est_lambda_chi2, rclass 7 | syntax varname [, lambda(real 1) lambda0(real 10) n(integer 100)] 8 | tempvar x2 m1_0 m2_0 9 | tempname mean_m1_0 mean_m2_0 vec_g chi2_est chi2_true wmatrix objf 10 | quietly{ 11 | gen `x2'=`varlist'^2 12 | gmm (`varlist'-{lambda=`lambda'}) (`x2'-({lambda}+{lambda}^2)), winit(identity) 13 | local `chi2_est'=e(J) 14 | mat `wmatrix'=e(W) 15 | gen `m1_0'=`varlist'-`lambda0' 16 | gen `m2_0'=`x2'-(`lambda0'+`lambda0'^2) 17 | su `m1_0' 18 | local `mean_m1_0'=r(sum) 19 | su `m2_0' 20 | local `mean_m2_0'=r(sum) 21 | mat `vec_g'=(``mean_m1_0'' \ ``mean_m2_0'') 22 | mat `objf'=`vec_g''*`wmatrix'*`vec_g' 23 | local `chi2_true'=`objf'[1,1]/`n' 24 | } 25 | return scalar chi2_est = ``chi2_est'' 26 | return scalar chi2_true = ``chi2_true'' 27 | end 28 | 29 | frame create simulation chi2_est chi2_true 30 | forvalues i=1/2000{ 31 | quietly{ 32 | clear 33 | set obs 100 34 | gen x=rpoisson(10) 35 | est_lambda_chi2 x, lambda0(10) n(100) 36 | frame post simulation (r(chi2_est)) (r(chi2_true)) 37 | } 38 | } 39 | frame change simulation 40 | label variable chi2_est "估计值处的目标函数" 41 | label variable chi2_true "真值处的目标函数" 42 | gen density_chi2_1=chi2den(1,chi2_est) 43 | label variable density_chi2_1 "Chi(1)密度函数" 44 | gen density_chi2_2=chi2den(2,chi2_est) 45 | label variable density_chi2_2 "Chi(2)密度函数" 46 | sort chi2_est 47 | twoway (hist chi2_est, density) (line density_chi2_1 chi2_est if chi2_est>0.3) (line density_chi2_2 chi2_est if chi2_est>0.3), legend(pos(1) ring(0) label(1 "估计值处的目标函数密度")) xtitle("") 48 | graph export GMM_mini_chi2_1.pdf, replace 49 | twoway (hist chi2_true, density) (line density_chi2_1 chi2_est if chi2_est>0.3) (line density_chi2_2 chi2_est if chi2_est>0.3), legend(pos(1) ring(0) label(1 "真值处的目标函数密度")) xtitle("") 50 | graph export GMM_mini_chi2_2.pdf, replace -------------------------------------------------------------------------------- /code_in_notes/MCMC_independent_integ.py: -------------------------------------------------------------------------------- 1 | ## MCMC_independent_integ.py 2 | 3 | import numpy as np 4 | from numpy import random as nprd 5 | nprd.seed(19880505) 6 | 7 | ##设定参数 8 | M = 10000 9 | h1 = lambda x: 0.5 * np.exp(-90 * (x[0] - 0.5)**2 - 45 * (x[1] + 0.1)**2) 10 | 11 | ##抽样 12 | x = [(nprd.random() * 2 - 1, nprd.random() * 2 - 1) for i in range(M)] 13 | 14 | ##计算h(x) 15 | sample = list(map(h, x)) 16 | integral = 4 * np.mean(sample) 17 | se = 4 * np.std(sample) / np.sqrt(M) 18 | subsample_001 = list(filter(lambda x: x > 0.01, sample)) 19 | print("Intgral=", integral) 20 | print("s.e. of Integral=", se) 21 | print("95% C.I.:", integral - 1.96 * se, "~", integral + 1.96 * se) 22 | print("Ratio of >0.01 samples:", len(subsample_001) / M) 23 | -------------------------------------------------------------------------------- /code_in_notes/MCMC_independent_mh.py: -------------------------------------------------------------------------------- 1 | ## mcmc_independent_mh.py 2 | ##独立的MCMC算法,输入: 3 | ## N_samples : 抽样次数 4 | ## pai(x) : 目标密度函数 5 | ## q(y) : 工具密度函数 6 | ## q_sampler : 给定x,从q中抽样的函数 7 | ## x0 : 初始值 8 | from numpy import random as nprd 9 | def MH_independent(N_samples, pai, q, q_sampler, x0): 10 | X = [] 11 | x = x0 12 | for i in range(N_samples): 13 | y = q_sampler() 14 | rho = min(1, pai(y) * q(x) / (pai(x) * q(y))) 15 | if nprd.uniform() <= rho: 16 | X.append(y) 17 | x = y 18 | else: 19 | X.append(x) 20 | return X 21 | -------------------------------------------------------------------------------- /code_in_notes/MCMC_logistic.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | ## file: MonteCarlo.py 3 | 4 | import numpy as np 5 | from numpy import random as nprd 6 | 7 | ##设定参数 8 | M =20000 9 | #真值 10 | beta_0=1 11 | beta_1=1 12 | beta_2=-1 13 | #样本量 14 | N=200 15 | #Logistic函数 16 | Logistic=lambda x: 1.0/(1+np.exp(-1*x)) 17 | 18 | ##产生数据 19 | def gen_logit(N): 20 | Data=[] 21 | for n in range(N): 22 | x1=nprd.normal()*1.414+1 23 | x2=nprd.chisquare(2) 24 | d_star=beta_0+beta_1*x1+beta_2*x2 25 | p_star=Logistic(d_star) 26 | d=(1 if nprd.uniform() 0.01, sample)) 18 | print("Intgral=", integral) 19 | print("s.e. of Integral=", se) 20 | print("95% C.I.:", integral - 1.96 * se, "~", integral + 1.96 * se) 21 | print("Ratio of >0.01 samples:", len(subsample_001) / M) 22 | -------------------------------------------------------------------------------- /code_in_notes/RUN_ALL.do: -------------------------------------------------------------------------------- 1 | clear 2 | set more off 3 | ** begin 4 | do uniform.do 5 | do check_random.do 6 | do exponential.do 7 | do rejection_trunc.do 8 | do rejection_trunc_optimal.do 9 | do gaussian_mixture.do 10 | do standard_normal_var.do 11 | do standard_normal_mean.do 12 | do test_power_function.do 13 | do qqplot_hs300.do 14 | do statistic_mean.do 15 | do empirical_distribution.do 16 | do simulate_LLN.do 17 | do simulate_CLT.do 18 | do histogram_kdensity.do 19 | do charts_bar.do 20 | do scatter_weight_height.do 21 | do zipf_law.do 22 | do bubble_chart.do 23 | do box_plot.do 24 | do bootstrap_lognormal.do 25 | do test_power_function.do 26 | do simulation_wald_test.do 27 | do simulation_lm_test.do 28 | do simulation_lm_ols_test.do 29 | do simulation_lr_test.do 30 | do GMM_mini_chi2.do 31 | do dgp_mle_censor_simulate.do 32 | -------------------------------------------------------------------------------- /code_in_notes/Titanic.do: -------------------------------------------------------------------------------- 1 | // Titanic.do 2 | clear all 3 | use datasets/titanic.dta 4 | // 按照性别加总 5 | collapse (sum)num_aboard (sum)num_death, by(sex) 6 | // 计算幸存人数 7 | gen num_survive=num_aboard-num_death 8 | // 计算死亡总人数、幸存总人数 9 | qui: sum num_death 10 | local death=r(sum) 11 | qui: sum num_survive 12 | local survive=r(sum) 13 | local N=`death'+`survive' 14 | // 计算理论死亡、幸存人数 15 | gen e_num_death=num_aboard*`death'/`N' 16 | gen e_num_survive=num_aboard*`survive'/`N' 17 | // 计算检验统计量 18 | gen chi2_death=(num_death-e_num_death)^2/e_num_death 19 | gen chi2_survive=(num_survive-e_num_survive)^2/e_num_survive 20 | gen chi2=chi2_death+chi2_survive 21 | qui: su chi2 22 | local test_stat=r(sum) 23 | di "test statistics= `test_stat'" 24 | local p=1-chi2(2 ,`test_stat') 25 | di "p-value= `p'" 26 | -------------------------------------------------------------------------------- /code_in_notes/ab_test.do: -------------------------------------------------------------------------------- 1 | // ab_test.do 2 | // 导入数据 3 | clear 4 | set more off 5 | import delimited "datasets/ba_sales_data.csv" 6 | 7 | // 加总用户交易量 8 | collapse (sum) sale_price (max) test_option, by(user_id) 9 | 10 | // 进行检验 11 | ttest sale_price, by(test_option) 12 | -------------------------------------------------------------------------------- /code_in_notes/bootstrap_lognormal.do: -------------------------------------------------------------------------------- 1 | // bootstrap_lognormal.do 2 | clear all 3 | set more off 4 | set seed 1000 5 | set obs 10 6 | // 产生样本 7 | local mu=2 8 | gen z=rnormal(`mu',sqrt(2)) 9 | gen x=exp(z) 10 | // 进行估计 11 | su x 12 | local mu_hat=log(r(mean))-1 13 | di `mu_hat' 14 | // 进行再抽样,将再抽样结果放入到数据框bootstrap中 15 | frame create bootstrap mu_star 16 | local B=10000 17 | forvalues i=1/`B'{ 18 | quietly{ 19 | gen z_star=rnormal(`mu_hat',sqrt(2)) 20 | gen x_star=exp(z_star) 21 | su x_star 22 | local mu_star=log(r(mean))-1 23 | frame post bootstrap (`mu_star') 24 | drop z_star 25 | drop x_star 26 | } 27 | } 28 | frame bootstrap: hist mu_star 29 | graph export bootstrap_lognormal.pdf, replace 30 | frame bootstrap: su mu_star, de 31 | local mu_star_bar=r(mean) 32 | di "mu_bc=" _skip 2*`mu_hat'-`mu_star_bar' -------------------------------------------------------------------------------- /code_in_notes/bootstrap_lognormal_np.do: -------------------------------------------------------------------------------- 1 | // bootstrap_lognormal_np.do 2 | clear all 3 | set more off 4 | set seed 1000 5 | set obs 10 6 | // 产生样本 7 | local mu=2 8 | gen z=rnormal(`mu',sqrt(2)) 9 | gen x=exp(z) 10 | // 定义估计的program 11 | cap drop program lognormalest 12 | program define lognormalest, rclass 13 | syntax varname 14 | quietly { 15 | su `varlist' 16 | local mu=log(r(mean))-1 17 | return scalar mu=`mu' 18 | } 19 | end 20 | // bootstrap 21 | local B=1000 22 | bootstrap mu=r(mu), reps(`B'): lognormalest x 23 | estat bootstrap -------------------------------------------------------------------------------- /code_in_notes/bootstrap_student.do: -------------------------------------------------------------------------------- 1 | // bootstrap_student.do 2 | clear all 3 | use datasets/OHIE_QJE.dta 4 | // bootstrap 5 | bootstrap b=_b[treatment] se=_se[treatment], reps(200) seed(55) cluster(household_id) saving(bootstrap_student.dta, replace): reg birthyear_list treatment, vce(bootstrap) 6 | // 进行回归,保存系数和标准误 7 | reg birthyear_list treatment 8 | local b=_b[treatment] 9 | local se=_se[treatment] 10 | // 打开一个数据框,装入bootstrap_student.dta 11 | frame create bootstrap_sample 12 | frame change bootstrap_sample 13 | use bootstrap_student.dta 14 | gen t=(b-`b')/se 15 | sort t 16 | local alpha_25=(t[floor(_N*0.025)]+t[ceil(_N*0.025)])/2 17 | local alpha_975=(t[floor(_N*0.975)]+t[ceil(_N*0.975)])/2 18 | // 计算好分位数,返回 19 | frame change default 20 | rm bootstrap_student.dta 21 | // 计算置信区间 22 | di "置信区间为:" _skip "[" `b'-`alpha_975'*`se' "," `b'-`alpha_25'*`se' "]" 23 | -------------------------------------------------------------------------------- /code_in_notes/box_plot.do: -------------------------------------------------------------------------------- 1 | // box_plot.do 2 | clear 3 | use datasets/cfps_adult.dta 4 | drop if qp101<0 5 | graph box qp101, noout 6 | graph export box_plot.pdf, replace 7 | graph hbox qp101, over(cfps_gender) 8 | graph export box_plot_by_sex.pdf, replace 9 | -------------------------------------------------------------------------------- /code_in_notes/brownian.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import numpy.random as nprd 3 | 4 | t=np.linspace(0.0,5.0,5000) 5 | B1=np.zeros(len(t)) 6 | B2=np.zeros(len(t)) 7 | B3=np.zeros(len(t)) 8 | B4=np.zeros(len(t)) 9 | B5=np.zeros(len(t)) 10 | B6=np.zeros(len(t)) 11 | b1=b2=b3=b4=b5=b6=0 12 | epsilon=np.sqrt(t[1]-t[0]) 13 | for tt in range(len(t)): 14 | B1[tt]=b1 15 | b1=b1+nprd.normal(0,epsilon) 16 | B2[tt]=b2 17 | b2=b2+nprd.normal(0,epsilon) 18 | B3[tt]=b3 19 | b3=b3+nprd.normal(0,epsilon) 20 | B4[tt]=b4 21 | b4=b4+nprd.normal(0,epsilon) 22 | B5[tt]=b5 23 | b5=b5+nprd.normal(0,epsilon) 24 | B6[tt]=b6 25 | b6=b6+nprd.normal(0,epsilon) 26 | 27 | import matplotlib.pyplot as plt 28 | # 设定图像大小 29 | plt.rcParams['figure.figsize'] = (10.0, 10.0) 30 | plt.figure(0) 31 | plt.plot(t,B1,label=r'Brownian Motion1',color='blue') 32 | plt.plot(t,B2,label=r'Brownian Motion2',color='red') 33 | plt.plot(t,B3,label=r'Brownian Motion3',color='pink') 34 | plt.plot(t,B4,label=r'Brownian Motion4',color='green') 35 | plt.plot(t,B5,label=r'Brownian Motion5',color='orange') 36 | plt.plot(t,B6,label=r'Brownian Motion6',color='yellow') 37 | plt.legend(loc='upper left', frameon=True) 38 | plt.savefig("brownian_motion.eps") 39 | 40 | t=np.linspace(0.0,5.0,10000) 41 | B1=np.zeros(len(t)) 42 | B2=np.zeros(len(t)) 43 | B3=np.zeros(len(t)) 44 | B4=np.zeros(len(t)) 45 | B5=np.zeros(len(t)) 46 | B6=np.zeros(len(t)) 47 | b1=b2=b3=b4=b5=b6=0 48 | epsilon=np.sqrt(t[1]-t[0]) 49 | for tt in range(len(t)): 50 | B1[tt]=b1 51 | b1=b1+nprd.normal(0,epsilon) 52 | B2[tt]=b2 53 | b2=b2+nprd.normal(0,epsilon) 54 | B3[tt]=b3 55 | b3=b3+nprd.normal(0,epsilon) 56 | B4[tt]=b4 57 | b4=b4+nprd.normal(0,epsilon) 58 | B5[tt]=b5 59 | b5=b5+nprd.normal(0,epsilon) 60 | B6[tt]=b6 61 | b6=b6+nprd.normal(0,epsilon) 62 | 63 | plt.figure(1) 64 | plt.plot(B1,B2,label=r'Brownian Motion1',color='blue') 65 | plt.plot(B3,B4,label=r'Brownian Motion2',color='red') 66 | plt.plot(B5,B6,label=r'Brownian Motion3',color='green') 67 | plt.legend(loc='upper left', frameon=True) 68 | plt.savefig("brownian_motion_2d.eps") 69 | -------------------------------------------------------------------------------- /code_in_notes/bubble_chart.do: -------------------------------------------------------------------------------- 1 | // bubble_chart.do 2 | clear 3 | use datasets/citydata.dta 4 | keep if Year==2011 5 | // 省份代码、判断东中西部 6 | gen prov=floor(CityCode/10000) 7 | gen east=inlist(prov,11,12,13,21,31,32,33,35,37,44,46) 8 | gen middle=inlist(prov,14,22,23,34,36,41,43,42) 9 | gen west=inlist(prov,15,45,50,51,52,53,54,61,62,63,64,65) 10 | // 产生变量 11 | gen log_gdp_per_capita=log(v84)-log(v86) 12 | gen log_pop=log(v86) 13 | gen log_waste_water=log(v266) 14 | // 画图 15 | twoway (scatter log_waste_water log_gdp_per_capita [fw=v86] if east, msize(tiny) mcolor(blue%30)) (scatter log_waste_water log_gdp_per_capita [fw=v86] if middle, msize(tiny) mcolor(green%30)) (scatter log_waste_water log_gdp_per_capita [fw=v86] if west, msize(tiny) mcolor(red%30)), legend(off) xtitle("对数人均GDP") ytitle("对数工业废水排放量") 16 | graph export bubble_chart.pdf, replace 17 | -------------------------------------------------------------------------------- /code_in_notes/charts_bar.do: -------------------------------------------------------------------------------- 1 | // charts_bar.do 2 | use datasets/cfps_adult.dta, clear 3 | drop if te4<0 4 | graph bar, over(te4, label(angle(15))) 5 | graph export chart_bar1.pdf, replace 6 | graph bar (count), over(te4, label(angle(15))) 7 | graph export chart_bar2.pdf, replace 8 | graph hbar (mean) p_income, over(te4) 9 | graph export chart_bar3.pdf, replace 10 | collapse (count) p_income (mean) mean_income = p_income (median) median_income = p_income, by(te4) 11 | gen te4_left=te4-0.2 12 | gen te4_right=te4+0.2 13 | twoway (bar mean_income te4_left, barw(0.2)) (bar median_income te4, barw(0.2)) (bar p_income te4_right, yaxis(2) barw(0.2)), xlabel(1 "文盲" 2 "小学" 3 "初中" 4 "高中" 5 "大专'" 6 "本科" 7 "研究生") ytitle("金额", axis(1)) ytitle("人数", axis(2)) legend(pos(11) ring(0) label(1 "收入均值") label(2 "收入中位数") lab(3 "人数")) 14 | graph export chart_bar4.pdf, replace 15 | -------------------------------------------------------------------------------- /code_in_notes/check_random.do: -------------------------------------------------------------------------------- 1 | // check_random.do 2 | set more off 3 | clear 4 | set obs 1000 5 | // 行号是奇数还是偶数 6 | gen variable_id=mod(_n,2) 7 | gen group=ceil(_n/2) 8 | // 产生序贯的随机数 9 | gen x=runiform() 10 | // 将奇数观测作为x1,偶数观测作为x0 11 | reshape wide x, i(group) j(variable_id) 12 | // 画散点图 13 | scatter x1 x0 , graphr(fcolor(white) color(white)) 14 | // 保存图片 15 | graph export check_random_stata.eps, replace 16 | -------------------------------------------------------------------------------- /code_in_notes/check_random.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | import numpy.random as nprd 3 | # 获取序贯的1000个均匀分布随机数 4 | x = nprd.random(1000) 5 | # 将1000个均匀分布随机数按照奇偶数分成两个序列x0 和x1 6 | x0 = np.array([x[i] for i in range(1000) if i % 2 == 0]) 7 | x1 = np.array([x[i] for i in range(1000) if i % 2 == 1]) 8 | # 画图 9 | import matplotlib.pyplot as plt 10 | # 设定图像大小 11 | plt.rcParams['figure.figsize'] = (8.0, 5.0) 12 | plt.scatter(x0, x1, color='blue') ## 画出散点图 13 | plt.savefig("check_random_py.pdf") -------------------------------------------------------------------------------- /code_in_notes/clustering_wholesale.do: -------------------------------------------------------------------------------- 1 | // clustering.do 2 | // 导入数据 3 | clear 4 | set more off 5 | import delimited "datasets/wholesale.csv" 6 | 7 | /* 进行聚类,使用层次聚类: 8 | average linkage 9 | angular(角度,余弦相似度)*/ 10 | cluster averagelinkage fresh milk grocery frozen detergents_paper delicassen, measure(angular) 11 | // 画图 12 | //cluster dendrogram, cutnumber(30) 13 | // 分5类 14 | cluster gen cluster1=groups(5) 15 | // kmeans 聚类,使用层次聚类的结果作为初试类别 16 | cluster kmeans fresh milk grocery frozen, /* 17 | */k(5) measure(angular) start(group(cluster1)) 18 | rename _clus_2 cluster_kmeans 19 | // 画图,比如fresh和grocery 20 | twoway (scatter fresh grocery if cluster_kmeans==1)/* 21 | */(scatter fresh grocery if cluster_kmeans==2)/* 22 | */(scatter fresh grocery if cluster_kmeans==3)/* 23 | */(scatter fresh grocery if cluster_kmeans==4)/* 24 | */(scatter fresh grocery if cluster_kmeans==5), legend(off) 25 | -------------------------------------------------------------------------------- /code_in_notes/datasets/OHIE_QJE.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/OHIE_QJE.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/Questionarie.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/Questionarie.pdf -------------------------------------------------------------------------------- /code_in_notes/datasets/bond_interest.xlsx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/bond_interest.xlsx -------------------------------------------------------------------------------- /code_in_notes/datasets/ccapm.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/ccapm.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/cfps_adult.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/cfps_adult.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/cfps_family_econ.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/cfps_family_econ.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/chfs_ind.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/chfs_ind.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/citydata.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/citydata.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/export.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/export.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/hs300index.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/hs300index.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/rr000005.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/rr000005.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/soep_female_labor.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/soep_female_labor.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/titanic.dta: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/code_in_notes/datasets/titanic.dta -------------------------------------------------------------------------------- /code_in_notes/datasets/wholesale.csv: -------------------------------------------------------------------------------- 1 | Channel,Region,Fresh,Milk,Grocery,Frozen,Detergents_Paper,Delicassen 2 | 2,3,12669,9656,7561,214,2674,1338 3 | 2,3,7057,9810,9568,1762,3293,1776 4 | 2,3,6353,8808,7684,2405,3516,7844 5 | 1,3,13265,1196,4221,6404,507,1788 6 | 2,3,22615,5410,7198,3915,1777,5185 7 | 2,3,9413,8259,5126,666,1795,1451 8 | 2,3,12126,3199,6975,480,3140,545 9 | 2,3,7579,4956,9426,1669,3321,2566 10 | 1,3,5963,3648,6192,425,1716,750 11 | 2,3,6006,11093,18881,1159,7425,2098 12 | 2,3,3366,5403,12974,4400,5977,1744 13 | 2,3,13146,1124,4523,1420,549,497 14 | 2,3,31714,12319,11757,287,3881,2931 15 | 2,3,21217,6208,14982,3095,6707,602 16 | 2,3,24653,9465,12091,294,5058,2168 17 | 1,3,10253,1114,3821,397,964,412 18 | 2,3,1020,8816,12121,134,4508,1080 19 | 1,3,5876,6157,2933,839,370,4478 20 | 2,3,18601,6327,10099,2205,2767,3181 21 | 1,3,7780,2495,9464,669,2518,501 22 | 2,3,17546,4519,4602,1066,2259,2124 23 | 1,3,5567,871,2010,3383,375,569 24 | 1,3,31276,1917,4469,9408,2381,4334 25 | 2,3,26373,36423,22019,5154,4337,16523 26 | 2,3,22647,9776,13792,2915,4482,5778 27 | 2,3,16165,4230,7595,201,4003,57 28 | 1,3,9898,961,2861,3151,242,833 29 | 1,3,14276,803,3045,485,100,518 30 | 2,3,4113,20484,25957,1158,8604,5206 31 | 1,3,43088,2100,2609,1200,1107,823 32 | 1,3,18815,3610,11107,1148,2134,2963 33 | 1,3,2612,4339,3133,2088,820,985 34 | 1,3,21632,1318,2886,266,918,405 35 | 1,3,29729,4786,7326,6130,361,1083 36 | 1,3,1502,1979,2262,425,483,395 37 | 2,3,688,5491,11091,833,4239,436 38 | 1,3,29955,4362,5428,1729,862,4626 39 | 2,3,15168,10556,12477,1920,6506,714 40 | 2,3,4591,15729,16709,33,6956,433 41 | 1,3,56159,555,902,10002,212,2916 42 | 1,3,24025,4332,4757,9510,1145,5864 43 | 1,3,19176,3065,5956,2033,2575,2802 44 | 2,3,10850,7555,14961,188,6899,46 45 | 2,3,630,11095,23998,787,9529,72 46 | 2,3,9670,7027,10471,541,4618,65 47 | 2,3,5181,22044,21531,1740,7353,4985 48 | 2,3,3103,14069,21955,1668,6792,1452 49 | 2,3,44466,54259,55571,7782,24171,6465 50 | 2,3,11519,6152,10868,584,5121,1476 51 | 2,3,4967,21412,28921,1798,13583,1163 52 | 1,3,6269,1095,1980,3860,609,2162 53 | 1,3,3347,4051,6996,239,1538,301 54 | 2,3,40721,3916,5876,532,2587,1278 55 | 2,3,491,10473,11532,744,5611,224 56 | 1,3,27329,1449,1947,2436,204,1333 57 | 1,3,5264,3683,5005,1057,2024,1130 58 | 2,3,4098,29892,26866,2616,17740,1340 59 | 2,3,5417,9933,10487,38,7572,1282 60 | 1,3,13779,1970,1648,596,227,436 61 | 1,3,6137,5360,8040,129,3084,1603 62 | 2,3,8590,3045,7854,96,4095,225 63 | 2,3,35942,38369,59598,3254,26701,2017 64 | 2,3,7823,6245,6544,4154,4074,964 65 | 2,3,9396,11601,15775,2896,7677,1295 66 | 1,3,4760,1227,3250,3724,1247,1145 67 | 2,3,85,20959,45828,36,24231,1423 68 | 1,3,9,1534,7417,175,3468,27 69 | 2,3,19913,6759,13462,1256,5141,834 70 | 1,3,2446,7260,3993,5870,788,3095 71 | 1,3,8352,2820,1293,779,656,144 72 | 1,3,16705,2037,3202,10643,116,1365 73 | 1,3,18291,1266,21042,5373,4173,14472 74 | 1,3,4420,5139,2661,8872,1321,181 75 | 2,3,19899,5332,8713,8132,764,648 76 | 2,3,8190,6343,9794,1285,1901,1780 77 | 1,3,20398,1137,3,4407,3,975 78 | 1,3,717,3587,6532,7530,529,894 79 | 2,3,12205,12697,28540,869,12034,1009 80 | 1,3,10766,1175,2067,2096,301,167 81 | 1,3,1640,3259,3655,868,1202,1653 82 | 1,3,7005,829,3009,430,610,529 83 | 2,3,219,9540,14403,283,7818,156 84 | 2,3,10362,9232,11009,737,3537,2342 85 | 1,3,20874,1563,1783,2320,550,772 86 | 2,3,11867,3327,4814,1178,3837,120 87 | 2,3,16117,46197,92780,1026,40827,2944 88 | 2,3,22925,73498,32114,987,20070,903 89 | 1,3,43265,5025,8117,6312,1579,14351 90 | 1,3,7864,542,4042,9735,165,46 91 | 1,3,24904,3836,5330,3443,454,3178 92 | 1,3,11405,596,1638,3347,69,360 93 | 1,3,12754,2762,2530,8693,627,1117 94 | 2,3,9198,27472,32034,3232,18906,5130 95 | 1,3,11314,3090,2062,35009,71,2698 96 | 2,3,5626,12220,11323,206,5038,244 97 | 1,3,3,2920,6252,440,223,709 98 | 2,3,23,2616,8118,145,3874,217 99 | 1,3,403,254,610,774,54,63 100 | 1,3,503,112,778,895,56,132 101 | 1,3,9658,2182,1909,5639,215,323 102 | 2,3,11594,7779,12144,3252,8035,3029 103 | 2,3,1420,10810,16267,1593,6766,1838 104 | 2,3,2932,6459,7677,2561,4573,1386 105 | 1,3,56082,3504,8906,18028,1480,2498 106 | 1,3,14100,2132,3445,1336,1491,548 107 | 1,3,15587,1014,3970,910,139,1378 108 | 2,3,1454,6337,10704,133,6830,1831 109 | 2,3,8797,10646,14886,2471,8969,1438 110 | 2,3,1531,8397,6981,247,2505,1236 111 | 2,3,1406,16729,28986,673,836,3 112 | 1,3,11818,1648,1694,2276,169,1647 113 | 2,3,12579,11114,17569,805,6457,1519 114 | 1,3,19046,2770,2469,8853,483,2708 115 | 1,3,14438,2295,1733,3220,585,1561 116 | 1,3,18044,1080,2000,2555,118,1266 117 | 1,3,11134,793,2988,2715,276,610 118 | 1,3,11173,2521,3355,1517,310,222 119 | 1,3,6990,3880,5380,1647,319,1160 120 | 1,3,20049,1891,2362,5343,411,933 121 | 1,3,8258,2344,2147,3896,266,635 122 | 1,3,17160,1200,3412,2417,174,1136 123 | 1,3,4020,3234,1498,2395,264,255 124 | 1,3,12212,201,245,1991,25,860 125 | 2,3,11170,10769,8814,2194,1976,143 126 | 1,3,36050,1642,2961,4787,500,1621 127 | 1,3,76237,3473,7102,16538,778,918 128 | 1,3,19219,1840,1658,8195,349,483 129 | 2,3,21465,7243,10685,880,2386,2749 130 | 1,3,140,8847,3823,142,1062,3 131 | 1,3,42312,926,1510,1718,410,1819 132 | 1,3,7149,2428,699,6316,395,911 133 | 1,3,2101,589,314,346,70,310 134 | 1,3,14903,2032,2479,576,955,328 135 | 1,3,9434,1042,1235,436,256,396 136 | 1,3,7388,1882,2174,720,47,537 137 | 1,3,6300,1289,2591,1170,199,326 138 | 1,3,4625,8579,7030,4575,2447,1542 139 | 1,3,3087,8080,8282,661,721,36 140 | 1,3,13537,4257,5034,155,249,3271 141 | 1,3,5387,4979,3343,825,637,929 142 | 1,3,17623,4280,7305,2279,960,2616 143 | 1,3,30379,13252,5189,321,51,1450 144 | 1,3,37036,7152,8253,2995,20,3 145 | 1,3,10405,1596,1096,8425,399,318 146 | 1,3,18827,3677,1988,118,516,201 147 | 2,3,22039,8384,34792,42,12591,4430 148 | 1,3,7769,1936,2177,926,73,520 149 | 1,3,9203,3373,2707,1286,1082,526 150 | 1,3,5924,584,542,4052,283,434 151 | 1,3,31812,1433,1651,800,113,1440 152 | 1,3,16225,1825,1765,853,170,1067 153 | 1,3,1289,3328,2022,531,255,1774 154 | 1,3,18840,1371,3135,3001,352,184 155 | 1,3,3463,9250,2368,779,302,1627 156 | 1,3,622,55,137,75,7,8 157 | 2,3,1989,10690,19460,233,11577,2153 158 | 2,3,3830,5291,14855,317,6694,3182 159 | 1,3,17773,1366,2474,3378,811,418 160 | 2,3,2861,6570,9618,930,4004,1682 161 | 2,3,355,7704,14682,398,8077,303 162 | 2,3,1725,3651,12822,824,4424,2157 163 | 1,3,12434,540,283,1092,3,2233 164 | 1,3,15177,2024,3810,2665,232,610 165 | 2,3,5531,15726,26870,2367,13726,446 166 | 2,3,5224,7603,8584,2540,3674,238 167 | 2,3,15615,12653,19858,4425,7108,2379 168 | 2,3,4822,6721,9170,993,4973,3637 169 | 1,3,2926,3195,3268,405,1680,693 170 | 1,3,5809,735,803,1393,79,429 171 | 1,3,5414,717,2155,2399,69,750 172 | 2,3,260,8675,13430,1116,7015,323 173 | 2,3,200,25862,19816,651,8773,6250 174 | 1,3,955,5479,6536,333,2840,707 175 | 2,3,514,7677,19805,937,9836,716 176 | 1,3,286,1208,5241,2515,153,1442 177 | 2,3,2343,7845,11874,52,4196,1697 178 | 1,3,45640,6958,6536,7368,1532,230 179 | 1,3,12759,7330,4533,1752,20,2631 180 | 1,3,11002,7075,4945,1152,120,395 181 | 1,3,3157,4888,2500,4477,273,2165 182 | 1,3,12356,6036,8887,402,1382,2794 183 | 1,3,112151,29627,18148,16745,4948,8550 184 | 1,3,694,8533,10518,443,6907,156 185 | 1,3,36847,43950,20170,36534,239,47943 186 | 1,3,327,918,4710,74,334,11 187 | 1,3,8170,6448,1139,2181,58,247 188 | 1,3,3009,521,854,3470,949,727 189 | 1,3,2438,8002,9819,6269,3459,3 190 | 2,3,8040,7639,11687,2758,6839,404 191 | 2,3,834,11577,11522,275,4027,1856 192 | 1,3,16936,6250,1981,7332,118,64 193 | 1,3,13624,295,1381,890,43,84 194 | 1,3,5509,1461,2251,547,187,409 195 | 2,3,180,3485,20292,959,5618,666 196 | 1,3,7107,1012,2974,806,355,1142 197 | 1,3,17023,5139,5230,7888,330,1755 198 | 1,1,30624,7209,4897,18711,763,2876 199 | 2,1,2427,7097,10391,1127,4314,1468 200 | 1,1,11686,2154,6824,3527,592,697 201 | 1,1,9670,2280,2112,520,402,347 202 | 2,1,3067,13240,23127,3941,9959,731 203 | 2,1,4484,14399,24708,3549,14235,1681 204 | 1,1,25203,11487,9490,5065,284,6854 205 | 1,1,583,685,2216,469,954,18 206 | 1,1,1956,891,5226,1383,5,1328 207 | 2,1,1107,11711,23596,955,9265,710 208 | 1,1,6373,780,950,878,288,285 209 | 2,1,2541,4737,6089,2946,5316,120 210 | 1,1,1537,3748,5838,1859,3381,806 211 | 2,1,5550,12729,16767,864,12420,797 212 | 1,1,18567,1895,1393,1801,244,2100 213 | 2,1,12119,28326,39694,4736,19410,2870 214 | 1,1,7291,1012,2062,1291,240,1775 215 | 1,1,3317,6602,6861,1329,3961,1215 216 | 2,1,2362,6551,11364,913,5957,791 217 | 1,1,2806,10765,15538,1374,5828,2388 218 | 2,1,2532,16599,36486,179,13308,674 219 | 1,1,18044,1475,2046,2532,130,1158 220 | 2,1,18,7504,15205,1285,4797,6372 221 | 1,1,4155,367,1390,2306,86,130 222 | 1,1,14755,899,1382,1765,56,749 223 | 1,1,5396,7503,10646,91,4167,239 224 | 1,1,5041,1115,2856,7496,256,375 225 | 2,1,2790,2527,5265,5612,788,1360 226 | 1,1,7274,659,1499,784,70,659 227 | 1,1,12680,3243,4157,660,761,786 228 | 2,1,20782,5921,9212,1759,2568,1553 229 | 1,1,4042,2204,1563,2286,263,689 230 | 1,1,1869,577,572,950,4762,203 231 | 1,1,8656,2746,2501,6845,694,980 232 | 2,1,11072,5989,5615,8321,955,2137 233 | 1,1,2344,10678,3828,1439,1566,490 234 | 1,1,25962,1780,3838,638,284,834 235 | 1,1,964,4984,3316,937,409,7 236 | 1,1,15603,2703,3833,4260,325,2563 237 | 1,1,1838,6380,2824,1218,1216,295 238 | 1,1,8635,820,3047,2312,415,225 239 | 1,1,18692,3838,593,4634,28,1215 240 | 1,1,7363,475,585,1112,72,216 241 | 1,1,47493,2567,3779,5243,828,2253 242 | 1,1,22096,3575,7041,11422,343,2564 243 | 1,1,24929,1801,2475,2216,412,1047 244 | 1,1,18226,659,2914,3752,586,578 245 | 1,1,11210,3576,5119,561,1682,2398 246 | 1,1,6202,7775,10817,1183,3143,1970 247 | 2,1,3062,6154,13916,230,8933,2784 248 | 1,1,8885,2428,1777,1777,430,610 249 | 1,1,13569,346,489,2077,44,659 250 | 1,1,15671,5279,2406,559,562,572 251 | 1,1,8040,3795,2070,6340,918,291 252 | 1,1,3191,1993,1799,1730,234,710 253 | 2,1,6134,23133,33586,6746,18594,5121 254 | 1,1,6623,1860,4740,7683,205,1693 255 | 1,1,29526,7961,16966,432,363,1391 256 | 1,1,10379,17972,4748,4686,1547,3265 257 | 1,1,31614,489,1495,3242,111,615 258 | 1,1,11092,5008,5249,453,392,373 259 | 1,1,8475,1931,1883,5004,3593,987 260 | 1,1,56083,4563,2124,6422,730,3321 261 | 1,1,53205,4959,7336,3012,967,818 262 | 1,1,9193,4885,2157,327,780,548 263 | 1,1,7858,1110,1094,6818,49,287 264 | 1,1,23257,1372,1677,982,429,655 265 | 1,1,2153,1115,6684,4324,2894,411 266 | 2,1,1073,9679,15445,61,5980,1265 267 | 1,1,5909,23527,13699,10155,830,3636 268 | 2,1,572,9763,22182,2221,4882,2563 269 | 1,1,20893,1222,2576,3975,737,3628 270 | 2,1,11908,8053,19847,1069,6374,698 271 | 1,1,15218,258,1138,2516,333,204 272 | 1,1,4720,1032,975,5500,197,56 273 | 1,1,2083,5007,1563,1120,147,1550 274 | 1,1,514,8323,6869,529,93,1040 275 | 1,3,36817,3045,1493,4802,210,1824 276 | 1,3,894,1703,1841,744,759,1153 277 | 1,3,680,1610,223,862,96,379 278 | 1,3,27901,3749,6964,4479,603,2503 279 | 1,3,9061,829,683,16919,621,139 280 | 1,3,11693,2317,2543,5845,274,1409 281 | 2,3,17360,6200,9694,1293,3620,1721 282 | 1,3,3366,2884,2431,977,167,1104 283 | 2,3,12238,7108,6235,1093,2328,2079 284 | 1,3,49063,3965,4252,5970,1041,1404 285 | 1,3,25767,3613,2013,10303,314,1384 286 | 1,3,68951,4411,12609,8692,751,2406 287 | 1,3,40254,640,3600,1042,436,18 288 | 1,3,7149,2247,1242,1619,1226,128 289 | 1,3,15354,2102,2828,8366,386,1027 290 | 1,3,16260,594,1296,848,445,258 291 | 1,3,42786,286,471,1388,32,22 292 | 1,3,2708,2160,2642,502,965,1522 293 | 1,3,6022,3354,3261,2507,212,686 294 | 1,3,2838,3086,4329,3838,825,1060 295 | 2,2,3996,11103,12469,902,5952,741 296 | 1,2,21273,2013,6550,909,811,1854 297 | 2,2,7588,1897,5234,417,2208,254 298 | 1,2,19087,1304,3643,3045,710,898 299 | 2,2,8090,3199,6986,1455,3712,531 300 | 2,2,6758,4560,9965,934,4538,1037 301 | 1,2,444,879,2060,264,290,259 302 | 2,2,16448,6243,6360,824,2662,2005 303 | 2,2,5283,13316,20399,1809,8752,172 304 | 2,2,2886,5302,9785,364,6236,555 305 | 2,2,2599,3688,13829,492,10069,59 306 | 2,2,161,7460,24773,617,11783,2410 307 | 2,2,243,12939,8852,799,3909,211 308 | 2,2,6468,12867,21570,1840,7558,1543 309 | 1,2,17327,2374,2842,1149,351,925 310 | 1,2,6987,1020,3007,416,257,656 311 | 2,2,918,20655,13567,1465,6846,806 312 | 1,2,7034,1492,2405,12569,299,1117 313 | 1,2,29635,2335,8280,3046,371,117 314 | 2,2,2137,3737,19172,1274,17120,142 315 | 1,2,9784,925,2405,4447,183,297 316 | 1,2,10617,1795,7647,1483,857,1233 317 | 2,2,1479,14982,11924,662,3891,3508 318 | 1,2,7127,1375,2201,2679,83,1059 319 | 1,2,1182,3088,6114,978,821,1637 320 | 1,2,11800,2713,3558,2121,706,51 321 | 2,2,9759,25071,17645,1128,12408,1625 322 | 1,2,1774,3696,2280,514,275,834 323 | 1,2,9155,1897,5167,2714,228,1113 324 | 1,2,15881,713,3315,3703,1470,229 325 | 1,2,13360,944,11593,915,1679,573 326 | 1,2,25977,3587,2464,2369,140,1092 327 | 1,2,32717,16784,13626,60869,1272,5609 328 | 1,2,4414,1610,1431,3498,387,834 329 | 1,2,542,899,1664,414,88,522 330 | 1,2,16933,2209,3389,7849,210,1534 331 | 1,2,5113,1486,4583,5127,492,739 332 | 1,2,9790,1786,5109,3570,182,1043 333 | 2,2,11223,14881,26839,1234,9606,1102 334 | 1,2,22321,3216,1447,2208,178,2602 335 | 2,2,8565,4980,67298,131,38102,1215 336 | 2,2,16823,928,2743,11559,332,3486 337 | 2,2,27082,6817,10790,1365,4111,2139 338 | 1,2,13970,1511,1330,650,146,778 339 | 1,2,9351,1347,2611,8170,442,868 340 | 1,2,3,333,7021,15601,15,550 341 | 1,2,2617,1188,5332,9584,573,1942 342 | 2,3,381,4025,9670,388,7271,1371 343 | 2,3,2320,5763,11238,767,5162,2158 344 | 1,3,255,5758,5923,349,4595,1328 345 | 2,3,1689,6964,26316,1456,15469,37 346 | 1,3,3043,1172,1763,2234,217,379 347 | 1,3,1198,2602,8335,402,3843,303 348 | 2,3,2771,6939,15541,2693,6600,1115 349 | 2,3,27380,7184,12311,2809,4621,1022 350 | 1,3,3428,2380,2028,1341,1184,665 351 | 2,3,5981,14641,20521,2005,12218,445 352 | 1,3,3521,1099,1997,1796,173,995 353 | 2,3,1210,10044,22294,1741,12638,3137 354 | 1,3,608,1106,1533,830,90,195 355 | 2,3,117,6264,21203,228,8682,1111 356 | 1,3,14039,7393,2548,6386,1333,2341 357 | 1,3,190,727,2012,245,184,127 358 | 1,3,22686,134,218,3157,9,548 359 | 2,3,37,1275,22272,137,6747,110 360 | 1,3,759,18664,1660,6114,536,4100 361 | 1,3,796,5878,2109,340,232,776 362 | 1,3,19746,2872,2006,2601,468,503 363 | 1,3,4734,607,864,1206,159,405 364 | 1,3,2121,1601,2453,560,179,712 365 | 1,3,4627,997,4438,191,1335,314 366 | 1,3,2615,873,1524,1103,514,468 367 | 2,3,4692,6128,8025,1619,4515,3105 368 | 1,3,9561,2217,1664,1173,222,447 369 | 1,3,3477,894,534,1457,252,342 370 | 1,3,22335,1196,2406,2046,101,558 371 | 1,3,6211,337,683,1089,41,296 372 | 2,3,39679,3944,4955,1364,523,2235 373 | 1,3,20105,1887,1939,8164,716,790 374 | 1,3,3884,3801,1641,876,397,4829 375 | 2,3,15076,6257,7398,1504,1916,3113 376 | 1,3,6338,2256,1668,1492,311,686 377 | 1,3,5841,1450,1162,597,476,70 378 | 2,3,3136,8630,13586,5641,4666,1426 379 | 1,3,38793,3154,2648,1034,96,1242 380 | 1,3,3225,3294,1902,282,68,1114 381 | 2,3,4048,5164,10391,130,813,179 382 | 1,3,28257,944,2146,3881,600,270 383 | 1,3,17770,4591,1617,9927,246,532 384 | 1,3,34454,7435,8469,2540,1711,2893 385 | 1,3,1821,1364,3450,4006,397,361 386 | 1,3,10683,21858,15400,3635,282,5120 387 | 1,3,11635,922,1614,2583,192,1068 388 | 1,3,1206,3620,2857,1945,353,967 389 | 1,3,20918,1916,1573,1960,231,961 390 | 1,3,9785,848,1172,1677,200,406 391 | 1,3,9385,1530,1422,3019,227,684 392 | 1,3,3352,1181,1328,5502,311,1000 393 | 1,3,2647,2761,2313,907,95,1827 394 | 1,3,518,4180,3600,659,122,654 395 | 1,3,23632,6730,3842,8620,385,819 396 | 1,3,12377,865,3204,1398,149,452 397 | 1,3,9602,1316,1263,2921,841,290 398 | 2,3,4515,11991,9345,2644,3378,2213 399 | 1,3,11535,1666,1428,6838,64,743 400 | 1,3,11442,1032,582,5390,74,247 401 | 1,3,9612,577,935,1601,469,375 402 | 1,3,4446,906,1238,3576,153,1014 403 | 1,3,27167,2801,2128,13223,92,1902 404 | 1,3,26539,4753,5091,220,10,340 405 | 1,3,25606,11006,4604,127,632,288 406 | 1,3,18073,4613,3444,4324,914,715 407 | 1,3,6884,1046,1167,2069,593,378 408 | 1,3,25066,5010,5026,9806,1092,960 409 | 2,3,7362,12844,18683,2854,7883,553 410 | 2,3,8257,3880,6407,1646,2730,344 411 | 1,3,8708,3634,6100,2349,2123,5137 412 | 1,3,6633,2096,4563,1389,1860,1892 413 | 1,3,2126,3289,3281,1535,235,4365 414 | 1,3,97,3605,12400,98,2970,62 415 | 1,3,4983,4859,6633,17866,912,2435 416 | 1,3,5969,1990,3417,5679,1135,290 417 | 2,3,7842,6046,8552,1691,3540,1874 418 | 2,3,4389,10940,10908,848,6728,993 419 | 1,3,5065,5499,11055,364,3485,1063 420 | 2,3,660,8494,18622,133,6740,776 421 | 1,3,8861,3783,2223,633,1580,1521 422 | 1,3,4456,5266,13227,25,6818,1393 423 | 2,3,17063,4847,9053,1031,3415,1784 424 | 1,3,26400,1377,4172,830,948,1218 425 | 2,3,17565,3686,4657,1059,1803,668 426 | 2,3,16980,2884,12232,874,3213,249 427 | 1,3,11243,2408,2593,15348,108,1886 428 | 1,3,13134,9347,14316,3141,5079,1894 429 | 1,3,31012,16687,5429,15082,439,1163 430 | 1,3,3047,5970,4910,2198,850,317 431 | 1,3,8607,1750,3580,47,84,2501 432 | 1,3,3097,4230,16483,575,241,2080 433 | 1,3,8533,5506,5160,13486,1377,1498 434 | 1,3,21117,1162,4754,269,1328,395 435 | 1,3,1982,3218,1493,1541,356,1449 436 | 1,3,16731,3922,7994,688,2371,838 437 | 1,3,29703,12051,16027,13135,182,2204 438 | 1,3,39228,1431,764,4510,93,2346 439 | 2,3,14531,15488,30243,437,14841,1867 440 | 1,3,10290,1981,2232,1038,168,2125 441 | 1,3,2787,1698,2510,65,477,52 442 | -------------------------------------------------------------------------------- /code_in_notes/descriptive_mode.do: -------------------------------------------------------------------------------- 1 | // descriptive_mode.do 2 | use datasets/cfps_adult.dta, clear 3 | drop if qp101<0 4 | su qp101 5 | local min_qp101=r(min) 6 | local max_qp101=r(max) 7 | local n_group=15 8 | gen group=floor((qp101-`min_qp101')/(`max_qp101'-`min_qp101'+0.0001)*`n_group') 9 | tab group 10 | // 样本数最多的组为第9组 11 | di "众数=" `min_qp101'+(9+0.5)/`n_group'*(`max_qp101'-`min_qp101'+0.0001) 12 | -------------------------------------------------------------------------------- /code_in_notes/dgp_mle_censor.ado: -------------------------------------------------------------------------------- 1 | // dgp_mle_censor.ado 2 | // 数据生成过程 3 | cap program drop dgp_mle_censor 4 | program dgp_mle_censor 5 | syntax newvarlist(max=1) [, obs(integer 500) mu(real 3.2) sigma2(real 0.5)] 6 | quietly{ 7 | clear 8 | set obs `obs' 9 | tempvar xstar x 10 | gen `xstar'=sqrt(`sigma2')*rnormal()+`mu' 11 | gen `x'= `xstar' if `xstar'<4 & `xstar'>3 12 | replace `x'=4 if `xstar'>=4 13 | replace `x'=3 if `xstar'<=3 14 | gen `varlist'=10^`x' 15 | } 16 | end 17 | -------------------------------------------------------------------------------- /code_in_notes/dgp_mle_censor_simulate.do: -------------------------------------------------------------------------------- 1 | // dgp_mle_censor_simulate.do 2 | clear 3 | set seed 8855 4 | dgp_mle_censor x , obs(500) mu(3.3) sigma2(1) 5 | hist x 6 | graph export dgp_mle_censor_hist.pdf, replace 7 | sort x 8 | gen p=_n/_N 9 | line p x, xline(1000 10000, lpattern(dot)) 10 | graph export dgp_mle_censor_cdf.pdf, replace 11 | -------------------------------------------------------------------------------- /code_in_notes/empirical_distribution.do: -------------------------------------------------------------------------------- 1 | // empirical_distribution.do 2 | clear 3 | use datasets/cfps_adult.dta 4 | drop if qp101<0 5 | // 排序 6 | sort qp101 7 | // 生成排序序号 8 | // 注意qp101中有缺失值,这里不删除缺失值,但是在计算时将其排除 9 | gen notmissing_qp101=qp101~=. 10 | qui: su notmissing_qp101 11 | gen rank_qp101=_n/r(sum) 12 | // 画图 13 | qui: su qp101, de 14 | local median_qp101=r(p50) 15 | line rank_qp101 qp101, xline(`median_qp101') 16 | graph export empirical_distribution.pdf, replace 17 | -------------------------------------------------------------------------------- /code_in_notes/exponential.do: -------------------------------------------------------------------------------- 1 | // file: exponential.do 2 | set more off 3 | clear 4 | set obs 100 5 | // 产生随机数 6 | gen x=-1*log(runiform()) 7 | -------------------------------------------------------------------------------- /code_in_notes/exponential.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | ## file: exponential.py 3 | 4 | # 导入math包,使用math中的log()函数 5 | import math 6 | import random as rd 7 | # 获取5个均匀分布随机数 8 | x=[-1*math.log(rd.random()) for i in range(5)] 9 | print(x) 10 | # 导入numpy包,使用其中的log()函数 11 | import numpy as np 12 | import numpy.random as nprd 13 | # 获取5个均匀分布随机数 14 | x=-1*np.log(nprd.random(5)) 15 | print(x) 16 | -------------------------------------------------------------------------------- /code_in_notes/gaussian_mixture.do: -------------------------------------------------------------------------------- 1 | // check_random.do 2 | set more off 3 | clear 4 | set obs 1000 5 | // generate x1 and x0 6 | gen x0=rnormal(2.5,sqrt(0.8)) 7 | gen x1=rnormal(-2,1) 8 | // about 30% patient 9 | gen d=runiform()<0.7 10 | // generate x 11 | gen x=d*x1+(1-d)*x0 12 | // histogram 13 | hist x 14 | -------------------------------------------------------------------------------- /code_in_notes/gencatutility.ado: -------------------------------------------------------------------------------- 1 | // gencatutility.ado 2 | // Chapter 2.6 in Happiness Quantified: a Satisfaction Calculus Approach, van Praag and Ferrer-i-Carbonell 3 | cap program drop gencatutility 4 | program define gencatutility 5 | version 16 6 | syntax varname, Gen(name) [Verbose] 7 | tempname level n_levels nl cum cum_nl sum_nl p_nl temp1 temp2 f last_f last_p u uu 8 | local `n_levels' = 0 9 | local `cum'=0 10 | local `cum_nl' "" 11 | local `sum_nl'=0 12 | local `p_nl' "" 13 | local `f' "" 14 | local `u' "" 15 | quietly{ 16 | levelsof `varlist', local(`level') 17 | foreach l of local `level'{ 18 | sum `varlist' if `varlist' == `l' 19 | local `nl' = r(N) 20 | local `cum'=``cum''+``nl'' 21 | local `cum_nl' "``cum_nl'' ``cum''" 22 | local `n_levels'=``n_levels''+1 23 | local `sum_nl'=``sum_nl''+r(N) 24 | } 25 | foreach l of local `cum_nl'{ 26 | local `nl'=`l'/``sum_nl'' 27 | local `p_nl' "``p_nl'' ``nl''" 28 | local `temp1'=invnormal(``nl'') 29 | local `temp2'=normalden(``temp1'',0,1) 30 | if ``temp1''==.{ 31 | local `temp2'=0 32 | } 33 | local `f' "``f'' ``temp2''" 34 | } 35 | forvalues i=1/``n_levels''{ 36 | local `temp1': word `i' of ``f'' 37 | local `temp2': word `i' of ``p_nl'' 38 | if `i'==1{ 39 | local `uu'=(0-``temp1'')/(``temp2'') 40 | local `u' "``u'' ``uu''" 41 | local `last_f'=``temp1'' 42 | local `last_p'=``temp2'' 43 | } 44 | else{ 45 | local `uu'=(``last_f''-``temp1'')/(``temp2''-``last_p'') 46 | local `u' "``u'' ``uu''" 47 | local `last_f'=``temp1'' 48 | local `last_p'=``temp2'' 49 | } 50 | } 51 | gen `gen'=. 52 | if "`verbose'" == "verbose"{ 53 | noisily: di "level --- utility" 54 | } 55 | forvalues i=1/``n_levels''{ 56 | local `temp1': word `i' of ``level'' 57 | local `temp2': word `i' of ``u'' 58 | replace `gen'=``temp2'' if `varlist'==``temp1'' 59 | if "`verbose'" == "verbose"{ 60 | noisily: di "``temp1'' --- ``temp2''" 61 | } 62 | } 63 | } 64 | end 65 | -------------------------------------------------------------------------------- /code_in_notes/geometric_mean.do: -------------------------------------------------------------------------------- 1 | // geometric_mean.do 2 | use datasets/hs300index.dta, clear 3 | // 按照时间排序,用行号作为新的时间 4 | sort day 5 | gen t=_n 6 | tsset t 7 | // 计算增长率 8 | gen r=clsindex/L.clsindex 9 | gen log_r=log(r) 10 | su log_r 11 | local geo_mean=exp(r(mean)) 12 | di "几何平均数=`geo_mean'" 13 | di "第一天沪深300指数=" clsindex[1] 14 | di "最后一天沪深300指数=" clsindex[_N] 15 | di "使用几何平均数计算:" clsindex[1]*(`geo_mean'^(_N-1)) 16 | -------------------------------------------------------------------------------- /code_in_notes/ginindex.do: -------------------------------------------------------------------------------- 1 | cap program drop ginindex 2 | program define ginindex, byable(onecall) 3 | version 15 4 | syntax varlist(max=1), gen(name) 5 | quietly{ 6 | if "`_byvars'"==""{ 7 | tempvar class 8 | gen `class'=1 9 | local _byvars "`class'" 10 | } 11 | // 临时变量 12 | tempvar rank totalincome cum rat num rect B delta 13 | // 排序并产生排序变量 14 | sort `_byvars' `varlist' 15 | by `_byvars': gen `rank'=_n 16 | // 产生地区户数、总收入和累积收入及比例 17 | egen `num'=count(`varlist'), by(`_byvars') 18 | egen `totalincome'=total(`varlist'), by(`_byvars') 19 | gen `cum'=`varlist' if `rank'==1 20 | by `_byvars': replace `cum'=`cum'[_n-1]+`varlist'[_n] if `rank'>1 21 | gen `rat'=`cum'/`totalincome' 22 | // 计算每个个体的柱形面积 23 | by `_byvars': gen `rect'=`rat'/`num' 24 | // 调整小样本误差,即减去柱子最上面小三角的面积 25 | gen `delta'=`rat'/2 if `rank'==1 26 | by `_byvars': replace `delta'=/* 27 | */ `rat'[_n]-`rat'[_n-1] if `rank'>1 28 | replace `rect'=`rect'-`delta'/`num'/2 29 | //最终的指数 30 | egen `B'=total(`rect'), by(`_byvars') 31 | gen `gen'=1-2*`B' 32 | } 33 | end 34 | 35 | use "cfps_family_econ.dta", clear 36 | ginindex fincome1, gen(gini_all) 37 | bysort provcd14: ginindex fincome1, gen(gini) 38 | -------------------------------------------------------------------------------- /code_in_notes/histogram_kdensity.do: -------------------------------------------------------------------------------- 1 | // histogram_kdensity.do 2 | clear 3 | use datasets/cfps_adult.dta 4 | drop if qp101<0 5 | twoway (hist qp101,bin(40) density) (kdensity qp101) 6 | graph export hist_kdens.pdf, replace 7 | -------------------------------------------------------------------------------- /code_in_notes/importance_sampling.py: -------------------------------------------------------------------------------- 1 | ## importance_sampling.py 2 | import numpy as np 3 | from numpy import random as nprd 4 | ##设定参数 5 | M = 10000 6 | h1 = lambda x: 0.5 * np.exp(-90 * (x[0] - 0.5)**2 - 45 * (x[1] + 0.1)**2) 7 | domain = lambda x: (x[0] >= -1) * (x[1] >= -1) * (x[0] <= 1) * (x[1] <= 1) 8 | pai = lambda x: 1 / 4 * domain(x) 9 | h1_star = lambda x: 4 * h1(x) 10 | mu1 = 0.5 11 | mu2 = -0.1 12 | sigma1 = np.sqrt(1 / 180) 13 | sigma2 = np.sqrt(1 / 90) 14 | m = lambda x: 1/(2 * np.pi * sigma1 * sigma2) * \ 15 | np.exp(-1 * (x[0]-mu1)**2/(2 * sigma1**2)\ 16 | - (x[1]-mu2)**2 / (2 * sigma2**2)) 17 | 18 | #从m(x)中采样 19 | x = [(nprd.normal(mu1, sigma1), nprd.normal(mu2, sigma2))\ 20 | for i in range(M)] 21 | 22 | ## 计算积分 23 | H = list(map(lambda x: h1_star(x) * pai(x) / m(x), x)) 24 | integral = np.mean(H) 25 | se = np.std(H) / np.sqrt(M) 26 | print("Intgral=", integral) 27 | print("s.e. of Integral=", se) 28 | print("95% C.I.:", integral - 1.96 * se, "~", integral + 1.96 * se) 29 | 30 | -------------------------------------------------------------------------------- /code_in_notes/qqplot_hs300.do: -------------------------------------------------------------------------------- 1 | // qqplot.do 2 | clear 3 | use datasets/hs300index.dta 4 | // 计算quantile,为了避免出现0和1,减去了0.5 5 | sort retindex 6 | gen q=(_n-0.5)/_N 7 | // 计算均值、标准差 8 | sum retindex 9 | local mu=r(mean) 10 | local sd=r(sd) 11 | // 计算正态分布的quantile 12 | gen normal_q = `sd'*invnormal(q)+`mu' 13 | // 画图 14 | twoway (scatter retindex normal_q) /* 15 | */(line normal_q normal_q), legend(off) 16 | graph export "qqplot_manual_hs300.pdf", replace 17 | // 官方命令 18 | qnorm retindex 19 | graph export "qqplot_hs300.pdf", replace 20 | // 直方图 21 | hist retindex, norm 22 | graph export "hist_hs300.pdf", replace 23 | -------------------------------------------------------------------------------- /code_in_notes/rejection.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | ## file: rejection.py 3 | import numpy as np 4 | import numpy.random as nprd 5 | import scipy.special as scisp 6 | ## 设定参数 7 | c=3 #抽取大于5的正态分布样本 8 | N=1000 #抽取200个 9 | ## 直接使用正态分布进行拒绝抽样 10 | times=0 #产生了多少次正态分布 11 | accept=0 #接受了多少个 12 | sample1=[] #结果 13 | while accept=c: 16 | sample1.append(x) 17 | accept=accept+1 18 | times=times+1 19 | print("接受率=",N/times) 20 | 21 | ## 使用指数分布进行拒绝抽样 22 | times=0 #产生了多少次指数分布 23 | accept=0 #接受了多少个 24 | sample2=[] #结果 25 | # 计算参数 26 | lam=(c+np.sqrt(c**2+4))/2 27 | M=np.exp((lam**2-2*lam*c)/2)/(np.sqrt(2*np.pi)* \ 28 | lam*(1-scisp.ndtr(c))) 29 | normal_m=1/np.sqrt(2*np.pi) #正态分布密度函数前面的常数 30 | # 截断正态分布密度函数 31 | f_trunc_normal = lambda x: \ 32 | normal_m*np.exp(-0.5*x**2)/(1-scisp.ndtr(c)) 33 | # 指数分布密度函数 34 | f_exponential = lambda x: lam*np.exp(-1*lam*(x-c)) 35 | while accept=0.5 8 | gen x=d*rnormal(3,1)+(1-d)*rnormal(-3,1) 9 | hist x 10 | graph export simulate_CLT_mix.pdf, replace 11 | // 模拟 12 | local graphs "" 13 | foreach N in 2 3 4 10 100 1000{ 14 | frame create mean`N' m 15 | frame mean`N': label variable m "样本均值" 16 | forvalues j=1/2000{ 17 | clear 18 | set obs `N' 19 | gen d=runiform()>=0.5 20 | gen x=d*rnormal(3,1)+(1-d)*rnormal(-3,1) 21 | su x 22 | frame post mean`N' (r(mean)) 23 | } 24 | frame mean`N': hist m, normal saving(simulate_CLT`N', replace) title("N=`N'") 25 | local graphs "`graphs' simulate_CLT`N'.gph" 26 | } 27 | graph combine `graphs', col(3) 28 | graph export simulate_CLT.pdf, replace 29 | -------------------------------------------------------------------------------- /code_in_notes/simulate_CLT.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from numpy import random as nprd 3 | 4 | 5 | def sampling(N): 6 | ## 产生一组样本,以0.5的概率为z+3,0.5的概率为z-3,其中z~N(0,1) 7 | d = nprd.rand(N) < 0.5 8 | z = nprd.randn(N) 9 | x = np.array([z[i] + 3 if d[i] else z[i] - 3 for i in range(N)]) 10 | return x 11 | 12 | 13 | N = [2, 3, 4, 10, 100, 1000] # sample size 14 | M = 2000 15 | MEANS = [] 16 | for n in N: 17 | mean_x = np.zeros(M) 18 | for i in range(M): 19 | x = sampling(n) 20 | mean_x[i] = np.mean(x) / np.sqrt(10 / n) ## 标准化,因为var(x)=10 21 | MEANS.append(mean_x) 22 | 23 | ## 导入matplotlib 24 | import matplotlib.pyplot as plt 25 | 26 | # 设定图像大小 27 | plt.rcParams['figure.figsize'] = (10.0, 8.0) 28 | 29 | x = sampling(1000) 30 | plt.xlabel('x') 31 | plt.ylabel('Density') 32 | plt.title('Histogram of Mixed Normal') 33 | plt.hist(x, bins=30, density=True) ## histgram 34 | plt.savefig("simulate_CLT_mix.pdf") 35 | plt.show() 36 | 37 | ## 均值 38 | ax1 = plt.subplot(2, 3, 1) 39 | ax2 = plt.subplot(2, 3, 2) 40 | ax3 = plt.subplot(2, 3, 3) 41 | ax4 = plt.subplot(2, 3, 4) 42 | ax5 = plt.subplot(2, 3, 5) 43 | ax6 = plt.subplot(2, 3, 6) 44 | 45 | ## normal density 46 | x = np.linspace(-3, 3, 100) 47 | d = [1.0 / np.sqrt(2 * np.pi) * np.exp(-i**2 / 2) for i in x] 48 | 49 | 50 | def plot_density(ax, data, N): 51 | ax.hist(data, bins=30, density=True) ## histgram 52 | ax.plot(x, d) 53 | ax.set_title(r'Histogram of $\bar{x}$:N=%d' % N) 54 | 55 | 56 | plot_density(ax1, MEANS[0], N[0]) 57 | plot_density(ax2, MEANS[1], N[1]) 58 | plot_density(ax3, MEANS[2], N[2]) 59 | plot_density(ax4, MEANS[3], N[3]) 60 | plot_density(ax5, MEANS[4], N[4]) 61 | plot_density(ax6, MEANS[5], N[5]) 62 | plt.savefig("simulate_CLT.pdf") 63 | plt.show() -------------------------------------------------------------------------------- /code_in_notes/simulate_LLN.do: -------------------------------------------------------------------------------- 1 | // simulate_LLN.do 2 | clear 3 | set more off 4 | set seed 8855 5 | local M=5000 6 | set obs `M' 7 | gen u=runiform() 8 | gen x=u>=0.5 9 | gen x_bar=. 10 | forvalues i=1/`M'{ 11 | qui{ 12 | su x if _n<=`i' 13 | replace x_bar = r(mean) if _n==`i' 14 | } 15 | } 16 | gen n=_n 17 | line x_bar n, yline(0.5) 18 | graph export simulate_LLN.pdf, replace 19 | -------------------------------------------------------------------------------- /code_in_notes/simulate_LLN.py: -------------------------------------------------------------------------------- 1 | import numpy as np 2 | from numpy import random as nprd 3 | 4 | True_P = 0.5 5 | 6 | 7 | def sampling(N): 8 | ## 产生Bernouli样本 9 | x = nprd.rand(N) < True_P 10 | return x 11 | 12 | 13 | M = 10000 #模拟次数 14 | xbar = np.zeros(M) 15 | N = np.array([i + 1 for i in range(M)]) 16 | x = sampling(M) 17 | for i in range(M): 18 | if i == 0: 19 | xbar[i] = x[i] 20 | else: 21 | xbar[i] = (x[i] + xbar[i - 1] * i) / (i + 1) 22 | 23 | ## 导入matplotlib 24 | import matplotlib.pyplot as plt 25 | # 设定图像大小 26 | plt.rcParams['figure.figsize'] = (10.0, 8.0) 27 | 28 | plt.plot(N, xbar, label=r'$\bar{x}$', color='pink') ## xbar 29 | xtrue = np.ones(M) * True_P 30 | plt.plot(N, xtrue, label=r'$0.5$', color='black') ## true xbar 31 | plt.xlabel('N') 32 | plt.ylabel(r'$\bar{x}$') 33 | plt.legend(loc='upper right', frameon=True) 34 | plt.savefig("simulate_LLN.pdf") 35 | plt.show() -------------------------------------------------------------------------------- /code_in_notes/simulation_lm_ols_test.do: -------------------------------------------------------------------------------- 1 | // simulation_lm_ols_test.do 2 | clear 3 | set more off 4 | set seed 42 5 | // test statistic 6 | cap program drop ols_lm_test_stat 7 | program define ols_lm_test_stat, rclass 8 | syntax [,obs(integer 100) beta(real 0) alpha(real 1) sigma(real 1)] 9 | clear 10 | tempvar x y e xe 11 | quietly{ 12 | set obs `obs' 13 | gen `x'=rnormal(0,2) 14 | gen `y'=`x'*`beta'+`alpha'+rnormal(0,`sigma') 15 | su `y' 16 | gen `e'=`y'-r(mean) 17 | gen `xe'=`x'*`e' 18 | sum `xe' 19 | return scalar chi2_stat=(r(sum)^2)/(`obs'*r(Var)) 20 | } 21 | end 22 | // upper tail of chi2(1) 23 | local cv=invchi2tail(1,0.05) 24 | // simulation under H0 25 | simulate chi2=r(chi2_stat),reps(5000): ols_lm_test_stat 26 | gen density=chi2den(1,chi2) if chi2>0.1 27 | sort chi2 28 | twoway (hist chi2, density) (line density chi2), xline(`cv') 29 | graph export simulation_lm_ols_test0.pdf, replace 30 | gen p_005=chi2>=`cv' 31 | su p_005 32 | // simulation under H1 33 | clear 34 | simulate chi2=r(chi2_stat),reps(5000): ols_lm_test_stat, beta(0.2) 35 | gen density=chi2den(1,chi2) if chi2>0.1 36 | sort chi2 37 | twoway (hist chi2, density) (line density chi2), xline(`cv') 38 | graph export simulation_lm_ols_test1.pdf, replace 39 | gen p_005=chi2>=`cv' 40 | su p_005 41 | -------------------------------------------------------------------------------- /code_in_notes/simulation_lm_test.do: -------------------------------------------------------------------------------- 1 | // simulation_lm_test.do 2 | clear 3 | set more off 4 | set seed 42 5 | // test statistic 6 | cap program drop lm_test_stat 7 | program define lm_test_stat, rclass 8 | syntax [,obs(integer 100) lambda(real 10)] 9 | clear 10 | tempvar x x_10 11 | quietly{ 12 | set obs `obs' 13 | gen `x'=rpoisson(`lambda') 14 | gen `x_10'=`x'-10 15 | su `x_10' 16 | return scalar chi2_stat=(r(sum))^2/(`obs'*10) 17 | } 18 | end 19 | // upper tail of chi2(1) 20 | local cv=invchi2tail(1,0.05) 21 | // simulation under H0 22 | simulate chi2=r(chi2_stat),reps(5000): lm_test_stat 23 | gen density=chi2den(1,chi2) if chi2>0.1 24 | sort chi2 25 | twoway (hist chi2, density) (line density chi2), xline(`cv') 26 | graph export simulation_lm_test0.pdf, replace 27 | gen p_005=chi2>=`cv' 28 | su p_005 29 | // simulation under H1 30 | clear 31 | simulate chi2=r(chi2_stat),reps(5000): lm_test_stat, lambda(11.5) 32 | gen density=chi2den(1,chi2) if chi2>0.1 33 | sort chi2 34 | twoway (hist chi2, density) (line density chi2), xline(`cv') 35 | graph export simulation_lm_test1.pdf, replace 36 | gen p_005=chi2>=`cv' 37 | su p_005 38 | -------------------------------------------------------------------------------- /code_in_notes/simulation_lr_test.do: -------------------------------------------------------------------------------- 1 | // simulation_lr_test.do 2 | clear 3 | set more off 4 | set seed 42 5 | // test statistic 6 | cap program drop lr_test_stat 7 | program define lr_test_stat, rclass 8 | syntax [,obs(integer 100) lambda(real 1)] 9 | clear 10 | tempvar x 11 | quietly{ 12 | set obs `obs' 13 | gen `x'=rpoisson(`lambda') 14 | su `x' 15 | return scalar chi2_stat=2*`obs'*(log(r(mean))*r(mean)-r(mean)+1) 16 | } 17 | end 18 | // upper tail of chi2(1) 19 | local cv=invchi2tail(1,0.05) 20 | // simulation under H0 21 | simulate chi2=r(chi2_stat),reps(5000): lr_test_stat 22 | gen density=chi2den(1,chi2) if chi2>0.1 23 | sort chi2 24 | twoway (hist chi2, density) (line density chi2), xline(`cv') 25 | graph export simulation_lr_test0.pdf, replace 26 | gen p_005=chi2>=`cv' 27 | su p_005 28 | // simulation under H1 29 | clear 30 | simulate chi2=r(chi2_stat),reps(5000): lr_test_stat, lambda(1.5) 31 | gen density=chi2den(1,chi2) if chi2>0.1 32 | sort chi2 33 | twoway (hist chi2, density) (line density chi2), xline(`cv') 34 | graph export simulation_lr_test1.pdf, replace 35 | gen p_005=chi2>=`cv' 36 | su p_005 37 | -------------------------------------------------------------------------------- /code_in_notes/simulation_wald_test.do: -------------------------------------------------------------------------------- 1 | // simulation_wald_test.do 2 | clear 3 | set more off 4 | set seed 42 5 | // test statistic 6 | cap program drop wald_test_stat 7 | program define wald_test_stat, rclass 8 | syntax [,obs(integer 100) mu(real -1) sigma2(real 1)] 9 | clear 10 | tempvar x 11 | quietly{ 12 | set obs `obs' 13 | gen `x'=rnormal(`mu',sqrt(`sigma2')) 14 | su `x' 15 | return scalar chi2_stat=`obs'*(r(mean)^2-1)^2/(4*r(mean)^2*r(Var)) 16 | } 17 | end 18 | // upper tail of chi2(1) 19 | local cv=invchi2tail(1,0.05) 20 | // simulation under H0 21 | simulate chi2=r(chi2_stat),reps(5000): wald_test_stat 22 | gen density=chi2den(1,chi2) if chi2>0.1 23 | sort chi2 24 | twoway (hist chi2, density) (line density chi2), xline(`cv') 25 | graph export simulation_wald_test0.pdf, replace 26 | gen p_005=chi2>=`cv' 27 | su p_005 28 | // simulation under H1 29 | clear 30 | simulate chi2=r(chi2_stat),reps(5000): wald_test_stat, mu(1.5) 31 | gen density=chi2den(1,chi2) if chi2>0.1 32 | sort chi2 33 | twoway (hist chi2, density) (line density chi2), xline(`cv') 34 | graph export simulation_wald_test1.pdf, replace 35 | gen p_005=chi2>=`cv' 36 | su p_005 37 | -------------------------------------------------------------------------------- /code_in_notes/st_call_py_tree.do: -------------------------------------------------------------------------------- 1 | clear 2 | set more off 3 | use datasets/soep_female_labor.dta 4 | 5 | // 定义变量 6 | local y "employment" 7 | local controls "chld6 chld16 age income husworkhour husemployment region edu husedu" 8 | 9 | // 首先做logit回归做初步探索 10 | logit `y' `controls' 11 | predict ps_employment_logit 12 | gen predict_employment_logit = ps_employment_logit>=0.5 13 | gen accuracy_logit = employment == predict_employment_logit 14 | 15 | //放到Python中去做回归树 16 | python 17 | import numpy as np 18 | import pandas as pd 19 | from sfi import Data, Macro, Missing 20 | def stata2numpy(varname): 21 | data=Data.get(varname) 22 | x=[d if not Missing.isMissing(d) else np.nan for d in data] 23 | return np.array(x) 24 | 25 | y_var_name = Macro.getLocal("y") 26 | x_var_name = Macro.getLocal("controls").split(" ") 27 | y=stata2numpy(y_var_name) 28 | X=pd.DataFrame() 29 | for x in x_var_name: 30 | X[x]=stata2numpy(x) 31 | print(X) 32 | from sklearn import tree 33 | dtree=tree.DecisionTreeClassifier(max_depth=10) ##设定最大深度 34 | dtree.fit(X,y) ##训练 35 | prob_df=dtree.predict_proba(X)[:,1] 36 | pred_df=dtree.predict(X) 37 | 38 | def array2stata(npname): 39 | return [n if np.isfinite(n) else Missing.getValue() for n in npname] 40 | 41 | prob=array2stata(prob_df) 42 | pred=array2stata(pred_df) 43 | Data.addVarDouble("predict_employment_tree") 44 | Data.addVarDouble("ps_employment_tree") 45 | Data.store("predict_employment_tree",None,pred) 46 | Data.store("ps_employment_tree",None,prob) 47 | end 48 | 49 | gen accuracy_tree = employment == predict_employment_tree 50 | su accuracy_logit accuracy_tree -------------------------------------------------------------------------------- /code_in_notes/standard_normal_mean.do: -------------------------------------------------------------------------------- 1 | // standard_normal_mean.do 2 | clear 3 | set more off 4 | cap program drop std_normal_mean 5 | program define std_normal_mean, rclass 6 | version 12 7 | syntax [,obs(integer 10) mu(real 0) sigma(real 1)] 8 | drop _all 9 | set obs `obs' 10 | tempvar x 11 | gen `x'=`sigma'*rnormal()+`mu' 12 | su `x' 13 | return scalar mean1=sqrt(`obs')*(r(mean)-`mu')/`sigma' 14 | return scalar mean2=sqrt(`obs')*(r(mean)-`mu')/r(sd) 15 | end 16 | local N=8 17 | local df=`N'-1 18 | simulate std_mean=r(mean1) sample_mean=r(mean2), reps(20000): std_normal_mean, obs(`N') 19 | 20 | // standardised with sigma 21 | sort std_mean 22 | gen normal_den_std_mean=normalden(std_mean) 23 | label variable normal_den_std_mean "Std Normal Density" 24 | gen student_den_std_mean=tden(`df',std_mean) 25 | label variable student_den_std_mean "t(`df') Density" 26 | twoway (hist std_mean, density) (line normal_den_std_mean std_mean) (line student_den_std_mean std_mean) , graphr(fcolor(white) color(white)) xtitle("") saving(standard_normal_mean_1, replace) 27 | 28 | // standardised with std deviation 29 | sort sample_mean 30 | gen normal_den_std_mean2=normalden(sample_mean) 31 | label variable normal_den_std_mean2 "Std Normal Density" 32 | gen t_den_std_sample_mean=tden(`df',sample_mean) 33 | label variable t_den_std_sample_mean "t(`df') Density" 34 | twoway (hist sample_mean, density) (line normal_den_std_mean2 sample_mean) (line t_den_std_sample_mean sample_mean), graphr(fcolor(white) color(white)) xtitle("") saving(standard_normal_mean_2, replace) 35 | 36 | graph combine standard_normal_mean_1.gph standard_normal_mean_2.gph, graphr(fcolor(white) color(white)) col(2) 37 | graph export standard_normal_mean.pdf, replace 38 | -------------------------------------------------------------------------------- /code_in_notes/standard_normal_var.do: -------------------------------------------------------------------------------- 1 | // standard_normal_var.do 2 | cap program drop std_normal_var 3 | program define std_normal_var, rclass 4 | version 12 5 | syntax [,obs(integer 10) mu(real 0) sigma(real 1)] 6 | drop _all 7 | set obs `obs' 8 | tempvar x 9 | gen `x'=`sigma'*rnormal()+`mu' 10 | su `x' 11 | return scalar std_var=(`obs'-1)*r(Var)/(`sigma'^2) 12 | end 13 | 14 | simulate std_var=r(std_var), reps(20000): std_normal_var 15 | 16 | 17 | sort std_var 18 | gen chi2_den=chi2den(9,std_var) 19 | label variable chi2_den "Chi2 Density" 20 | twoway (hist std_var, density) (line chi2_den std_var), graphr(fcolor(white) color(white)) xtitle("") 21 | graph export standard_normal_var.pdf, replace 22 | -------------------------------------------------------------------------------- /code_in_notes/statistic_mean.do: -------------------------------------------------------------------------------- 1 | // statistic_mean.do 2 | clear all 3 | set seed 19880505 4 | frame create means m 5 | forvalues i=1/10000{ 6 | clear 7 | set obs 100 8 | gen x=rnormal(1,2) 9 | qui: su x 10 | frame post means (r(mean)) 11 | } 12 | frame change means 13 | su m 14 | hist m 15 | graph export statistc_mean.pdf, replace 16 | -------------------------------------------------------------------------------- /code_in_notes/test_power_function.do: -------------------------------------------------------------------------------- 1 | // test_power_function.do 2 | clear 3 | set more off 4 | 5 | ** test under H0: mu=mu0 at 5% significant level 6 | cap program drop test_normal_mean 7 | program define test_normal_mean, rclass 8 | version 12 9 | syntax [,obs(integer 10) mu(real 0) mu0(real 0) sigma(real 1)] 10 | drop _all 11 | set obs `obs' 12 | tempvar x 13 | gen `x'=`sigma'*rnormal()+`mu' 14 | quietly: su `x' 15 | tempname std_mean rejected 16 | scalar `std_mean'=sqrt(`obs')*(r(mean)-`mu0')/r(sd) 17 | di `std_mean' 18 | if abs(`std_mean')>invt(`obs'-1,1-0.05/2){ 19 | scalar `rejected'=1 20 | } 21 | else{ 22 | scalar `rejected'=0 23 | } 24 | return scalar rejected=`rejected' 25 | end 26 | 27 | ** replicate test for 1000 times by default 28 | cap program drop compute_power 29 | program define compute_power, rclass 30 | version 12 31 | syntax [,obs(integer 10) mu(real 0) mu0(real 0)/* 32 | */ sigma(real 1) reps(integer 1000)] 33 | quietly{ 34 | preserve // 缓存内存中现有的变量 35 | drop _all 36 | simulate rejected=r(rejected),reps(`reps'):/* 37 | */ test_normal_mean, obs(`obs') mu(`mu')/* 38 | */ mu0(`mu0') sigma(`sigma') 39 | quietly: su rejected 40 | return scalar power=r(mean) 41 | restore // 恢复preserve之前内存变量 42 | } 43 | end 44 | 45 | ** draw power function for sample size=[5 30 100] 46 | set obs 100 47 | gen mu=-3+(_n-1)*6/99 48 | tempname mu 49 | gen power5=. 50 | gen power30=. 51 | gen power100=. 52 | foreach ss in 5 30 100{ 53 | forvalues i= 1/100{ 54 | ** mu in [-3,3] 55 | local `mu'=-3+(`i'-1)*6/99 56 | compute_power, mu(``mu'') obs(`ss') 57 | replace power`ss'=r(power) in `i' 58 | } 59 | } 60 | label variable mu "Ture value of mu" 61 | label variable power5 "Power 5 Samples" 62 | label variable power30 "Power 30 Samples" 63 | label variable power100 "Power 100 Samples" 64 | twoway (line power5 mu, lpattern(solid))/* 65 | */ (line power30 mu, lpattern(dash))/* 66 | */ (line power100 mu, lpattern(dot)) 67 | graph export power_function.pdf, replace 68 | -------------------------------------------------------------------------------- /code_in_notes/test_under_null.do: -------------------------------------------------------------------------------- 1 | // test_under_null.do 2 | clear 3 | set more off 4 | set seed 880505 5 | // test under H0: mu=mu0 at 5% significant level 6 | cap program drop test_normal_mean 7 | program define test_normal_mean, rclass 8 | version 12 9 | syntax [,obs(integer 10) mu(real 0) mu0(real 0) sigma(real 1)] 10 | drop _all 11 | set obs `obs' 12 | tempvar x 13 | gen `x'=`sigma'*rnormal()+`mu' 14 | quietly: su `x' 15 | tempname std_mean rejected 16 | scalar `std_mean'=sqrt(`obs')*(r(mean)-`mu0')/r(sd) 17 | di `std_mean' 18 | if abs(`std_mean')>invt(`obs'-1,1-0.05/2){ 19 | scalar `rejected'=1 20 | } 21 | else{ 22 | scalar `rejected'=0 23 | } 24 | return scalar rejected=`rejected' 25 | end 26 | 27 | simulate rejected=r(rejected),reps(10000): test_normal_mean 28 | su rejected 29 | -------------------------------------------------------------------------------- /code_in_notes/ttest_mean_comparison.do: -------------------------------------------------------------------------------- 1 | // t-test of two means comparison 2 | use datasets/cfps_adult.dta, clear 3 | gen log_income=log(1+p_income) 4 | // 方差相同假设下的检验 5 | ttest log_income, by(cfps_gender) 6 | // 方差不相同假设下的检验 7 | ttest log_income, by(cfps_gender) unequal 8 | // 方差不相同的假设下比较 9 | -------------------------------------------------------------------------------- /code_in_notes/twosls_by_hand.do: -------------------------------------------------------------------------------- 1 | // 2SLS by hand 2 | cap program drop twosls 3 | program twosls, eclass 4 | version 15.0 5 | syntax varlist(max=1), endo(varlist) instru(varlist) /* 6 | */control(varlist) 7 | tempname dep Xhat XhhX pred_endo pred_var b sigma2 V 8 | tempvar resid 9 | local `dep' "`varlist'" 10 | quietly{ 11 | // get the predicted value of endo x 12 | local `pred_var' "" 13 | foreach x of varlist `endo'{ 14 | reg `x' `instru' `control' 15 | predict `pred_endo'_`x' 16 | local `pred_var' "``pred_var'' `pred_endo'_`x'" 17 | } 18 | local `Xhat' "``pred_var'' `control'" 19 | // ols of y on Xhat, get b 20 | reg ``dep'' ``Xhat'' 21 | matrix `b'=e(b) 22 | mat colnames `b'= `endo' `control' _cons 23 | ///// compute variance under homoskedasticity 24 | // first compute residuals 25 | gen `resid'=``dep'' 26 | foreach x of varlist `endo' `control'{ 27 | replace `resid'=`resid'-`b'[1,colnumb(`b',"`x'")]*`x' 28 | } 29 | replace `resid'=`resid'-`b'[1,colnumb(`b',"_cons")] 30 | su `resid' 31 | scalar `sigma2'=r(Var) 32 | // then compute XhhX 33 | matrix accum `XhhX'=``Xhat'' 34 | matrix `V'=`sigma2'*invsym(`XhhX') 35 | mat colnames `V'= `endo' `control' _cons 36 | mat rownames `V'= `endo' `control' _cons 37 | drop ``pred_var'' 38 | } 39 | ereturn clear 40 | ereturn post `b' `V' 41 | ereturn local depvar "``dep''" 42 | ereturn display 43 | end 44 | // test the program 45 | clear 46 | set more off 47 | set obs 1000 48 | // generate fake data 49 | gen z=rnormal() 50 | gen u=rnormal() 51 | gen x1=z+rnormal()+u 52 | gen x2=z+0.5*rnormal() 53 | gen y=2+x1+x2+u 54 | // compare it with ivregress commmand 55 | ivregress 2sls y (x1=z) x2 56 | twosls y, endo(x1) instru(z) control(x2) 57 | -------------------------------------------------------------------------------- /code_in_notes/uniform.c: -------------------------------------------------------------------------------- 1 | // file: uniform.c 2 | #include 3 | #include // 使用标准库,包含rand() 4 | int main(int argc, char const *argv[]) { 5 | // 打印出rand()所生成的最大整数 6 | printf("%d\n",RAND_MAX); 7 | // 设置seed 8 | srand(505); 9 | // 生成(0,1)上的10个随机数 10 | int i; 11 | for (i=0; i<5; ++i){ 12 | double x=(double)rand()/RAND_MAX; 13 | printf("%f ",x); 14 | } 15 | printf("\n"); 16 | // 如果每次都设置seed生成(0,1)上的5个随机数 17 | //那么每次生成的随机数都相同 18 | for (i=0; i<5; ++i){ 19 | srand(505); 20 | double x=(double)rand()/RAND_MAX; 21 | printf("%f ",x); 22 | } 23 | printf("\n"); 24 | return 0; 25 | } 26 | -------------------------------------------------------------------------------- /code_in_notes/uniform.do: -------------------------------------------------------------------------------- 1 | // file: uniform.do 2 | // 关闭--more-- 3 | set more off 4 | // 清除工作区内所有数据 5 | clear 6 | // 设置样本量 7 | set obs 100 8 | // 设置seed 9 | set seed 505 10 | // 产生随机数 11 | gen x=runiform() 12 | -------------------------------------------------------------------------------- /code_in_notes/uniform.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/python3 2 | ## file: uniform.py 3 | 4 | # 导入random包 5 | import random as rd 6 | # 设置seed 7 | rd.seed(505) 8 | # 获取5个均匀分布随机数 9 | x=[rd.random() for i in range(5)] 10 | print(x) 11 | # 导入numpy中的random包 12 | import numpy.random as nprd 13 | # 设置seed 14 | nprd.seed(505) 15 | # 获取5个均匀分布随机数 16 | x=nprd.random(5) 17 | print(x) 18 | -------------------------------------------------------------------------------- /code_in_notes/zipf_law.do: -------------------------------------------------------------------------------- 1 | // zipf_law.do 2 | clear 3 | use datasets/citydata.dta 4 | keep if Year==2011 5 | sort v87 6 | gen rank=_N-_n+1 7 | gen log_rank=log10(rank) 8 | gen log_pop=log10(v87*10000) // 数据的单位为万人 9 | twoway (scatter log_pop log_rank if _n<_N-5) (scatter log_pop log_rank if _n>=_N-5, mlabel(City)), legend(off) xtitle("城市大小排序的对数(从大到小)") ytitle("人口的对数") 10 | graph export zipf_law.pdf, replace 11 | -------------------------------------------------------------------------------- /notebook_julia/Julia.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# Julia的安装\n", 8 | "Julia是一个开源的数值计算软件,由于具有JIT等特性,所以具有非常高的性能。我们可以从Julia官网:https://julialang.org 下载和安装。\n", 9 | "Julia的界面非常简单,不适合编写程序,因而我们一般通过配置Atom, sublime等编辑器写Julia程序。此外,通过安装Jupyter,再在Julia中安装IJulia也可以使用Jupyter调用Julia。安装IJulia的方法很简单,只需要在Julia的命令界面数据「Pkg.add(\"IJulia\")」即可,其中「Pkg.add()」即安装Julia扩展包的命令。\n", 10 | "为了展示方便,我们仍然推荐使用Jupyter作为学习工具。比如此文档就是使用Jupyter写作。\n", 11 | "# 使用Julia生成随机数\n", 12 | "在Julia中,可以使用rand()函数生成随机数。最基本的是生成一个在$(0,1)$区间内的均匀分布的随机数,使用此均匀分布随机数,给定任意的分布函数$F$,可以生成服从$F$的随机数。" 13 | ] 14 | }, 15 | { 16 | "cell_type": "code", 17 | "execution_count": 2, 18 | "metadata": {}, 19 | "outputs": [ 20 | { 21 | "name": "stdout", 22 | "output_type": "stream", 23 | "text": [ 24 | "一个(0,1)区间内的随机数:0.37548057506738663\n", 25 | "20个(0,1)区间内的随机数:\n", 26 | "[0.719472, 0.447485, 0.101696, 0.166868, 0.042199, 0.29615, 0.957232, 0.688239, 0.583882, 0.30275, 0.718666, 0.945527, 0.150395, 0.650269, 0.811649, 0.770101, 0.681383, 0.066861, 0.0560345, 0.760834]" 27 | ] 28 | } 29 | ], 30 | "source": [ 31 | "## 生成一个x~Uniform(0,1)\n", 32 | "x=rand()\n", 33 | "print(\"一个(0,1)区间内的随机数:\",x,\"\\n\")\n", 34 | "\n", 35 | "## 生成20个z~Uniform(0,1)\n", 36 | "z=rand(20)\n", 37 | "print(\"20个(0,1)区间内的随机数:\",\"\\n\")\n", 38 | "print(z)" 39 | ] 40 | }, 41 | { 42 | "cell_type": "markdown", 43 | "metadata": {}, 44 | "source": [ 45 | "如果我们需要生成一个服从分布函数$F: R\\rightarrow [0,1]$的随机数,那么只要首先生成一个$(0,1)$的随机数$u$,并令$x=F^{-1}(u)$,那么新生成的$x$即服从$F$的分布。比如,指数分布的分布函数为$1-e^{-\\frac{1}{b}\\cdot x}$,其中b为一个参数,因而我们可以使用$x=-b\\cdot \\ln(u)$来生成服从指数分布的随机数。" 46 | ] 47 | }, 48 | { 49 | "cell_type": "code", 50 | "execution_count": 5, 51 | "metadata": { 52 | "scrolled": true 53 | }, 54 | "outputs": [ 55 | { 56 | "name": "stdout", 57 | "output_type": "stream", 58 | "text": [ 59 | "20个服从指数分布F(x)=1-exp{-(1/b)*x}的随机数:\n", 60 | "[2.58645, 11.1848, 0.918512, 0.543136, 3.53971, 0.259657, 1.99849, 0.350091, 3.09114, 0.165935, 0.0657694, 0.949447, 9.25605, 0.393429, 10.0648, 1.87895, 2.65323, 6.0845, 6.48842, 2.73542]" 61 | ] 62 | } 63 | ], 64 | "source": [ 65 | "## 设定参数\n", 66 | "b=3\n", 67 | "\n", 68 | "## 生成20个x~F(x)=1-exp{-(1/b)*x}\n", 69 | "x=-1*log.(rand(20))*b\n", 70 | "print(\"20个服从指数分布F(x)=1-exp{-(1/b)*x}的随机数:\\n\")\n", 71 | "print(x)" 72 | ] 73 | }, 74 | { 75 | "cell_type": "markdown", 76 | "metadata": {}, 77 | "source": [ 78 | "我们可以使用经验分布函数(Empirical distribution function)与理论的分布函数比较,来判断我们生成的随机数是否满足某一分布。经验分布函数的定义为:$\\hat{F}(x)=\\frac{1}{N}\\cdot \\sum_{i=1}^N 1\\{X_i \\leq x\\}$,也就是给定一个$x$,其经验分布函数的值为样本中小于等于$x$的比例,比如:" 79 | ] 80 | }, 81 | { 82 | "cell_type": "code", 83 | "execution_count": 20, 84 | "metadata": {}, 85 | "outputs": [ 86 | { 87 | "name": "stdout", 88 | "output_type": "stream", 89 | "text": [ 90 | " x | 分布函数 | 经验分布函数| 差的绝对值\n", 91 | "0.1 |0.0327838995179941 | 0.035 | 0.002216100482005906 \n", 92 | "0.3 |0.09516258196404037 | 0.1 | 0.004837418035959634 \n", 93 | "0.5 |0.15351827510938598 | 0.185 | 0.031481724890614016 \n", 94 | "0.7 |0.20811043366321835 | 0.255 | 0.04688956633678165 \n", 95 | "0.9 |0.2591817793182821 | 0.295 | 0.03581822068171786 \n", 96 | "1.1 |0.3069593799135585 | 0.325 | 0.018040620086441528 \n", 97 | "1.3 |0.3516556589984903 | 0.4 | 0.04834434100150975 \n", 98 | "1.5 |0.3934693402873666 | 0.455 | 0.06153065971263344 \n", 99 | "1.7 |0.43258633120299617 | 0.495 | 0.06241366879700383 \n", 100 | "1.9 |0.46918054943798604 | 0.54 | 0.070819450562014 \n", 101 | "2.1 |0.5034146962085905 | 0.575 | 0.07158530379140948 \n", 102 | "2.3 |0.5354409796390884 | 0.625 | 0.08955902036091157 \n", 103 | "2.5 |0.5654017914929217 | 0.655 | 0.08959820850707834 \n", 104 | "2.7 |0.5934303402594009 | 0.68 | 0.08656965974059916 \n", 105 | "2.9 |0.6196512434107414 | 0.715 | 0.09534875658925857 \n", 106 | "3.1 |0.6441810814626581 | 0.735 | 0.09081891853734192 \n", 107 | "3.3 |0.6671289163019204 | 0.745 | 0.0778710836980796 \n", 108 | "3.5 |0.6885967760854023 | 0.76 | 0.07140322391459775 \n", 109 | "3.7 |0.708680108866529 | 0.77 | 0.06131989113347103 \n", 110 | "3.9 |0.7274682069659874 | 0.785 | 0.05753179303401268 \n", 111 | "4.1 |0.7450446039734899 | 0.795 | 0.04995539602651011 \n", 112 | "4.3 |0.7614874461456975 | 0.8 | 0.03851255385430252 \n", 113 | "4.5 |0.7768698398515702 | 0.81 | 0.033130160148429844 \n", 114 | "4.7 |0.7912601766099203 | 0.825 | 0.03373982339007964 \n", 115 | "4.9 |0.8047224371643142 | 0.835 | 0.030277562835685723 \n", 116 | "5.1 |0.8173164759472653 | 0.845 | 0.027683524052734665 \n", 117 | "5.3 |0.8290982871984751 | 0.85 | 0.020901712801524863 \n", 118 | "5.5 |0.8401202539203061 | 0.86 | 0.019879746079693894 \n", 119 | "5.7 |0.8504313807773649 | 0.87 | 0.019568619222635086 \n", 120 | "5.9 |0.8600775119756906 | 0.87 | 0.009922488024309395 \n", 121 | "6.1 |0.8691015350902557 | 0.88 | 0.010898464909744332 \n", 122 | "6.3 |0.877543571747018 | 0.895 | 0.017456428252981993 \n", 123 | "6.5 |0.8854411560073123 | 0.895 | 0.009558843992687693 \n", 124 | "6.7 |0.8928294012476933 | 0.9 | 0.007170598752306745 \n", 125 | "6.9 |0.8997411562771962 | 0.9 | 0.0002588437228038254 \n", 126 | "7.1 |0.9062071513861237 | 0.91 | 0.0037928486138762985 \n", 127 | "7.3 |0.9122561349757057 | 0.91 | 0.002256134975705648 \n", 128 | "7.5 |0.9179150013761012 | 0.92 | 0.0020849986238988816 \n", 129 | "7.7 |0.9232089104210319 | 0.92 | 0.0032089104210318853 \n", 130 | "7.9 |0.9281613993106868 | 0.92 | 0.008161399310686712 \n", 131 | "8.1 |0.9327944872602503 | 0.925 | 0.007794487260250227 \n", 132 | "8.3 |0.9371287733993328 | 0.925 | 0.012128773399332715 \n", 133 | "8.5 |0.9411835283575701 | 0.94 | 0.001183528357570185 \n", 134 | "8.7 |0.9449767799435927 | 0.94 | 0.004976779943592802 \n", 135 | "8.9 |0.9485253932982992 | 0.945 | 0.003525393298299262 \n", 136 | "9.1 |0.9518451458788036 | 0.955 | 0.0031548541211963155 \n", 137 | "9.3 |0.9549507976064422 | 0.955 | 4.92023935577679e-5 \n", 138 | "9.5 |0.9578561564907236 | 0.955 | 0.0028561564907236825 \n", 139 | "9.7 |0.9605741400209925 | 0.96 | 0.0005741400209925418 \n", 140 | "9.9 |0.96311683259876 | 0.96 | 0.0031168325987600554 \n", 141 | "Mean absolute bias:0.03123553671578694" 142 | ] 143 | } 144 | ], 145 | "source": [ 146 | "## 设定参数\n", 147 | "b=3\n", 148 | "\n", 149 | "## 生成200个x~F(x)=1-exp{-(1/b)*x}\n", 150 | "x=-1*log.(rand(200))*b\n", 151 | "\n", 152 | "## 给定一些点,在这些点上计算分布函数和经验分布函数\n", 153 | "x_eval=[i for i in 0.1:0.2:9.9] #0.1,0.3,...,9.9\n", 154 | "\n", 155 | "## 计算理论的分布函数\n", 156 | "F=1-exp.(-1/b.*x_eval)\n", 157 | "\n", 158 | "## 给定z计算经验分布函数\n", 159 | "function empirical_F(x,z::Float64)::Float64\n", 160 | " return mean(x.<=z)\n", 161 | "end\n", 162 | "\n", 163 | "## 计算经验分布函数\n", 164 | "Fhat=[empirical_F(x,z) for z in x_eval]\n", 165 | "\n", 166 | "## 计算经验分布函数与真实的分布函数之间的绝对差异\n", 167 | "bias=mean(abs.(Fhat-F))\n", 168 | "## 打印两个分布函数及其绝对差异,以及平均的绝对差异\n", 169 | "print(\" x | 分布函数 | 经验分布函数| 差的绝对值\\n\")\n", 170 | "for i in 1:1:length(x_eval)\n", 171 | " print(\"$(x_eval[i]) |$(F[i]) | $(Fhat[i]) | $(abs(F[i]-Fhat[i])) \\n\")\n", 172 | "end\n", 173 | "print(\"Mean absolute bias:\",bias)" 174 | ] 175 | }, 176 | { 177 | "cell_type": "code", 178 | "execution_count": null, 179 | "metadata": { 180 | "collapsed": true 181 | }, 182 | "outputs": [], 183 | "source": [] 184 | } 185 | ], 186 | "metadata": { 187 | "kernelspec": { 188 | "display_name": "Julia 0.6.0", 189 | "language": "julia", 190 | "name": "julia-0.6" 191 | }, 192 | "language_info": { 193 | "file_extension": ".jl", 194 | "mimetype": "application/julia", 195 | "name": "julia", 196 | "version": "0.6.0" 197 | }, 198 | "latex_envs": { 199 | "LaTeX_envs_menu_present": true, 200 | "autocomplete": true, 201 | "bibliofile": "biblio.bib", 202 | "cite_by": "apalike", 203 | "current_citInitial": 1, 204 | "eqLabelWithNumbers": true, 205 | "eqNumInitial": 1, 206 | "hotkeys": { 207 | "equation": "Ctrl-E", 208 | "itemize": "Ctrl-I" 209 | }, 210 | "labels_anchors": false, 211 | "latex_user_defs": false, 212 | "report_style_numbering": false, 213 | "user_envs_cfg": false 214 | } 215 | }, 216 | "nbformat": 4, 217 | "nbformat_minor": 2 218 | } 219 | -------------------------------------------------------------------------------- /notebook_python/Poisson_Process.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "markdown", 5 | "metadata": {}, 6 | "source": [ 7 | "# 生成泊松过程\n", 8 | "算法:首先生成一系列的指数分布,假设:$x_i\\sim E(0,1/\\lambda),i=0,1,...$,那么给定时间$t$,泊松分布可以由以下过程生成:$$ N(t)=\\arg \\min_t \\left\\{ \\sum _{i=0} ^{\\infty} x_i \\leq t \\right\\}$$" 9 | ] 10 | }, 11 | { 12 | "cell_type": "code", 13 | "execution_count": 1, 14 | "metadata": {}, 15 | "outputs": [], 16 | "source": [ 17 | "import numpy as np\n", 18 | "import numpy.random as nprd\n", 19 | "\n", 20 | "## 设定参数\n", 21 | "b=1.0/100 #指数分布参数,一个小时平均到达100次\n", 22 | "Nexp=2000 #生成足够多的指数分布\n", 23 | "\n", 24 | "## 生成N个x~F(x)=1-exp{-(1/b)*x}\n", 25 | "X=-b*np.log(nprd.random(Nexp))\n", 26 | "S=[]\n", 27 | "s=0\n", 28 | "# 产生累积和\n", 29 | "for x in X:\n", 30 | " s=s+x\n", 31 | " S.append(s)\n", 32 | "\n", 33 | "## 给定一些时间点,比如从第一分钟到敌五分钟,在这些点上计算到达的个数\n", 34 | "t=np.linspace(0.0,5.0/60,500) #0.1,0.3,...,9.9\n", 35 | "N=np.zeros(len(t))\n", 36 | "i=0\n", 37 | "for tt in range(len(t)):\n", 38 | " while t[tt]>=S[i]:\n", 39 | " i=i+1\n", 40 | " N[tt]=i\n" 41 | ] 42 | }, 43 | { 44 | "cell_type": "code", 45 | "execution_count": 2, 46 | "metadata": {}, 47 | "outputs": [ 48 | { 49 | "data": { 50 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA2AAAAHSCAYAAACKD6jzAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAe1UlEQVR4nO3df6zl9V3n8deHmTu9gBBWiktlOguYKr8L9Dp0i3Rby64tJbaGbYJGDFozabru9gdJYxO1loQourHYpBrHtasrTdXFrlGXglYxa2ttC+2UOwN0begPZlF+tVBavmdghs/+cebSFu5hLp1zvt/zPd/HI5l85x7OfM/7zpyQec7nez7fUmsNAAAAs3dE1wMAAAAMhQADAABoiQADAABoiQADAABoiQADAABoiQADAABoyeZZnPT5z39+Pfnkk2dxagAAgLl32223PVhrPeHpj88kwE4++eTceuutszg1AADA3CulfGm9x12CCAAA0BIBBgAA0BIBBgAA0JKZfAZsPU888UT27t2b0WjU1ksyRcvLy9m6dWuWlpa6HgUAAHqrtQDbu3dvjjnmmJx88skppbT1skxBrTUPPfRQ9u7dm1NOOaXrcQAAoLdauwRxNBrl+OOPF189VErJ8ccfb/USAAAOU6ufARNf/eXPDgAADp9NOAAAAFoiwAAAAFoyuAD7nd/5nZx44ok599xzc+qpp+b3f//3n/X5//AP/5B3vetdczUTAADQT4MLsNtvvz2//Mu/nF27duWGG27IVVdd9azPf9nLXpZ3v/vdnc904MCBmc4AAADM3uACbHV1NaeffnqSZOvWrU+FzV133ZWXv/zlOfPMM3PxxRfnwQcfTJK84Q1vyEc/+tH8wR/8QV7ykpfknHPOyUUXXfTU+dZ7fNK5fuzHfiy/8Au/kIsuuignnnhiPvKRjzzrTG94wxvy9re/Pa985SvzK7/yKxPPmyT33ntvLrvsspx33nk57bTT8slPfjJf+MIX8rrXvS4rKyvZvn17Pve5z02cedL3BwAATE9r9wH7Vm99a7Jr13TPee65yXXXHfp5q6urOe2001JrzXvf+95ceuml2bdvXy677LJcf/31Oe+883LttdfmPe95T6655prs3r07Z599dnbs2JFdu3Zly5Ytefjhh5Mkjz76aK699tpve/xQ57rwwgvz93//9/nQhz6UD3zgA7n44ovXnWlt1tNPPz233HJL9u3bl/PPP3/d8+7fvz+vec1rcs011+TSSy/NY489lgMHDuT1r399du7cme/7vu/LjTfemF/91V/Ne9/73mfMvN73AQAATN+gVsDuueeefP3rX8+P/MiPZPv27fnqV7+a973vffmzP/uz/NAP/VDOO++8JMkZZ5yR+++/P6PRKE888USWlpbSNE2uuuqq3HrrrTnuuOOSJJs2bXrG45PO9dhjj+WRRx7J2972tiTJ/v37c9xxx02caTQa5Stf+Up+6Zd+KUkmnnftv51++ulPhdtRRx2Vm266KXv27Mlll12Wc889N+94xzuyvLy87szrPQYAAExfJytgG1mpmoXbb789r3rVq3LTTTd92+N33HFHzj777Ke+Xl1dzRlnnJE9e/bkjDPOyFFHHZXdu3fnL/7iL7Jjx4787M/+bN785jev+/h999038VwveclLsmnTpqdmOeussybOdNttt+WCCy7I5s2bn3XGJNm1a1de+tKXftuv/+xnP5trrrkmb3zjG5/x+7De97LeYwAAwHQNagVsdXU1L37xi5/x+EknnZQ77rgjSXL33XfnD//wD/NTP/VTWV1dzTnnnJN/+qd/ytFHH53LL788l156aUajUZKs+/ikc+3evTvnnnvuU695++2355xzzpk409prH2rGJDnxxBOzZ8+ep577wAMP5AUveEFuvvnmPPnkk0+dr9a67syTvj8AAGC6OlkB68rq6mouueSSZzx+xRVX5MYbb8zZZ5+dI488Mu9///tz/PHHZ3V1NRdccEGuueaafPzjH8/RRx+dM888M7/7u7+bJOs+Xmt91nOt2b17d84666xcd9116860urqa7du3H3LGJLnyyivzEz/xEznzzDOztLSUq6++Oj/zMz+TW265JaeffnqOPPLInHXWWbn++uvXnflNb3rTut8fAADMm8ceSx5//JtfH310srTU3TzPVam1Tv2kKysr9dZbb/22x+68886ndvqjn/wZAgDQpdXV5Pzzk/37v/nYhz+cvPrV3c00SSnltlrrytMfH9QKGAAA0F9f/OI4vq66Ktm6dfzYaad1OtJzJsAAAIBeaJrx8ad/OjnzzG5n+U4NahMOAACgv9YC7Mgju53jcLQaYLP4vBnt8GcHAEDXBNhzsLy8nIceeshf5Huo1pqHHnooy8vLXY8C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", 51 | "text/plain": [ 52 | "
" 53 | ] 54 | }, 55 | "metadata": { 56 | "needs_background": "light" 57 | }, 58 | "output_type": "display_data" 59 | } 60 | ], 61 | "source": [ 62 | "## 导入matplotlib\n", 63 | "import matplotlib.pyplot as plt \n", 64 | "## 使图形直接插入到jupyter中\n", 65 | "%matplotlib inline\n", 66 | "# 设定图像大小\n", 67 | "plt.rcParams['figure.figsize'] = (15.0, 8.0)\n", 68 | "\n", 69 | "t_plot=[tt*60 for tt in t]\n", 70 | "plt.plot(t_plot,N,label=r'$Poisson Process$',color='blue')\n", 71 | "plt.legend(loc='upper left', frameon=True)\n", 72 | "plt.show() ## 画图" 73 | ] 74 | }, 75 | { 76 | "cell_type": "markdown", 77 | "metadata": {}, 78 | "source": [ 79 | "# 复合泊松过程\n", 80 | "算法:给定$N(t)$为一个泊松过程,现在假设$Z_j\\sim N(0,1)$,那么复合泊松过程为:$$M(t)=\\sum _{j=1} ^{N(t)} Z_j$$" 81 | ] 82 | }, 83 | { 84 | "cell_type": "code", 85 | "execution_count": 3, 86 | "metadata": {}, 87 | "outputs": [ 88 | { 89 | "data": { 90 | "image/png": "iVBORw0KGgoAAAANSUhEUgAAA3IAAAHSCAYAAACpVPkmAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/YYfK9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAqMElEQVR4nO3de5DlZX0n/vfTPYMDxIgZVEZGhKzITRBlGEy8LOIVQuIaf0Ty0zX+JEXUtcoEjeUl3nbLiinLNdldy4C7lsZNxdV4iS4UJCamEiq76gw/BmZAE6KsjIjcJSgzTE8/+8fpHmboPmM353u+33N5vaq6TvfpM+f7NHXoOu/+fJ7PU2qtAQAAYHzMdL0AAAAAVkeQAwAAGDOCHAAAwJgR5AAAAMaMIAcAADBmBDkAAIAxs6brBRzMkUceWY899tiulwEAANCJrVu33llrfdzD7x/pIHfsscdmy5YtXS8DAACgE6WU/7Pc/VorAQAAxowgBwAAMGYEOQAAgDEz0nvklrNnz57s3Lkzu3bt6nopcIB169Zl48aNWbt2bddLAQBgwo1dkNu5c2ce/ehH59hjj00ppevlQJKk1pq77rorO3fuzHHHHdf1cgAAmHBj11q5a9eurF+/XohjpJRSsn79epViAABaMXZBLokQx0jyugQAoC1jGeQAAACmmSAHAAAwZgS5AXzuc5/LWWedldNOOy1PecpT8v73v7/rJT0iF110US6//PIkyaWXXpqjjjoqp59+en7+538+n/zkJw/6b//hH/4h733ve4e+xtWuCwAAJpkg9wh96lOfyh/8wR/k85//fK677rpce+21Oeyww7pe1iNy7bXX5ulPf3qS5Lrrrsv73ve+XHvttfnzP//zvOUtbznov/3FX/zFVgLsSta1d+/eoa8DAABGgSD3CNx333255JJL8tnPfjYbN25MkvzMz/xMfvd3fzff+ta38rznPS+nnHJKXvjCF+bOO+/c9+8uuOCCvOlNb8pznvOcPPnJT87VV1+d17zmNXnqU5+aiy66KEly4YUX5pWvfGXOOuusPPnJT95XKUvS97mf9axn5eabb06SfP/738+mTZuSJC9/+cvze7/3e3nuc5+bo446Kl/96leTJP/4j/+Y5zznOTn11FPzkY98JLfddtu+n+P666/PSSedlCTZuHHjvnDU79oXXHBBrr766iS9cHvGGWfktNNOy3Of+9y+9/V7rn7rPdi6LrjgglxyySV5/vOfn9///d/v+9y33nprXvGKV+QZz3hGTjzxxHzjG9/Id7/73bzsZS/Lpk2bsnnz5nz729/ed72V/iwAANCJWuvIfpxxxhn14W644YZ9n7/5zbX+63/d7Meb37zkkkt88pOfrOeee+6S+3ft2lVPPvnkes0119Raa/3gBz9Y3/nOd+77/gknnFA//OEP11prffe7312f+tSn1ltvvbXu3r27HnHEEXXXrl31xBNPrG9/+9trrbX+/d//fT3zzDMP+tzz8/N1w4YNdX5+vtZa6xVXXFFf+9rX1lprfcpTnlI/9KEP1Vpr/fznP19f+9rX1j179tQzzzyzfv3rX6+11vqGN7yhnnPOOfvWeMQRR9Tbbrutzs/P13e96131Va961UF/rhNPPLHee++99b777qsnnXRS3b17d6211nvuuWfZ+w72XMut92DrWvxv+u53v/ug/4327NlTTzvttPqVr3yl1lrrj3/843rffffVc845p95000211lovv/zyfddb6c+ynP1fnwAAMKgkW+oyWUlF7hHYsWNHTj/99CX3f+lLX8pznvOcPOMZz0iSnHzyybn99tuT9M6/u/fee/Pbv/3bSZJDDz00F110UTZs2JBDDjkkhx12WObn53PnnXfu23N28skn55577jnoc99000057rjj9o2+v+6663LqqafmJz/5SX70ox/ld37nd5Ikc3NzOeKII/KFL3whJ510UjZv3pwkOeWUU/b9LLfcckvuv//+vOQlL8nmzZtzzz335KMf/Wjfa+/atSt79uzJYx7zmMzOzuaBBx7IW97ylmzZsiVHHHHEsvf1e65+6z3Yunbt2pW7774773nPew763+hLX/pSTjrppJx//vlJksMOOyxXXnllduzYkVe84hU5/fTT87a3vS3r1q1LkhX/LAAA0JU1XS9gEH/4h91c9/DDD88DDzyw5P4bbrghp5566r6vr7/++px88slJeuHvmc98ZmZmetl527ZtecMb3pAk2blzZ574xCdm+/btOf744/cFimuuuWbf3rV+z3399dcfcP+WLVvyW7/1W9mxY0fOOOOMzM7OJukFvKc97Wm57rrrcsYZZ+x7/NatW3P22Wfve8wLXvCCXHnllSv6uXbs2LHv5zvssMOyffv2fOUrX8nFF1+c3/zN38wb3/jGJff98Ic/7Ptcy633YOvaunVrzjrrrKxZs+ag67z22mvzrGc964B/u23btnzgAx/Y19K6v5X+LG984xuX/FsAAGiDitwjcN555+Vzn/tcfvjDHyZJdu/enY9//OM5+uijc8MNNyRJvvOd7+TTn/50XvOa1yTphYrFUJb0wslpp52WpBcqTjvttGzbti3f+973smvXrvz4xz/Oe9/73n0Vqn7Pfffdd+fQQw9Nktx44425/PLLc+qpp2b79u0HVA0Xr7d+/fps3749SS8I/dmf/dm+xz18jYv6Xfv666/f9zP80z/9Uw4//PBceOGFOf/887Nr165l7+v3XP3We7B17X/9g63zqKOOyo4dO/Y97o477siGDRty1VVXZX5+ft9z9SrXK/9ZAACgK2NdkevKmWeemfe97315yUtekr1792Zubi6vfvWrc8kll+SKK67IqaeemkMPPTSf+MQnsn79+iS9oLDYzrhr16488MADeexjH5vkodCybdu2vOpVr8rZZ5+d++67L+94xztz1lnPztxc8uu//m9z+eVX5GlP6z33ZZd9Io95zPq84AUvyR/90X/KBRf8Wk455WlZv3591q9/QrZtuz6bN5+Vubnemrdv354TT3xanvSk4/LLv3xenv7003PCCSfkiCOOyPHHn5S5uWTbtutz7rnn7fs3i/pde/9r/If/8IF8/ev/K4cddnhOPvmUXHrpx/PGN75+yX211p/6XPuv92Dr2rbt+px55uZ99/db56tf/dpcddX/m1NOOSVr1qzN+9737/Oa17wuf/M3X8tJJ52UdesOzSmnPC1/8if/PcnKf5aHrydJ5ueTe+8d+CVGHzMzyc/+bNerAADoXlmsQoyiTZs21S1bthxw34033rhveuGked7znpePf/zjOeGEE5Ik3/tesrDFjjFx55035txzJ/P1OSo+9rHk9a/vehUAAO0opWyttW56+P0qciPkn//5n3P88cfv+3r37mTt2uSoozpcFKuyd2/ykY90vYrJ9da3JgsnbQAATDVBboR8//vfP+DrWpNDDkme8ISOFsSq3X13sjCYlCF4xzt6/18AAEw7w05G3MKpAkB6/z8szKcBAJhqgtwIU3mAA83M+P8CACAR5EZarSpysD8VOQCAnkaCXCnlpaWUb5dSbiqlvH2Z759dSvlRKeXahY/3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", 91 | "text/plain": [ 92 | "
" 93 | ] 94 | }, 95 | "metadata": { 96 | "needs_background": "light" 97 | }, 98 | "output_type": "display_data" 99 | } 100 | ], 101 | "source": [ 102 | "# 生成一系列正态分布\n", 103 | "Z=nprd.normal(0,1,int(N[-1]))\n", 104 | "SZ=[]\n", 105 | "s=0\n", 106 | "for z in Z:\n", 107 | " s=s+z\n", 108 | " SZ.append(s)\n", 109 | "\n", 110 | "# 生成复合泊松过程\n", 111 | "M=[]\n", 112 | "for n in N:\n", 113 | " if int(n)==0:\n", 114 | " M.append(0)\n", 115 | " else:\n", 116 | " M.append(SZ[int(n)-1])\n", 117 | "M=np.array(M)\n", 118 | "\n", 119 | "## 导入matplotlib\n", 120 | "import matplotlib.pyplot as plt \n", 121 | "## 使图形直接插入到jupyter中\n", 122 | "%matplotlib inline\n", 123 | "# 设定图像大小\n", 124 | "plt.rcParams['figure.figsize'] = (15.0, 8.0)\n", 125 | "\n", 126 | "t_plot=[tt*60 for tt in t]\n", 127 | "plt.plot(t_plot,M,label=r'$Compound Poisson Process$',color='blue')\n", 128 | "plt.legend(loc='upper left', frameon=True)\n", 129 | "plt.show() ## 画图" 130 | ] 131 | } 132 | ], 133 | "metadata": { 134 | "kernelspec": { 135 | "display_name": "Anaconda", 136 | "language": "python", 137 | "name": "anaconda" 138 | }, 139 | "language_info": { 140 | "codemirror_mode": { 141 | "name": "ipython", 142 | "version": 3 143 | }, 144 | "file_extension": ".py", 145 | "mimetype": "text/x-python", 146 | "name": "python", 147 | "nbconvert_exporter": "python", 148 | "pygments_lexer": "ipython3", 149 | "version": "3.9.12" 150 | } 151 | }, 152 | "nbformat": 4, 153 | "nbformat_minor": 2 154 | } 155 | -------------------------------------------------------------------------------- /notebook_python/Random_number.ipynb: -------------------------------------------------------------------------------- 1 | { 2 | "cells": [ 3 | { 4 | "cell_type": "code", 5 | "execution_count": 1, 6 | "metadata": {}, 7 | "outputs": [ 8 | { 9 | "data": { 10 | "image/png": "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", 11 | "text/plain": [ 12 | "
" 13 | ] 14 | }, 15 | "metadata": { 16 | "needs_background": "light" 17 | }, 18 | "output_type": "display_data" 19 | } 20 | ], 21 | "source": [ 22 | "import numpy as np\n", 23 | "import numpy.random as nprd\n", 24 | "# 获取序贯的1000个均匀分布随机数\n", 25 | "x = nprd.random(1000)\n", 26 | "# 将1000个均匀分布随机数按照奇偶数分成两个序列x0 和x1\n", 27 | "x0 = np.array([x[i] for i in range(1000) if i % 2 == 0])\n", 28 | "x1 = np.array([x[i] for i in range(1000) if i % 2 == 1])\n", 29 | "# 画图\n", 30 | "import matplotlib.pyplot as plt\n", 31 | "# 设定图像大小\n", 32 | "plt.rcParams['figure.figsize'] = (8.0, 5.0)\n", 33 | "plt.scatter(x0, x1, color='blue') ## 画出散点图\n", 34 | "plt.savefig(\"check_random_py.pdf\")\n" 35 | ] 36 | }, 37 | { 38 | "cell_type": "code", 39 | "execution_count": 2, 40 | "metadata": {}, 41 | "outputs": [ 42 | { 43 | "name": "stdout", 44 | "output_type": "stream", 45 | "text": [ 46 | "2.109375\n" 47 | ] 48 | }, 49 | { 50 | "data": { 51 | "image/png": "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", 52 | "text/plain": [ 53 | "
" 54 | ] 55 | }, 56 | "metadata": { 57 | "needs_background": "light" 58 | }, 59 | "output_type": "display_data" 60 | } 61 | ], 62 | "source": [ 63 | "#!/usr/bin/python3\n", 64 | "## file: rejection_beta.py\n", 65 | "import numpy as np\n", 66 | "import numpy.random as nprd\n", 67 | "import scipy.special as scisp\n", 68 | "# 设定参数\n", 69 | "alpha = 4\n", 70 | "beta = 2\n", 71 | "# beta分布密度函数\n", 72 | "f=lambda x: 1/scisp.beta(alpha,beta)* \\\n", 73 | " x**(alpha-1) * (1-x)**(beta-1)\n", 74 | "# 计算密度函数最大值\n", 75 | "M = f((1 - alpha) / (2 - alpha - beta))\n", 76 | "print(M)\n", 77 | "# 随机抽两个均匀分布,一个为(0,1),一个为(0,M),抽500个\n", 78 | "N = 500\n", 79 | "x = nprd.random(N)\n", 80 | "u = nprd.random(N) * M\n", 81 | "# 挑出使得u=lower and mu<=upper:\n", 187 | " included[i]=1\n", 188 | "print(\"The prob. of included=\",np.mean(included))" 189 | ] 190 | }, 191 | { 192 | "cell_type": "markdown", 193 | "metadata": {}, 194 | "source": [ 195 | "# 区间估计\n", 196 | "## 大样本总体未知\n", 197 | "如果$x_i\\sim \\left( \\mu, \\sigma^2 \\right)$,那么当样本量足够大时,$\\bar{x}\\sim N\\left(\\mu,\\frac{\\sigma^2}{N}\\right)$,或者,如果我们用样本方差替代总体方差,那么当样本量足够大时,有:$$\\frac{\\bar{x}-\\mu}{\\sqrt{\\frac{s^2}{N}}}\\sim N\\left(0,1\\right)$$\n", 198 | "下面我们将重复1000次区间估计,理论上,在95%置信水平下,应该有950次区间估计包含真值,我们将看到这一结论是否成立。" 199 | ] 200 | }, 201 | { 202 | "cell_type": "code", 203 | "execution_count": 4, 204 | "metadata": {}, 205 | "outputs": [ 206 | { 207 | "name": "stdout", 208 | "output_type": "stream", 209 | "text": [ 210 | "Sample size=10, the prob. of included= 0.93\n", 211 | "Sample size=50, the prob. of included= 0.94\n", 212 | "Sample size=100, the prob. of included= 0.94\n", 213 | "Sample size=500, the prob. of included= 0.955\n", 214 | "Sample size=1000, the prob. of included= 0.948\n" 215 | ] 216 | } 217 | ], 218 | "source": [ 219 | "import numpy as np\n", 220 | "from numpy import random as nprd\n", 221 | "from scipy import special as func\n", 222 | "\n", 223 | "def sampling(N):\n", 224 | " ## 产生一组样本,以0.5的概率为z+3,0.5的概率为z-3,其中z~N(0,1),因而期望为0,方差为10\n", 225 | " d=nprd.rand(N)<0.5\n", 226 | " z=nprd.randn(N)\n", 227 | " x=np.array([z[i]+3 if d[i] else z[i]-3 for i in range(N)])\n", 228 | " return x\n", 229 | "\n", 230 | "## true value\n", 231 | "N=[10,50,100,500,1000] # sample size\n", 232 | "## iteration times\n", 233 | "M=1000\n", 234 | "## confidence level\n", 235 | "alpha=0.05\n", 236 | "for n in N:\n", 237 | " ## results\n", 238 | " included=np.zeros(M)\n", 239 | " for i in range(M):\n", 240 | " x=sampling(n)\n", 241 | " xmean=np.mean(x)\n", 242 | " xstd=np.std(x)\n", 243 | " lower=xmean-func.ndtri(1-alpha/2)*xstd/np.sqrt(n)\n", 244 | " upper=xmean+func.ndtri(1-alpha/2)*xstd/np.sqrt(n)\n", 245 | " # 如果包含真值\n", 246 | " #print(mu, lower, upper, mu>=lower, mu<=upper)\n", 247 | " if 0>=lower and 0<=upper:\n", 248 | " included[i]=1\n", 249 | " print(\"Sample size=%s, the prob. of included=\" % n, np.mean(included))" 250 | ] 251 | }, 252 | { 253 | "cell_type": "code", 254 | "execution_count": null, 255 | "metadata": { 256 | "collapsed": true 257 | }, 258 | "outputs": [], 259 | "source": [] 260 | } 261 | ], 262 | "metadata": { 263 | "kernelspec": { 264 | "display_name": "Anaconda", 265 | "language": "python", 266 | "name": "anaconda" 267 | }, 268 | "language_info": { 269 | "codemirror_mode": { 270 | "name": "ipython", 271 | "version": 3 272 | }, 273 | "file_extension": ".py", 274 | "mimetype": "text/x-python", 275 | "name": "python", 276 | "nbconvert_exporter": "python", 277 | "pygments_lexer": "ipython3", 278 | "version": "3.9.12" 279 | }, 280 | "latex_envs": { 281 | "LaTeX_envs_menu_present": true, 282 | "autocomplete": true, 283 | "bibliofile": "biblio.bib", 284 | "cite_by": "apalike", 285 | "current_citInitial": 1, 286 | "eqLabelWithNumbers": true, 287 | "eqNumInitial": 1, 288 | "hotkeys": { 289 | "equation": "Ctrl-E", 290 | "itemize": "Ctrl-I" 291 | }, 292 | "labels_anchors": false, 293 | "latex_user_defs": false, 294 | "report_style_numbering": false, 295 | "user_envs_cfg": false 296 | } 297 | }, 298 | "nbformat": 4, 299 | "nbformat_minor": 2 300 | } 301 | -------------------------------------------------------------------------------- /notebook_python/rejection_beta.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sijichun/MathStatsCode/a06caa49c76c7f80040640b0d4b3a467c3c03b56/notebook_python/rejection_beta.pdf --------------------------------------------------------------------------------