From 3ff77c880c8a940bf0ac836924c3fe2ec75ed5b5 Mon Sep 17 00:00:00 2001 From: Hendrik Tillemans Date: Mon, 30 Dec 2024 00:35:42 +0100 Subject: [PATCH] simulation code done --- figures/quadratic_model_linear.png | Bin 0 -> 36050 bytes figures/quadratic_model_quadratic.png | Bin 0 -> 37013 bytes figures/quadratic_model_y.png | Bin 0 -> 28349 bytes figures/vub.png | Bin 0 -> 6033 bytes report/Assignment.tex | 303 ++++++++++++++++++ report/df_table.tex | 9 + report/example_report_24.tex | 263 +++++++++++++++ report/results_coef.tex | 9 + report/summary.tex | 34 ++ report/table_1_2.tex | 9 + report/table_1_3.tex | 8 + report/table_1_4.tex | 9 + report/table_1_5.tex | 8 + report/table_1_6.tex | 9 + ...signment_empirical_jan_2025_starter (1).py | 207 ++++++++++++ .../assignment_simulation_jan_2025_starter.py | 93 ++++++ scripts/empirical.py | 207 ++++++++++++ scripts/helper.py | 84 +++++ scripts/non_linear_models_example_report.py | 198 ++++++++++++ scripts/show_seed.py | 3 - scripts/simulation.py | 188 +++++++++++ scripts/util/__init__.py | 24 -- 22 files changed, 1638 insertions(+), 27 deletions(-) create mode 100644 figures/quadratic_model_linear.png create mode 100644 figures/quadratic_model_quadratic.png create mode 100644 figures/quadratic_model_y.png create mode 100644 figures/vub.png create mode 100644 report/Assignment.tex create mode 100644 report/df_table.tex create mode 100644 report/example_report_24.tex create mode 100644 report/results_coef.tex create mode 100644 report/summary.tex create mode 100644 report/table_1_2.tex create mode 100644 report/table_1_3.tex create mode 100644 report/table_1_4.tex create mode 100644 report/table_1_5.tex create mode 100644 report/table_1_6.tex create mode 100644 scripts/assignment_empirical_jan_2025_starter (1).py create mode 100644 scripts/assignment_simulation_jan_2025_starter.py create mode 100644 scripts/empirical.py create mode 100644 scripts/helper.py create mode 100644 scripts/non_linear_models_example_report.py delete mode 100644 scripts/show_seed.py create mode 100644 scripts/simulation.py delete mode 100644 scripts/util/__init__.py diff --git a/figures/quadratic_model_linear.png b/figures/quadratic_model_linear.png new file mode 100644 index 0000000000000000000000000000000000000000..76833686647fcc1b955b439995075dd5ee820d68 GIT binary patch literal 36050 zcmdqJbyQVt*EN1<=`JM{kUEmmZBR;xz@fXlI|Y>nK?&&)5jb>rgVNoNbR#ACT}SWx zd7pQTZ+zqT_m43Y28XlH-q*g?T64`g*A985AdQQ47YhP`;L6H8e+_{k`$Hf|i+9k$ zZ+M4he}Zp<&XVfR%66vCZU&Af5P1V1cD8pC z;^46P&mXYcIht`iP(Yai2f?(L(Qtx5@C^|EkiLoMSU@1*;=d^^tGy;v+F-EOoBY{Bls1ZnI_UA^_4+kYr}_13vHdfy zZ+UqE!Qe~e{m|4siRa)evIFZrAt7OOkOA5U@WS`DVq_Wc>z@YdNDOpzbVrW_FE&3jS_@G>2K+y7tR4iÏkjw0$lm)!NmC5gi>}y`Jjz;q&Ls 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

q^RS`qv6%_Pg3mVp2Rh9bcDk>%xTG7$b(`4qc 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 Mz1yE|)xYq60G=gT?EnA( literal 0 HcmV?d00001 diff --git a/figures/quadratic_model_y.png b/figures/quadratic_model_y.png new file mode 100644 index 0000000000000000000000000000000000000000..4ef06347c116c6f9fe023390717a69d01fbc3b9c GIT binary patch literal 28349 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%0Dx6)g`22a^vXl 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 literal 0 HcmV?d00001 diff --git a/report/Assignment.tex b/report/Assignment.tex new file mode 100644 index 0000000..d14f1c4 --- /dev/null +++ b/report/Assignment.tex @@ -0,0 +1,303 @@ +\documentclass[12pt]{article} +\usepackage{natbib} +\usepackage{url} +\usepackage[utf8x]{inputenc} +\usepackage{mathtools}% +\usepackage{graphicx} +\usepackage{parskip} +\usepackage{xcolor}% +\usepackage{fancyhdr} +\usepackage{vmargin} +\usepackage{booktabs}% +\usepackage{sectsty}% for coloring sections +\setmarginsrb{3 cm}{2.5 cm}{3 cm}{2.5 cm}{1 cm}{1.5 cm}{1 cm}{1.5 cm} + +% define your own custom colors +% If you want to change the colors you would need to update the RGB code in the +% last brackets. Better not change the name of the color as it is used elsewhere +\definecolor{report_main}{HTML}{200045} +\definecolor{report_second}{HTML}{F39912} +\definecolor{report_third}{HTML}{8B0010} + +\title{\color{report_main}{Assignment Econometrics 2024}} % Title +\author{Hendrik Marcel W Tillemans} % Author +\date{\today} % Date + +\makeatletter +\let\thetitle\@title +\let\theauthor\@author +\let\thedate\@date +\makeatother + +\pagestyle{fancy} +\fancyhf{} +\rhead{\theauthor} % header on the right +\lhead{\thetitle} % header on the left +\cfoot{\thepage} % footer in the center + +\sectionfont{\color{report_main}} +\subsectionfont{\color{report_third}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is where the actual document starts +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{document} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This section details the group information +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{titlepage} + \centering + \vspace*{0.5 cm} + \includegraphics[scale = 0.95]{../figures/vub.png}\\[1.0 cm] % University Logo + \textsc{\LARGE \newline\newline Free University Brussels}\\[2.0 cm] % University Name + \textsc{\Large \color{report_main}{Class: Econometrics}}\\[0.5 cm] % Course Code + \rule{\linewidth}{0.2 mm} \\[0.4 cm] + { \huge \bfseries \thetitle}\\ + \rule{\linewidth}{0.2 mm} \\[1.5 cm] + + \begin{minipage}{0.5\textwidth} + \begin{flushleft} \large + \emph{Professor:}\\ + Jeroen Kerkhof\\ + Faculty of Economic Sciences\\ + \end{flushleft} + \end{minipage}~ + \begin{minipage}{0.4\textwidth} + + \begin{flushright} \large + \emph{Group:} \\ +Hendrik Marcel W Tillemans\\ + + \end{flushright} + + \end{minipage}\\[2 cm] + + % takes the current date + \thedate + +\end{titlepage} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This details the inclusion (or not) of the table of contents +% and list of figures and tables. +% You can add/remove page breaks as you seem fit. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\tableofcontents + +\pagebreak + +\listoffigures + +\listoftables + +\pagebreak + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is the start of the actual document content +% You can just write text in here as you would in any other word processor. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Question 1} + +This my answer to question 1. + +\subsection{Example} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagebreak + +creates a page break. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\section{Simulation Study} + +\subsection{1.2: Linear Fit on Generated Data} + +\begin{table}[h] +\input{table_1_2} +\caption{Linear Fit on Generated Data} +\label{tab::table_1_2} +\end{table} + +\subsection{1.3: Linear Fit with 1 Variable} + +\begin{table}[h] +\input{table_1_3} +\caption{Linear Fit with 1 Variable} +\label{tab::table_1_3} +\end{table} + +\subsection{1.4: New Linear Fit on Generated Data} + +\begin{table}[h] +\input{table_1_4} +\caption{New Linear Fit on Generated Data} +\label{tab::table_1_4} +\end{table} + +\subsection{1.5: New Linear Fit with 1 Variable} + +\begin{table}[h] +\input{table_1_5} +\caption{Linear Fit with 1 Variable} +\label{tab::table_1_5} +\end{table} + +\subsection{1.6: Generate Data with Small Variance on x1} + +\begin{table}[h] +\input{table_1_6} +\caption{Generate Data with Small Variance on x1} +\label{tab::table_1_6} +\end{table} + +\section{examples} +Some greek letters: + +$\alpha$ +$\beta$ +$\gamma$ +$\theta$ +$\varepsilon$ +$\pi$ +$\lambda$ +$\tau$ + +$x=x+27$ +x=x+27 + + + +$A \Longrightarrow B$ + + +$\underbrace{abs}_{test}$ + +sub and superscript + +$\beta_0$ +$\sum_{i=1}^{n} i$ + +In an equation: + +\begin{equation} +\sum_{j=1}{n} j^2 \beta +\end{equation} + +Equation without number + +\begin{equation*} +A \Rightarrow B +\end{equation*} + + +\section{Empirical Investigation} + +Here is some example code to create tables and graphs from the +Python script. In order for this to work you would first need +to run the script non\_linear\_models\_example\_report.py. Running that +file (using the recommended file structure) creates some figures +in the figures folder and some tables in .tex files in the report folder. + + +\subsection{Question 3} + +For instance, here the file df\_table.tex is used print the actual numbers +in the table. + +\begin{table}[h] +\input{df_table} +\caption{This tables has the estimates for ...} +\label{tab::estimation_results} +\end{table} + +\subsection{Question 4: Some graphs} + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_y} +\caption{This is a Figure coming straight from Python.} +\label{fig::example_data} +\end{figure} + +In Figure \ref{fig::example_data} we see the data. + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_linear} +\caption{This is a linear fit on a quadratic model.} +\label{fig::example_quadratic_linear} +\end{figure} + +In Figure \ref{fig::example_quadratic_linear} we see a linear fit. + + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_quadratic} +\caption{This is quadratic fit on a quadratic model.} +\label{fig::example_quadratic_quadratic} +\end{figure} + +In Figure \ref{fig::example_quadratic_quadratic} we see that + +\subsection{Question 5} + +Equation example with matrices: + +\begin{equation}\label{eq::wald_test} +H_0: \beta_1 = - \beta_2; \beta_3=0; \beta_2 + 2\beta_4 = 2 +\quad H_1: \neg H_0 +\end{equation} + +can be written in matrix form as: +\begin{equation}\label{eq::matrix_form} +\begin{bmatrix} +1 & 1 & 0 & 0 \\ +0 & 0 & 1 & 0 \\ +0 & 1 & 0 & 2 +\end{bmatrix} +\begin{bmatrix} +\beta_1 \\ +\beta_2 \\ +\beta_3 \\ +\beta_4 +\end{bmatrix} = +\begin{bmatrix} +0 \\ +0 \\ +2 +\end{bmatrix} +\end{equation} + +In equation \eqref{eq::wald_test} we see that... and in equation \eqref{eq::matrix_form} we see that + +\subsection{Question 6} + + +$\beta$ + +\begin{table} +\input{summary} +\caption{This tables has the estimates summary} +\label{tab::estimation_results_summary} +\end{table} + +Table \ref{tab::estimation_results_summary} has the full summary. + +\begin{table} +\input{results_coef} +\caption{This tables has the estimates summary} +\label{tab::estimation_results_coef} +\end{table} + +Table \ref{tab::estimation_results_coef} has the only the coefficient +results. + + +\end{document} diff --git a/report/df_table.tex b/report/df_table.tex new file mode 100644 index 0000000..41ec828 --- /dev/null +++ b/report/df_table.tex @@ -0,0 +1,9 @@ +\begin{tabular}{lrrrrr} +\toprule + & coeff & tvals & pvals & conf\_lower & conf\_higher \\ +\midrule +0 & 17.880000 & 1.730000 & 0.090000 & -2.800000 & 38.560000 \\ +1 & 0.390000 & 0.560000 & 0.580000 & -0.990000 & 1.770000 \\ +2 & -0.490000 & -18.290000 & 0.000000 & -0.550000 & -0.440000 \\ +\bottomrule +\end{tabular} diff --git a/report/example_report_24.tex b/report/example_report_24.tex new file mode 100644 index 0000000..0df8016 --- /dev/null +++ b/report/example_report_24.tex @@ -0,0 +1,263 @@ +\documentclass[12pt]{article} +\usepackage{natbib} +\usepackage{url} +\usepackage[utf8x]{inputenc} +\usepackage{mathtools}% +\usepackage{graphicx} +\usepackage{parskip} +\usepackage{xcolor}% +\usepackage{fancyhdr} +\usepackage{vmargin} +\usepackage{booktabs}% +\usepackage{sectsty}% for coloring sections +\setmarginsrb{3 cm}{2.5 cm}{3 cm}{2.5 cm}{1 cm}{1.5 cm}{1 cm}{1.5 cm} + +% define your own custom colors +% If you want to change the colors you would need to update the RGB code in the +% last brackets. Better not change the name of the color as it is used elsewhere +\definecolor{report_main}{HTML}{200045} +\definecolor{report_second}{HTML}{F39912} +\definecolor{report_third}{HTML}{8B0010} + +\title{\color{report_main}{Assignment Econometrics 2024}} % Title +\author{Hendrik Marcel W Tillemans} % Author +\date{\today} % Date + +\makeatletter +\let\thetitle\@title +\let\theauthor\@author +\let\thedate\@date +\makeatother + +\pagestyle{fancy} +\fancyhf{} +\rhead{\theauthor} % header on the right +\lhead{\thetitle} % header on the left +\cfoot{\thepage} % footer in the center + +\sectionfont{\color{report_main}} +\subsectionfont{\color{report_third}} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is where the actual document starts +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{document} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This section details the group information +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\begin{titlepage} + \centering + \vspace*{0.5 cm} + \includegraphics[scale = 0.95]{../figures/vub.png}\\[1.0 cm] % University Logo + \textsc{\LARGE \newline\newline Free University Brussels}\\[2.0 cm] % University Name + \textsc{\Large \color{report_main}{Class: Econometrics}}\\[0.5 cm] % Course Code + \rule{\linewidth}{0.2 mm} \\[0.4 cm] + { \huge \bfseries \thetitle}\\ + \rule{\linewidth}{0.2 mm} \\[1.5 cm] + + \begin{minipage}{0.5\textwidth} + \begin{flushleft} \large + \emph{Professor:}\\ + Jeroen Kerkhof\\ + Faculty of Economic Sciences\\ + \end{flushleft} + \end{minipage}~ + \begin{minipage}{0.4\textwidth} + + \begin{flushright} \large + \emph{Group:} \\ + Hendrik Marcel W Tillemans + \end{flushright} + + \end{minipage}\\[2 cm] + + % takes the current date + \thedate + +\end{titlepage} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This details the inclusion (or not) of the table of contents +% and list of figures and tables. +% You can add/remove page breaks as you seem fit. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\tableofcontents + +\pagebreak + +\listoffigures + +\listoftables + +\pagebreak + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% This is the start of the actual document content +% You can just write text in here as you would in any other word processor. +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\section{Question 1} + +This my answer to question 1. + +\subsection{Example} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\pagebreak + +creates a page break. + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + + +\section{Simlulation Study} + +Here + +Some greek letters: + +$\alpha$ +$\beta$ +$\gamma$ +$\theta$ +$\varepsilon$ +$\pi$ +$\lambda$ +$\tau$ + +$x=x+27$ +x=x+27 + + + +$A \Longrightarrow B$ + + +$\underbrace{abs}_{test}$ + +sub and superscript + +$\beta_0$ +$\sum_{i=1}^{n} i$ + +In an equation: + +\begin{equation} +\sum_{j=1}{n} j^2 \beta +\end{equation} + +Equation without number + +\begin{equation*} +A \Rightarrow B +\end{equation*} + + +\section{Empirical Investigation} + +Here is some example code to create tables and graphs from the +Python script. In order for this to work you would first need +to run the script non\_linear\_models\_example\_report.py. Running that +file (using the recommended file structure) creates some figures +in the figures folder and some tables in .tex files in the report folder. + + +\subsection{Question 3} + +For instance, here the file df\_table.tex is used print the actual numbers +in the table. + +\begin{table}[h] +\input{df_table} +\caption{This tables has the estimates for ...} +\label{tab::estimation_results} +\end{table} + +\subsection{Question 4: Some graphs} + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_y} +\caption{This is a Figure coming straight from Python.} +\label{fig::example_data} +\end{figure} + +In Figure \ref{fig::example_data} we see the data. + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_linear} +\caption{This is a linear fit on a quadratic model.} +\label{fig::example_quadratic_linear} +\end{figure} + +In Figure \ref{fig::example_quadratic_linear} we see a linear fit. + + +\begin{figure} +\includegraphics[width=0.6\paperwidth]{../figures/quadratic_model_quadratic} +\caption{This is quadratic fit on a quadratic model.} +\label{fig::example_quadratic_quadratic} +\end{figure} + +In Figure \ref{fig::example_quadratic_quadratic} we see that + +\subsection{Question 5} + +Equation example with matrices: + +\begin{equation}\label{eq::wald_test} +H_0: \beta_1 = - \beta_2; \beta_3=0; \beta_2 + 2\beta_4 = 2 +\quad H_1: \neg H_0 +\end{equation} + +can be written in matrix form as: +\begin{equation}\label{eq::matrix_form} +\begin{bmatrix} +1 & 1 & 0 & 0 \\ +0 & 0 & 1 & 0 \\ +0 & 1 & 0 & 2 +\end{bmatrix} +\begin{bmatrix} +\beta_1 \\ +\beta_2 \\ +\beta_3 \\ +\beta_4 +\end{bmatrix} = +\begin{bmatrix} +0 \\ +0 \\ +2 +\end{bmatrix} +\end{equation} + +In equation \eqref{eq::wald_test} we see that... and in equation \eqref{eq::matrix_form} we see that + +\subsection{Question 6} + + +$\beta$ + +\begin{table} +\input{summary} +\caption{This tables has the estimates summary} +\label{tab::estimation_results_summary} +\end{table} + +Table \ref{tab::estimation_results_summary} has the full summary. + +\begin{table} +\input{results_coef} +\caption{This tables has the estimates summary} +\label{tab::estimation_results_coef} +\end{table} + +Table \ref{tab::estimation_results_coef} has the only the coefficient +results. + + +\end{document} diff --git a/report/results_coef.tex b/report/results_coef.tex new file mode 100644 index 0000000..0b5f6b9 --- /dev/null +++ b/report/results_coef.tex @@ -0,0 +1,9 @@ +\begin{tabular}{lrrrrrr} +\toprule + & Coef. & Std.Err. & t & P>|t| & [0.025 & 0.975] \\ +\midrule +const & 17.880598 & 10.325727 & 1.731655 & 0.088744 & -2.796314 & 38.557509 \\ +x1 & 0.387451 & 0.688193 & 0.562997 & 0.575645 & -0.990632 & 1.765533 \\ +x2 & -0.494529 & 0.027036 & -18.291331 & 0.000000 & -0.548668 & -0.440390 \\ +\bottomrule +\end{tabular} diff --git a/report/summary.tex b/report/summary.tex new file mode 100644 index 0000000..a8662d5 --- /dev/null +++ b/report/summary.tex @@ -0,0 +1,34 @@ +\begin{center} +\begin{tabular}{lclc} +\toprule +\textbf{Dep. Variable:} & y & \textbf{ R-squared: } & 0.936 \\ +\textbf{Model:} & OLS & \textbf{ Adj. R-squared: } & 0.934 \\ +\textbf{Method:} & Least Squares & \textbf{ F-statistic: } & 416.4 \\ +\textbf{Date:} & Sun, 29 Dec 2024 & \textbf{ Prob (F-statistic):} & 9.69e-35 \\ +\textbf{Time:} & 21:32:34 & \textbf{ Log-Likelihood: } & -327.30 \\ +\textbf{No. Observations:} & 60 & \textbf{ AIC: } & 660.6 \\ +\textbf{Df Residuals:} & 57 & \textbf{ BIC: } & 666.9 \\ +\textbf{Df Model:} & 2 & \textbf{ } & \\ +\textbf{Covariance Type:} & nonrobust & \textbf{ } & \\ +\bottomrule +\end{tabular} +\begin{tabular}{lcccccc} + & \textbf{coef} & \textbf{std err} & \textbf{t} & \textbf{P$> |$t$|$} & \textbf{[0.025} & \textbf{0.975]} \\ +\midrule +\textbf{const} & 17.8806 & 10.326 & 1.732 & 0.089 & -2.796 & 38.558 \\ +\textbf{x1} & 0.3875 & 0.688 & 0.563 & 0.576 & -0.991 & 1.766 \\ +\textbf{x2} & -0.4945 & 0.027 & -18.291 & 0.000 & -0.549 & -0.440 \\ +\bottomrule +\end{tabular} +\begin{tabular}{lclc} +\textbf{Omnibus:} & 0.223 & \textbf{ Durbin-Watson: } & 2.169 \\ +\textbf{Prob(Omnibus):} & 0.894 & \textbf{ Jarque-Bera (JB): } & 0.397 \\ +\textbf{Skew:} & -0.106 & \textbf{ Prob(JB): } & 0.820 \\ +\textbf{Kurtosis:} & 2.662 & \textbf{ Cond. No. } & 837. \\ +\bottomrule +\end{tabular} +%\caption{OLS Regression Results} +\end{center} + +Notes: \newline + [1] Standard Errors assume that the covariance matrix of the errors is correctly specified. \ No newline at end of file diff --git a/report/table_1_2.tex b/report/table_1_2.tex new file mode 100644 index 0000000..67e88df --- /dev/null +++ b/report/table_1_2.tex @@ -0,0 +1,9 @@ +\begin{tabular}{lrrrr} +\toprule + & True & Estimated & Std Err & t-Stat \\ +\midrule +0 & 3.000000 & 2.962797 & 0.117377 & 25.241713 \\ +1 & -4.000000 & -4.018728 & 0.015964 & -251.729125 \\ +2 & 2.000000 & 1.985917 & 0.020033 & 99.132074 \\ +\bottomrule +\end{tabular} diff --git a/report/table_1_3.tex b/report/table_1_3.tex new file mode 100644 index 0000000..f1a4fbe --- /dev/null +++ b/report/table_1_3.tex @@ -0,0 +1,8 @@ +\begin{tabular}{lrrrr} +\toprule + & True & Estimated & Std Err & t-Stat \\ +\midrule +0 & 3.000000 & 7.040489 & 0.362044 & 19.446476 \\ +1 & -4.000000 & -3.986195 & 0.052565 & -75.833855 \\ +\bottomrule +\end{tabular} diff --git a/report/table_1_4.tex b/report/table_1_4.tex new file mode 100644 index 0000000..bfa66a0 --- /dev/null +++ b/report/table_1_4.tex @@ -0,0 +1,9 @@ +\begin{tabular}{lrrrr} +\toprule + & True & Estimated & Std Err & t-Stat \\ +\midrule +0 & 3.000000 & 3.062084 & 0.164930 & 18.565919 \\ +1 & -4.000000 & -4.006083 & 0.020178 & -198.535392 \\ +2 & 2.000000 & 1.974439 & 0.024519 & 80.526341 \\ +\bottomrule +\end{tabular} diff --git a/report/table_1_5.tex b/report/table_1_5.tex new file mode 100644 index 0000000..d4874d8 --- /dev/null +++ b/report/table_1_5.tex @@ -0,0 +1,8 @@ +\begin{tabular}{lrrrr} +\toprule + & True & Estimated & Std Err & t-Stat \\ +\midrule +0 & 3.000000 & 12.965134 & 0.300905 & 43.087097 \\ +1 & -4.000000 & -3.011484 & 0.043688 & -68.931429 \\ +\bottomrule +\end{tabular} diff --git a/report/table_1_6.tex b/report/table_1_6.tex new file mode 100644 index 0000000..fc45dd6 --- /dev/null +++ b/report/table_1_6.tex @@ -0,0 +1,9 @@ +\begin{tabular}{lrrrr} +\toprule + & True & Estimated & Std Err & t-Stat \\ +\midrule +0 & 3.000000 & 3.107269 & 0.320425 & 9.697336 \\ +1 & -4.000000 & -4.067205 & 0.100288 & -40.555170 \\ +2 & 2.000000 & 1.985469 & 0.020038 & 99.084266 \\ +\bottomrule +\end{tabular} diff --git a/scripts/assignment_empirical_jan_2025_starter (1).py b/scripts/assignment_empirical_jan_2025_starter (1).py new file mode 100644 index 0000000..48aaca8 --- /dev/null +++ b/scripts/assignment_empirical_jan_2025_starter (1).py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Empirical assignment 2024 - 2025 + +STARTER FILE +""" + +import os +import numpy as np +import numpy.linalg as la +import matplotlib.pyplot as plt +import statsmodels.api as sm +import scipy.stats as stats +import pandas as pd + +from helper import print_question, data_frame_to_latex_table_file + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Start of Script for Empirical assignment Econometrics +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Set the folders for output of graphs and tables +# ----------------------------------------------------------------------------- + +# for the figures +data_dir = '../data/' +if not os.path.exists(data_dir): + os.makedirs(data_dir) +# for the figures +figure_dir = '../figures/' +if not os.path.exists(figure_dir): + os.makedirs(figure_dir) +# for the latex document +report_dir = '../report/' +if not os.path.exists(report_dir): + os.makedirs(report_dir) + +# ----------------------------------------------------------------------------- +# Here we set the seed for our group to your group number +# ----------------------------------------------------------------------------- + + +# first birthday +bd_1 = 3112 +# second birthday +bd_2 = 3112 + +group_seed = bd_1 * bd_2 + +# set the seed +np.random.seed(group_seed) + +# ----------------------------------------------------------------------------- +# set the random number generator and seed +# ----------------------------------------------------------------------------- + +# set the seed and the random number generator for reproducible results +rng = np.random.default_rng(group_seed) + +# setting for output printing +print_line_length = 90 +print_line_start = 5 + +# number of x points +num_points = 60 + +# ----------------------------------------------------------------------------- +# Load data 2.1 +# ----------------------------------------------------------------------------- + +data_full = pd.read_stata(data_dir + 'assignment2025.dta') + +num_obs = int(0.75 * data_full.shape[0]) +# select 75% observations randomly ( the rng uses your seed ) +observations = rng.choice (len(data_full), num_obs , replace =False) +# select the observationsfor your group +data = data_full.iloc[observations , :].copy() + +#data = data_full + +# ----------------------------------------------------------------------------- +# Descriptive statistics 2.1 +# ----------------------------------------------------------------------------- + +print_question('Question 2.1: Descriptive Statistics') + +# compute the summary statistics +# data_summary = TODO + +# print to screen +# print(data_summary.T) [uncomment] + +# export the summary statistics to a file +# data_frame_to_latex_table_file(report_dir + 'summmary_stats.tex', +# data_summary.T) [uncomment] + +# ----------------------------------------------------------------------------- +# Question 2.2 +# ----------------------------------------------------------------------------- + +print_question('Question 2.2: Plot histogram wage / lwage') + + +# ----------------------------------------------------------------------------- +# Question 2.3 +# ----------------------------------------------------------------------------- + +print_question('Question 2.3: Sample correlations') + + +# ----------------------------------------------------------------------------- +# Question 2.4 +# ----------------------------------------------------------------------------- + +print_question('Question 2.4: Estimate lwage model') + +# explanatory variables for question 2.4 +# x_vars_24 = data[['smcity', 'AA']] # TODO + +# add a constant +# X_24 = sm.add_constant(x_vars_24) [uncomment] + +# set-up model +# model_24 = sm.OLS(,) #TODO + +# estimate the model +# results_24 = model_24. #TODO + +# print the OLS output +# print(results_24.summary()) [uncomment] + +# export the coefficients part of the summary to a table +# data_frame_to_latex_table_file(report_dir + 'results_24.tex', +# results_24.summary2().tables[1]) + +# ----------------------------------------------------------------------------- +# Question 2.5 +# ----------------------------------------------------------------------------- + +print_question('Question 2.5: Adding school') + +# ----------------------------------------------------------------------------- +# Question 2.6 +# ----------------------------------------------------------------------------- + +print_question('Question 2.6: Adding age') + +# ----------------------------------------------------------------------------- +# Question 2.7 +# ----------------------------------------------------------------------------- + +print_question('Question 2.7: Create the woman variable') + +# ----------------------------------------------------------------------------- +# Question 2.8 +# ----------------------------------------------------------------------------- + +print_question('Question 2.8: lwage model') + +# ----------------------------------------------------------------------------- +# Question 2.9 +# ----------------------------------------------------------------------------- + +print_question('Question 2.9: Test ethnicity') + +# ----------------------------------------------------------------------------- +# Question 2.10 +# ----------------------------------------------------------------------------- + +print_question('Question 2.10: Estimate models separately') + +# ----------------------------------------------------------------------------- +# Question 2.11 +# ----------------------------------------------------------------------------- + +print_question('Question 2.11: Predict lwage') + +# ----------------------------------------------------------------------------- +# Question 2.12 +# ----------------------------------------------------------------------------- + +print_question('Question 2.12: Estimate model with squared terms') + +# ----------------------------------------------------------------------------- +# Question 2.13 +# ----------------------------------------------------------------------------- + +print_question('Question 2.13: Squared terms') + + +# ----------------------------------------------------------------------------- +# Question 2.14 +# ----------------------------------------------------------------------------- + +print_question('Question 2.14: Add interaction terms') + + +# ----------------------------------------------------------------------------- +# Question 2.15 +# ----------------------------------------------------------------------------- + +print_question('Question 2.15: Find your favourite model') + diff --git a/scripts/assignment_simulation_jan_2025_starter.py b/scripts/assignment_simulation_jan_2025_starter.py new file mode 100644 index 0000000..9a1cfea --- /dev/null +++ b/scripts/assignment_simulation_jan_2025_starter.py @@ -0,0 +1,93 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Simulation assignment 2024 - 2025 + +STARTER FILE + +""" + +import os + +import matplotlib.pyplot as plt +import numpy as np +import numpy.linalg as la +import pandas as pd +import scipy.stats as stats +import statsmodels.api as sm +#import varplot as vpl + +#plt.style.use("finthabo") + +# this imports all functions from the helper file +from helper import data_frame_to_latex_table_file, print_question + +#colors = vpl.color_list() + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Start of Script for Simulation assignment Econometrics +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Set the folders for output of graphs and tables +# ----------------------------------------------------------------------------- + +# for the figures +FIGURE_DIR = "../figures/" +if not os.path.exists(FIGURE_DIR): + os.makedirs(FIGURE_DIR) +# for the latex document +REPORT_DIR = "../report/" +if not os.path.exists(REPORT_DIR): + os.makedirs(REPORT_DIR) + +# ----------------------------------------------------------------------------- +# Here we set the seed for our group to your group number +# ----------------------------------------------------------------------------- + + +# first birthday +bd_1 = 3112 +# second birthday +bd_2 = 3112 + +group_seed = bd_1 * bd_2 + +# set the seed +np.random.seed(group_seed) + +# ----------------------------------------------------------------------------- +# set the random number generator and seed +# ----------------------------------------------------------------------------- + +# setting for output printing +print_line_length = 90 +print_line_start = 5 + +# the number of data sets that we will simulate +num_obs = 2**10 + +# set the seed and the random number generator for reproducible results +# this ensures that every time you run this code you get exactly the same random numbers. +# changing the seed would change the random numbers. +rng = np.random.default_rng(group_seed) + +# the true value of the parameters. +# Known in your role as creator, unknown to the modeller. +beta = np.array([3.0, -4.0, 2.0]) + +# standard deviation of the error terms +u = rng.normal(0, 3, (num_obs,)) + +x1 = rng.normal(3, 6, (num_obs,)) +x2 = rng.normal(2, 5, (num_obs,)) + +# y = TODO + +# X = TODO + +# m = TODO +# results = #TODO + diff --git a/scripts/empirical.py b/scripts/empirical.py new file mode 100644 index 0000000..48aaca8 --- /dev/null +++ b/scripts/empirical.py @@ -0,0 +1,207 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Empirical assignment 2024 - 2025 + +STARTER FILE +""" + +import os +import numpy as np +import numpy.linalg as la +import matplotlib.pyplot as plt +import statsmodels.api as sm +import scipy.stats as stats +import pandas as pd + +from helper import print_question, data_frame_to_latex_table_file + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Start of Script for Empirical assignment Econometrics +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Set the folders for output of graphs and tables +# ----------------------------------------------------------------------------- + +# for the figures +data_dir = '../data/' +if not os.path.exists(data_dir): + os.makedirs(data_dir) +# for the figures +figure_dir = '../figures/' +if not os.path.exists(figure_dir): + os.makedirs(figure_dir) +# for the latex document +report_dir = '../report/' +if not os.path.exists(report_dir): + os.makedirs(report_dir) + +# ----------------------------------------------------------------------------- +# Here we set the seed for our group to your group number +# ----------------------------------------------------------------------------- + + +# first birthday +bd_1 = 3112 +# second birthday +bd_2 = 3112 + +group_seed = bd_1 * bd_2 + +# set the seed +np.random.seed(group_seed) + +# ----------------------------------------------------------------------------- +# set the random number generator and seed +# ----------------------------------------------------------------------------- + +# set the seed and the random number generator for reproducible results +rng = np.random.default_rng(group_seed) + +# setting for output printing +print_line_length = 90 +print_line_start = 5 + +# number of x points +num_points = 60 + +# ----------------------------------------------------------------------------- +# Load data 2.1 +# ----------------------------------------------------------------------------- + +data_full = pd.read_stata(data_dir + 'assignment2025.dta') + +num_obs = int(0.75 * data_full.shape[0]) +# select 75% observations randomly ( the rng uses your seed ) +observations = rng.choice (len(data_full), num_obs , replace =False) +# select the observationsfor your group +data = data_full.iloc[observations , :].copy() + +#data = data_full + +# ----------------------------------------------------------------------------- +# Descriptive statistics 2.1 +# ----------------------------------------------------------------------------- + +print_question('Question 2.1: Descriptive Statistics') + +# compute the summary statistics +# data_summary = TODO + +# print to screen +# print(data_summary.T) [uncomment] + +# export the summary statistics to a file +# data_frame_to_latex_table_file(report_dir + 'summmary_stats.tex', +# data_summary.T) [uncomment] + +# ----------------------------------------------------------------------------- +# Question 2.2 +# ----------------------------------------------------------------------------- + +print_question('Question 2.2: Plot histogram wage / lwage') + + +# ----------------------------------------------------------------------------- +# Question 2.3 +# ----------------------------------------------------------------------------- + +print_question('Question 2.3: Sample correlations') + + +# ----------------------------------------------------------------------------- +# Question 2.4 +# ----------------------------------------------------------------------------- + +print_question('Question 2.4: Estimate lwage model') + +# explanatory variables for question 2.4 +# x_vars_24 = data[['smcity', 'AA']] # TODO + +# add a constant +# X_24 = sm.add_constant(x_vars_24) [uncomment] + +# set-up model +# model_24 = sm.OLS(,) #TODO + +# estimate the model +# results_24 = model_24. #TODO + +# print the OLS output +# print(results_24.summary()) [uncomment] + +# export the coefficients part of the summary to a table +# data_frame_to_latex_table_file(report_dir + 'results_24.tex', +# results_24.summary2().tables[1]) + +# ----------------------------------------------------------------------------- +# Question 2.5 +# ----------------------------------------------------------------------------- + +print_question('Question 2.5: Adding school') + +# ----------------------------------------------------------------------------- +# Question 2.6 +# ----------------------------------------------------------------------------- + +print_question('Question 2.6: Adding age') + +# ----------------------------------------------------------------------------- +# Question 2.7 +# ----------------------------------------------------------------------------- + +print_question('Question 2.7: Create the woman variable') + +# ----------------------------------------------------------------------------- +# Question 2.8 +# ----------------------------------------------------------------------------- + +print_question('Question 2.8: lwage model') + +# ----------------------------------------------------------------------------- +# Question 2.9 +# ----------------------------------------------------------------------------- + +print_question('Question 2.9: Test ethnicity') + +# ----------------------------------------------------------------------------- +# Question 2.10 +# ----------------------------------------------------------------------------- + +print_question('Question 2.10: Estimate models separately') + +# ----------------------------------------------------------------------------- +# Question 2.11 +# ----------------------------------------------------------------------------- + +print_question('Question 2.11: Predict lwage') + +# ----------------------------------------------------------------------------- +# Question 2.12 +# ----------------------------------------------------------------------------- + +print_question('Question 2.12: Estimate model with squared terms') + +# ----------------------------------------------------------------------------- +# Question 2.13 +# ----------------------------------------------------------------------------- + +print_question('Question 2.13: Squared terms') + + +# ----------------------------------------------------------------------------- +# Question 2.14 +# ----------------------------------------------------------------------------- + +print_question('Question 2.14: Add interaction terms') + + +# ----------------------------------------------------------------------------- +# Question 2.15 +# ----------------------------------------------------------------------------- + +print_question('Question 2.15: Find your favourite model') + diff --git a/scripts/helper.py b/scripts/helper.py new file mode 100644 index 0000000..0c2cbfe --- /dev/null +++ b/scripts/helper.py @@ -0,0 +1,84 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Helper functions for assignment +""" +import os +import numpy as np +import pandas as pd + +# ----------------------------------------------------------------------------- +# ALL FUNCTIONS ARE ON TOP +# +# THE SCRIPT IS BELOW THE FUNCTIONS +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Helper function to transform results summary into a dataFrame +# ----------------------------------------------------------------------------- + +def results_summary_to_dataframe(results, rounding=2): + '''take the result of an statsmodel results table + and transforms it into a dataframe''' + + # get the values from results + # if you want, you can of course generalize this. + # e.g. if you don't have normal error terms + # you could change the pvalues and confidence bounds + # see exercise session 9?! + pvals = results.pvalues + tvals = results.tvalues + coeff = results.params + conf_lower = results.conf_int()[:, 0] + conf_higher = results.conf_int()[:, 1] + + # create a pandas DataFrame from a dictionary + results_df = pd.DataFrame({"pvals": np.round(pvals, rounding), + "tvals": np.round(tvals, rounding), + "coeff": np.round(coeff, rounding), + "conf_lower": np.round(conf_lower, rounding), + "conf_higher": np.round(conf_higher, rounding) + }) + # This is just to show you how to re-order if needed + # Typically you should put them in the order you like straigh away + #Reordering... + results_df = results_df[["coeff", "tvals", "pvals", "conf_lower", + "conf_higher"]] + + return results_df + +# ----------------------------------------------------------------------------- + + +def data_frame_to_latex_table_file(file_name, df): + """takes a DataFrame and creates file_name.tex with LaTeX table data. """ + print(df.columns) + # create and open file + text_file = open(file_name, "w") + # data frame to LaTeX + df_latex = df.to_latex() + # Consider extensions (see later in class) + # write latex string to file + text_file.write(df_latex) + # close file + text_file.close() + +# ----------------------------------------------------------------------------- + + +def print_question(statement, print_line_start=5, print_line_length=90): + """ + Print question description. + + Args: + statement (string): Question description. + print_line_start (int): column where statement starts + print_line_length (int): total columns. + + Returns: + None. + + """ + print(print_line_start * '#' + ' ' + statement + ' ' + + (print_line_length - len(statement) - print_line_start - 2) * '#') + diff --git a/scripts/non_linear_models_example_report.py b/scripts/non_linear_models_example_report.py new file mode 100644 index 0000000..d96f51b --- /dev/null +++ b/scripts/non_linear_models_example_report.py @@ -0,0 +1,198 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Examples of non-linear models +""" + +import os + +import matplotlib.pyplot as plt +import numpy as np +import numpy.linalg as la +import pandas as pd +import scipy.stats as stats +import statsmodels.api as sm + +# ----------------------------------------------------------------------------- +# ALL FUNCTIONS ARE ON TOP +# +# THE SCRIPT IS BELOW THE FUNCTIONS +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Helper function to transform results summary into a dataFrame +# ----------------------------------------------------------------------------- + + +def results_summary_to_dataframe(results, rounding=2): + """take the result of an statsmodel results table + and transforms it into a dataframe""" + + # get the values from results + # if you want, you can of course generalize this. + # e.g. if you don't have normal error terms + # you could change the pvalues and confidence bounds + # see exercise session 9?! + pvals = results.pvalues + tvals = results.tvalues + coeff = results.params + conf_lower = results.conf_int()[:, 0] + conf_higher = results.conf_int()[:, 1] + + # create a pandas DataFrame from a dictionary + results_df = pd.DataFrame( + { + "pvals": np.round(pvals, rounding), + "tvals": np.round(tvals, rounding), + "coeff": np.round(coeff, rounding), + "conf\_lower": np.round(conf_lower, rounding), + "conf\_higher": np.round(conf_higher, rounding), + } + ) + # This is just to show you how to re-order if needed + # Typically you should put them in the order you like straigh away + # Reordering... + results_df = results_df[["coeff", "tvals", "pvals", "conf\_lower", "conf\_higher"]] + + return results_df + + +# ----------------------------------------------------------------------------- + + +def data_frame_to_latex_table_file(file_name, df): + """takes a DataFrame and creates file_name.tex with LaTeX table data.""" + # create and open file + text_file = open(file_name, "w") + # data frame to LaTeX + df_latex = df.to_latex() + # Consider extensions (see later in class) + # write latex string to file + text_file.write(df_latex) + # close file + text_file.close() + + +# ----------------------------------------------------------------------------- +# Set the folders for output of graphs and tables +# ----------------------------------------------------------------------------- + +# for the figures +FIGURE_DIR = "../figures/" +if not os.path.exists(FIGURE_DIR): + os.makedirs(FIGURE_DIR) +# for the latex document +REPORT_DIR = "../report/" +if not os.path.exists(REPORT_DIR): + os.makedirs(REPORT_DIR) + + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Start of Script +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# set the random number generator and seed +# ----------------------------------------------------------------------------- + +# set the seed and the random number generator for reproducible results +seed = 425246524 +rng = np.random.default_rng(seed) + +# number of x points +num_points = 60 + +# ----------------------------------------------------------------------------- +# Quadratic +# ----------------------------------------------------------------------------- + +# the true parameters of the Data Generating process (DGP) +beta = np.array([20, 0.5, -0.5]) + +# values for x +x = np.linspace(-20, 40, num_points) + +# error term +sigma_eps = 59 +# generate random numbers +eps = rng.normal(0, sigma_eps, (num_points,)) + +# create y values for the DGP +y = beta[0] + beta[1] * x + beta[2] * x**2 + eps + +# estimate the model +results = sm.OLS(y, sm.add_constant(x)).fit() + +# generate a figure and save it to disk +fig_num = 1 +fig = plt.figure(num=fig_num) +ax = fig.add_subplot(111) +ax.grid(ls=":") +ax.plot(x, y, "o", color="tab:brown", label="$y$") +ax.legend(loc="best") +ax.set_title("Quadratic model") +plt.savefig(FIGURE_DIR + "quadratic_model_y.png") +plt.show() +fig_num += 1 + + +fig = plt.figure(num=fig_num) +ax = fig.add_subplot(111) +ax.plot(x, results.fittedvalues, label=r"$\hat{y}$") +ax.grid(ls=":") +ax.plot(x, y, "o", color="tab:brown", label="$y$") +ax.legend(loc="best") +ax.set_title("Quadratic model") +plt.savefig(FIGURE_DIR + "quadratic_model_linear.png") +plt.show() +fig_num += 1 + +X = sm.add_constant(np.array([x, x**2]).T) + +results = sm.OLS(y, X).fit() + +fig = plt.figure(num=fig_num) +ax = fig.add_subplot(111) +ax.plot(x, results.fittedvalues, label=r"$\hat{y}$") +ax.grid(ls=":") +ax.plot(x, y, "o", color="tab:brown", label="$y$") +ax.legend(loc="best") +ax.set_title("Quadratic model") +plt.savefig(FIGURE_DIR + "quadratic_model_quadratic.png") +plt.show() +fig_num += 1 + +# print a summary +print(results.summary()) + +# The results can also be exported to LaTeX. +# do either +latex_summary = results.summary().as_latex() + +# alternatively for each group separately +for table in results.summary().tables: + print(table.as_latex_tabular()) + +############################################################################### +# Generate LateX tables +############################################################################### + +# write a string to a file +with open(REPORT_DIR + "summary.tex", "w") as f: + f.write(latex_summary) + +# create a DataFrame for the results +estimation_results_df = results_summary_to_dataframe(results) + +# give a name to the table +table_data_file = REPORT_DIR + "df_table.tex" +# create a latex file with the table information +data_frame_to_latex_table_file(table_data_file, estimation_results_df) + +# an alternative to only send the coefficients part of the results +# to a LaTeX table +data_frame_to_latex_table_file( + REPORT_DIR + "results_coef.tex", results.summary2().tables[1] +) diff --git a/scripts/show_seed.py b/scripts/show_seed.py deleted file mode 100644 index a711af5..0000000 --- a/scripts/show_seed.py +++ /dev/null @@ -1,3 +0,0 @@ -import util - -print(util.group_seed()) diff --git a/scripts/simulation.py b/scripts/simulation.py new file mode 100644 index 0000000..b9c0e8d --- /dev/null +++ b/scripts/simulation.py @@ -0,0 +1,188 @@ +#!/usr/bin/env python3 +# -*- coding: utf-8 -*- +""" +Simulation assignment 2024 - 2025 + +STARTER FILE + +""" + +import os + +import matplotlib.pyplot as plt +import numpy as np +import numpy.linalg as la +import pandas as pd +import scipy.stats as stats +import statsmodels.api as sm +#import varplot as vpl + +#plt.style.use("finthabo") + +# this imports all functions from the helper file +from helper import data_frame_to_latex_table_file, print_question + +#colors = vpl.color_list() + +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- +# Start of Script for Simulation assignment Econometrics +# ----------------------------------------------------------------------------- +# ----------------------------------------------------------------------------- + +# ----------------------------------------------------------------------------- +# Set the folders for output of graphs and tables +# ----------------------------------------------------------------------------- + +# for the figures +FIGURE_DIR = "../figures/" +if not os.path.exists(FIGURE_DIR): + os.makedirs(FIGURE_DIR) +# for the latex document +REPORT_DIR = "../report/" +if not os.path.exists(REPORT_DIR): + os.makedirs(REPORT_DIR) + +# ----------------------------------------------------------------------------- +# Here we set the seed for our group to your group number +# ----------------------------------------------------------------------------- + +# first birthday +bd_1 = 303 +# second birthday +bd_2 = 309 + +group_seed = bd_1 * bd_2 + +# set the seed +np.random.seed(group_seed) + +# ----------------------------------------------------------------------------- +# set the random number generator and seed +# ----------------------------------------------------------------------------- + +# setting for output printing +print_line_length = 90 +print_line_start = 5 + +# ----------------------------------------------------------------------------- +# 1.1 +# ----------------------------------------------------------------------------- + +# the number of data sets that we will simulate +num_obs = 1000 + +# set the seed and the random number generator for reproducible results +# this ensures that every time you run this code you get exactly the same random numbers. +# changing the seed would change the random numbers. +rng = np.random.default_rng(group_seed) + +# the true value of the parameters. +# Known in your role as creator, unknown to the modeller. +beta = np.array([3.0, -4.0, 2.0]) + +# standard deviation of the error terms +u = rng.normal(0, 3, (num_obs,)) + +x1 = rng.normal(3, 6, (num_obs,)) +x2 = rng.normal(2, 5, (num_obs,)) + +# y +y = beta[0] + beta[1]*x1 + beta[2]*x2 + u + +# ----------------------------------------------------------------------------- +# 1.2 +# ----------------------------------------------------------------------------- + +# X +X = np.array([np.ones(num_obs), x1, x2]).T + +# m +m = sm.OLS(y, X) +# results = +results = m.fit() +d = {'True': beta, + 'Estimated': results.params, + 'Std Err': results.bse, + 't-Stat': results.tvalues} +df = pd.DataFrame(data = d) +data_frame_to_latex_table_file(REPORT_DIR + 'table_1_2.tex', df) + +# ----------------------------------------------------------------------------- +# 1.3 +# ----------------------------------------------------------------------------- + +# X +X = np.array([np.ones(num_obs), x1]).T + +# m +m = sm.OLS(y, X) +# results = +results = m.fit() +d = {'True': beta[0:2], + 'Estimated': results.params, + 'Std Err': results.bse, + 't-Stat': results.tvalues} +df = pd.DataFrame(data = d) +data_frame_to_latex_table_file(REPORT_DIR + 'table_1_3.tex', df) + +# ----------------------------------------------------------------------------- +# 1.4 +# ----------------------------------------------------------------------------- + +x2_new = 0.5*x1 + rng.normal(5,4,(num_obs,)) + +y_new = beta[0] + beta[1]*x1 + beta[2]*x2_new + u + +# X +X = np.array([np.ones(num_obs), x1, x2_new]).T + +# m +m = sm.OLS(y_new, X) +# results = +results = m.fit() +d = {'True': beta, + 'Estimated': results.params, + 'Std Err': results.bse, + 't-Stat': results.tvalues} +df = pd.DataFrame(data = d) +data_frame_to_latex_table_file(REPORT_DIR + 'table_1_4.tex', df) + +# ----------------------------------------------------------------------------- +# 1.5 +# ----------------------------------------------------------------------------- + +# X +X = np.array([np.ones(num_obs), x1]).T + +# m +m = sm.OLS(y_new, X) +# results = +results = m.fit() +d = {'True': beta[0:2], + 'Estimated': results.params, + 'Std Err': results.bse, + 't-Stat': results.tvalues} +df = pd.DataFrame(data = d) +data_frame_to_latex_table_file(REPORT_DIR + 'table_1_5.tex', df) + +# ----------------------------------------------------------------------------- +# 1.6 +# ----------------------------------------------------------------------------- + +x1 = rng.normal(3, 1, (num_obs,)) +y = beta[0] + beta[1]*x1 + beta[2]*x2 + u + +# X +X = np.array([np.ones(num_obs), x1, x2]).T + +# m +m = sm.OLS(y, X) +# results = +results = m.fit() +d = {'True': beta, + 'Estimated': results.params, + 'Std Err': results.bse, + 't-Stat': results.tvalues} +df = pd.DataFrame(data = d) +data_frame_to_latex_table_file(REPORT_DIR + 'table_1_6.tex', df) \ No newline at end of file diff --git a/scripts/util/__init__.py b/scripts/util/__init__.py deleted file mode 100644 index a68d4bc..0000000 --- a/scripts/util/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -import os -import numpy as np - - -def group_seed(): - bd_env_var = os.getenv("BIRTHDAYS") - - # If no birthdays are set, complain and exit - if not bd_env_var: - print("Environment variable BIRTHDAYS is missing") - exit(-1) - - # convert birthdays to ints - birthdays = [int(bd) for bd in bd_env_var.split(",")] - - # multiply them to get the group seed - seed = 1 - for bd in birthdays: - seed *= bd - - return seed - - -rng = np.random.default_rng(group_seed())