library(dynlm);library(stargazer)data(nyse, package='wooldridge')# Define time series (numbered 1,...,n)tsdata <-ts(nyse)# Linear regression of models with lags:reg1 <-dynlm(return~L(return) , data=tsdata) reg2 <-dynlm(return~L(return)+L(return,2) , data=tsdata) reg3 <-dynlm(return~L(return)+L(return,2)+L(return,3), data=tsdata) # Pretty regression tablestargazer(reg1, reg2, reg3, type="text",keep.stat=c("n","rsq","adj.rsq","f"))
Example-11-6.R
# Libraries for dynamic lm and "stargazer" regression table library(dynlm);library(stargazer)data(fertil3, package='wooldridge')# Define Yearly time series beginning in 1913tsdata <-ts(fertil3, start=1913)# Linear regression of model with first differences:res1 <-dynlm( d(gfr) ~d(pe), data=tsdata)# Linear regression of model with lagged differences:res2 <-dynlm( d(gfr) ~d(pe) +L(d(pe)) +L(d(pe),2), data=tsdata)# Pretty regression tablestargazer(res1,res2,type="text")
Example-EffMkts.R
library(zoo);library(quantmod);library(dynlm);library(stargazer)# Download data using the quantmod package:getSymbols("AAPL", auto.assign =TRUE)# Calculate return as the log differenceret <-diff( log(AAPL$AAPL.Adjusted) )# Subset 2008-2016 by special xts indexing:ret <- ret["2008/2016"]# Plot returnsplot(ret)# Linear regression of models with lags:ret <-as.zoo(ret) # dynlm cannot handle xts objectsreg1 <-dynlm(ret~L(ret) ) reg2 <-dynlm(ret~L(ret)+L(ret,2) ) reg3 <-dynlm(ret~L(ret)+L(ret,2)+L(ret,3) ) # Pretty regression tablestargazer(reg1, reg2, reg3, type="text",keep.stat=c("n","rsq","adj.rsq","f"))
Simulate-RandomWalk.R
# Initialize Random Number Generatorset.seed(348546)# initial graphplot(c(0,50),c(0,0),type="l",lwd=2,ylim=c(-18,18))# loop over draws:for(r in1:30) {# i.i.d. standard normal shock e <-rnorm(50)# Random walk as cumulative sum of shocks y <-ts(cumsum(e))# Add line to graphlines(y, col=gray(.6))}
Example-11-4.py
import wooldridge as wooimport pandas as pdimport statsmodels.formula.api as smfnyse = woo.dataWoo('nyse')nyse['ret'] = nyse['return']# add all lags up to order 3:nyse['ret_lag1'] = nyse['ret'].shift(1)nyse['ret_lag2'] = nyse['ret'].shift(2)nyse['ret_lag3'] = nyse['ret'].shift(3)# linear regression of model with lags:reg1 = smf.ols(formula='ret ~ ret_lag1', data=nyse)reg2 = smf.ols(formula='ret ~ ret_lag1 + ret_lag2', data=nyse)reg3 = smf.ols(formula='ret ~ ret_lag1 + ret_lag2 + ret_lag3', data=nyse)results1 = reg1.fit()results2 = reg2.fit()results3 = reg3.fit()# print regression tables:table1 = pd.DataFrame({'b': round(results1.params, 4),'se': round(results1.bse, 4),'t': round(results1.tvalues, 4),'pval': round(results1.pvalues, 4)})print(f'table1: \n{table1}\n')table2 = pd.DataFrame({'b': round(results2.params, 4),'se': round(results2.bse, 4),'t': round(results2.tvalues, 4),'pval': round(results2.pvalues, 4)})print(f'table2: \n{table2}\n')table3 = pd.DataFrame({'b': round(results3.params, 4),'se': round(results3.bse, 4),'t': round(results3.tvalues, 4),'pval': round(results3.pvalues, 4)})print(f'table3: \n{table3}\n')
Example-11-6.py
import wooldridge as wooimport pandas as pdimport statsmodels.formula.api as smffertil3 = woo.dataWoo('fertil3')T =len(fertil3)# define time series (years only) beginning in 1913:fertil3.index = pd.date_range(start='1913', periods=T, freq='Y').year# compute first differences:fertil3['gfr_diff1'] = fertil3['gfr'].diff()fertil3['pe_diff1'] = fertil3['pe'].diff()print(f'fertil3.head(): \n{fertil3.head()}\n')# linear regression of model with first differences:reg1 = smf.ols(formula='gfr_diff1 ~ pe_diff1', data=fertil3)results1 = reg1.fit()# print regression table:table1 = pd.DataFrame({'b': round(results1.params, 4),'se': round(results1.bse, 4),'t': round(results1.tvalues, 4),'pval': round(results1.pvalues, 4)})print(f'table1: \n{table1}\n')# linear regression of model with lagged differences:fertil3['pe_diff1_lag1'] = fertil3['pe_diff1'].shift(1)fertil3['pe_diff1_lag2'] = fertil3['pe_diff1'].shift(2)reg2 = smf.ols(formula='gfr_diff1 ~ pe_diff1 + pe_diff1_lag1 + pe_diff1_lag2', data=fertil3)results2 = reg2.fit()# print regression table:table2 = pd.DataFrame({'b': round(results2.params, 4),'se': round(results2.bse, 4),'t': round(results2.tvalues, 4),'pval': round(results2.pvalues, 4)})print(f'table2: \n{table2}\n')
Example-EffMkts.py
import numpy as npimport pandas as pdimport pandas_datareader as pdrimport statsmodels.formula.api as smfimport matplotlib.pyplot as plt# download data for 'AAPL' (= Apple) and define start and end:tickers = ['AAPL']start_date ='2007-12-31'end_date ='2016-12-31'# use pandas_datareader for the import:AAPL_data = pdr.data.DataReader(tickers, 'yahoo', start_date, end_date)# drop ticker symbol from column name:AAPL_data.columns = AAPL_data.columns.droplevel(level=1)# calculate return as the log difference:AAPL_data['ret'] = np.log(AAPL_data['Adj Close']).diff()# time series plot of adjusted closing prices:plt.plot('ret', data=AAPL_data, color='black', linestyle='-')plt.ylabel('Apple Log Returns')plt.xlabel('time')plt.savefig('PyGraphs/Example-EffMkts.pdf')# linear regression of models with lags:AAPL_data['ret_lag1'] = AAPL_data['ret'].shift(1)AAPL_data['ret_lag2'] = AAPL_data['ret'].shift(2)AAPL_data['ret_lag3'] = AAPL_data['ret'].shift(3)reg1 = smf.ols(formula='ret ~ ret_lag1', data=AAPL_data)reg2 = smf.ols(formula='ret ~ ret_lag1 + ret_lag2', data=AAPL_data)reg3 = smf.ols(formula='ret ~ ret_lag1 + ret_lag2 + ret_lag3', data=AAPL_data)results1 = reg1.fit()results2 = reg2.fit()results3 = reg3.fit()# print regression tables:table1 = pd.DataFrame({'b': round(results1.params, 4),'se': round(results1.bse, 4),'t': round(results1.tvalues, 4),'pval': round(results1.pvalues, 4)})print(f'table1: \n{table1}\n')table2 = pd.DataFrame({'b': round(results2.params, 4),'se': round(results2.bse, 4),'t': round(results2.tvalues, 4),'pval': round(results2.pvalues, 4)})print(f'table2: \n{table2}\n')table3 = pd.DataFrame({'b': round(results3.params, 4),'se': round(results3.bse, 4),'t': round(results3.tvalues, 4),'pval': round(results3.pvalues, 4)})print(f'table3: \n{table3}\n')
Simulate-RandomWalk.py
import numpy as npimport scipy.stats as statsimport matplotlib.pyplot as plt# set the random seed:np.random.seed(1234567)# initialize plot:x_range = np.linspace(0, 50, num=51)plt.ylim([-18, 18])plt.xlim([0, 50])# loop over draws:for r inrange(0, 30):# i.i.d. standard normal shock: e = stats.norm.rvs(0, 1, size=51)# set first entry to 0 (gives y_0 = 0): e[0] =0# random walk as cumulative sum of shocks: y = np.cumsum(e)# add line to graph: plt.plot(x_range, y, color='lightgrey', linestyle='-')plt.axhline(linewidth=2, linestyle='--', color='black')plt.ylabel('y')plt.xlabel('time')plt.savefig('PyGraphs/Simulate-RandomWalk.pdf')
Simulate-RandomWalkDrift-Diff.py
import numpy as npimport scipy.stats as statsimport matplotlib.pyplot as plt# set the random seed:np.random.seed(1234567)# initialize plot:x_range = np.linspace(1, 50, num=50)plt.ylim([-1, 5])plt.xlim([0, 50])# loop over draws:for r inrange(0, 30):# i.i.d. standard normal shock and cumulative sum of shocks: e = stats.norm.rvs(0, 1, size=51) e[0] =0 y = np.cumsum(2+ e)# first difference: Dy = y[1:51] - y[0:50]# add line to graph: plt.plot(x_range, Dy, color='lightgrey', linestyle='-')plt.axhline(y=2, linewidth=2, linestyle='--', color='black')plt.ylabel('y')plt.xlabel('time')plt.savefig('PyGraphs/Simulate-RandomWalkDrift-Diff.pdf')
Simulate-RandomWalkDrift.py
import numpy as npimport scipy.stats as statsimport matplotlib.pyplot as plt# set the random seed:np.random.seed(1234567)# initialize plot:x_range = np.linspace(0, 50, num=51)plt.ylim([0, 100])plt.xlim([0, 50])# loop over draws:for r inrange(0, 30):# i.i.d. standard normal shock: e = stats.norm.rvs(0, 1, size=51)# set first entry to 0 (gives y_0 = 0): e[0] =0# random walk as cumulative sum of shocks plus drift: y = np.cumsum(e) +2* x_range# add line to graph: plt.plot(x_range, y, color='lightgrey', linestyle='-')plt.plot(x_range, 2* x_range, linewidth=2, linestyle='--', color='black')plt.ylabel('y')plt.xlabel('time')plt.savefig('PyGraphs/Simulate-RandomWalkDrift.pdf')
Example-11-4.jl
usingWooldridgeDatasets, GLM, DataFrames, RegressionTablesnyse =DataFrame(wooldridge("nyse"))nyse.ret = nyse.return# add all lags up to order 3:nyse.ret_lag1 =lag(nyse.ret, 1)nyse.ret_lag2 =lag(nyse.ret, 2)nyse.ret_lag3 =lag(nyse.ret, 3)# linear regression of model with lags:reg1 =lm(@formula(ret ~ ret_lag1), nyse)reg2 =lm(@formula(ret ~ ret_lag1 + ret_lag2), nyse)reg3 =lm(@formula(ret ~ ret_lag1 + ret_lag2 + ret_lag3), nyse)# print results with RegressionTables:regtable(reg1, reg2, reg3)
Example-11-6.jl
usingWooldridgeDatasets, GLM, DataFramesfertil3 =DataFrame(wooldridge("fertil3"))# compute first differences (first difference is always missing):fertil3.gfr_diff1 =vcat(missing, diff(fertil3.gfr))fertil3.pe_diff1 =vcat(missing, diff(fertil3.pe))preview = fertil3[1:5, ["gfr", "gfr_diff1", "pe", "pe_diff1"]]println("preview: \n$preview\n")# linear regression of model with first differences:reg1 =lm(@formula(gfr_diff1 ~ pe_diff1), fertil3)table_reg1 =coeftable(reg1)println("table_reg1: \n$table_reg1\n")# linear regression of model with lagged differences:fertil3.pe_diff1_lag1 =lag(fertil3.pe_diff1, 1)fertil3.pe_diff1_lag2 =lag(fertil3.pe_diff1, 2)reg2 =lm(@formula(gfr_diff1 ~ pe_diff1 + pe_diff1_lag1 + pe_diff1_lag2), fertil3)table_reg2 =coeftable(reg2)println("table_reg2: \n$table_reg2")
Example-EffMkts.jl
usingDataFrames, GLM, Dates, MarketData, Plots, RegressionTables# download data for "AAPL" (= Apple) and define start and end:ticker ="AAPL"start_date =DateTime(2007, 12, 31)end_date =DateTime(2017, 01, 01)# import data as DataFrame:AAPL_data =DataFrame(yahoo(ticker,YahooOpt(period1=start_date, period2=end_date)))# calculate return as the difference of logged prices:AAPL_data.ret =vcat(missing, diff(log.(AAPL_data.AdjClose)))# time series plot of returns:plot(AAPL_data.timestamp, AAPL_data.ret, legend=false, color="grey")ylabel!("returns")savefig("JlGraphs/Example-EffMkts.pdf")# linear regression of models with lags:AAPL_data.ret_lag1 =lag(AAPL_data.ret, 1)AAPL_data.ret_lag2 =lag(AAPL_data.ret, 2)AAPL_data.ret_lag3 =lag(AAPL_data.ret, 3)reg1 =lm(@formula(ret ~ ret_lag1), AAPL_data)reg2 =lm(@formula(ret ~ ret_lag1 + ret_lag2), AAPL_data)reg3 =lm(@formula(ret ~ ret_lag1 + ret_lag2 + ret_lag3), AAPL_data)# print results with RegressionTables:regtable(reg1, reg2, reg3)
Simulate-RandomWalk.jl
usingRandom, Distributions, Statistics, Plots# set the random seed:Random.seed!(12345)# initialize plot:x_range =range(0, 50, 51)plot(xlims=(0, 50), ylims=(-25, 25))# loop over draws:for r in1:30# i.i.d. standard normal shock:e=rand(Normal(0, 1), 51)# set first entry to 0 (gives y_0 = 0):e[1] =0# random walk as cumulative sum of shocks: y =cumsum(e)# add line to graph:plot!(x_range, y, color="lightgrey", legend=false)endhline!([0], color="black", linewidth=2, linestyle=:dash)xlabel!("time")ylabel!("y")savefig("JlGraphs/Simulate-RandomWalk.pdf")
Simulate-RandomWalkDrift-Diff.jl
usingRandom, Distributions, Statistics, Plots# set the random seed:Random.seed!(12345)# initialize plot:x_range =range(1, 50, 50)plot(xlims=(0, 50), ylims=(-1, 5))# loop over draws:for r in1:30# i.i.d. standard normal shock:e=rand(Normal(0, 1), 51)# set first entry to 0 (gives y_0 = 0):e[1] =0# random walk as cumulative sum of shocks: y =cumsum(2.+e)# first difference: Dy = y[2:51] .- y[1:50]# add line to graph:plot!(x_range, Dy, color="lightgrey", legend=false)endhline!([2], color="black", linewidth=2, linestyle=:dash)xlabel!("time")ylabel!("Dy")savefig("JlGraphs/Simulate-RandomWalkDrift-Diff.pdf")
Simulate-RandomWalkDrift.jl
usingRandom, Distributions, Statistics, Plots# set the random seed:Random.seed!(12345)# initialize plot:x_range =range(0, 50, 51)plot(xlims=(0, 50), ylims=(0, 100))# loop over draws:for r in1:30# i.i.d. standard normal shock:e=rand(Normal(0, 1), 51)# set first entry to 0 (gives y_0 = 0):e[1] =0# random walk as cumulative sum of shocks: y =cumsum(e) +2* x_range# add line to graph:plot!(x_range, y, color="lightgrey", legend=false)endplot!(x_range, 2* x_range, color="black", linewidth=2, linestyle=:dash)xlabel!("time")ylabel!("y")savefig("JlGraphs/Simulate-RandomWalkDrift.pdf")