如何计算 Julia 中的 CAPM 变量?
How to calculate CAPM variables in Julia?
在 Python 中,使用 scipy 包的统计信息,变量 beta
、alpha
、r
、p
、std_err
的CAPM可以计算如下:
beta, alpha, r_value, pvalue, std_err = stats.linregress(stock_rtn_arr, mkt_rtn_arr)
请指导我在 Julia 中计算上述变量。
我假设您正在寻找 运行 一个简单的 OLS 模型,在 Julia 中可以使用 GLM
包进行拟合:
julia> using GLM, DataFrame
julia> mkt_rtn_arr = randn(500); stock_rtn_arr = 0.5*mkt_rtn_arr .+ rand();
julia> df = DataFrame(mkt_rtn = mkt_rtn_arr, stock_rtn = stock_rtn_arr);
julia> linear_model = lm(@formula(stock_rtn ~ mkt_rtn), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
stock_rtn ~ 1 + mkt_rtn
Coefficients:
──────────────────────────────────────────────────────────────────────────────
Estimate Std. Error t value Pr(>|t|) Lower 95% Upper 95%
──────────────────────────────────────────────────────────────────────────────
(Intercept) 0.616791 7.80308e-18 7.90446e16 <1e-99 0.616791 0.616791
mkt_rtn 0.5 7.78767e-18 6.42041e16 <1e-99 0.5 0.5
──────────────────────────────────────────────────────────────────────────────
然后您可以从 linear_model
:
中提取感兴趣的参数
julia> β = coef(linear_model)[2]
0.4999999999999999
julia> α = coef(linear_model)[1]
0.6167912017573035
julia> r_value = r2(linear_model)
1.0
julia> pvalues = coeftable(linear_model).cols[4]
2-element Array{Float64,1}:
0.0
0.0
julia> stderror(linear_model)
2-element Array{Float64,1}:
7.803081577574428e-18
7.787667394841443e-18
请注意,我使用了 @formula
API 到 运行 回归,这需要将您的数据放入 DataFrame
并且在我看来是首选方式在 GLM 中估计线性模型,因为它允许更灵活地指定模型。或者,您可以直接在数组上为 X
变量和 y
变量调用 lm(X, y)
:
julia> lm([ones(length(mkt_rtn_arr)) mkt_rtn_arr], stock_rtn_arr)
LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}}:
Coefficients:
─────────────────────────────────────────────────────────────────────
Estimate Std. Error t value Pr(>|t|) Lower 95% Upper 95%
─────────────────────────────────────────────────────────────────────
x1 0.616791 7.80308e-18 7.90446e16 <1e-99 0.616791 0.616791
x2 0.5 7.78767e-18 6.42041e16 <1e-99 0.5 0.5
─────────────────────────────────────────────────────────────────────
请注意,这里我在市场 return 数组中附加了一列 ones 来估计带有截距的模型,@formula
宏将自动执行(类似于完成的方式)在 R).
在 Python 中,使用 scipy 包的统计信息,变量 beta
、alpha
、r
、p
、std_err
的CAPM可以计算如下:
beta, alpha, r_value, pvalue, std_err = stats.linregress(stock_rtn_arr, mkt_rtn_arr)
请指导我在 Julia 中计算上述变量。
我假设您正在寻找 运行 一个简单的 OLS 模型,在 Julia 中可以使用 GLM
包进行拟合:
julia> using GLM, DataFrame
julia> mkt_rtn_arr = randn(500); stock_rtn_arr = 0.5*mkt_rtn_arr .+ rand();
julia> df = DataFrame(mkt_rtn = mkt_rtn_arr, stock_rtn = stock_rtn_arr);
julia> linear_model = lm(@formula(stock_rtn ~ mkt_rtn), df)
StatsModels.TableRegressionModel{LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}},Array{Float64,2}}
stock_rtn ~ 1 + mkt_rtn
Coefficients:
──────────────────────────────────────────────────────────────────────────────
Estimate Std. Error t value Pr(>|t|) Lower 95% Upper 95%
──────────────────────────────────────────────────────────────────────────────
(Intercept) 0.616791 7.80308e-18 7.90446e16 <1e-99 0.616791 0.616791
mkt_rtn 0.5 7.78767e-18 6.42041e16 <1e-99 0.5 0.5
──────────────────────────────────────────────────────────────────────────────
然后您可以从 linear_model
:
julia> β = coef(linear_model)[2]
0.4999999999999999
julia> α = coef(linear_model)[1]
0.6167912017573035
julia> r_value = r2(linear_model)
1.0
julia> pvalues = coeftable(linear_model).cols[4]
2-element Array{Float64,1}:
0.0
0.0
julia> stderror(linear_model)
2-element Array{Float64,1}:
7.803081577574428e-18
7.787667394841443e-18
请注意,我使用了 @formula
API 到 运行 回归,这需要将您的数据放入 DataFrame
并且在我看来是首选方式在 GLM 中估计线性模型,因为它允许更灵活地指定模型。或者,您可以直接在数组上为 X
变量和 y
变量调用 lm(X, y)
:
julia> lm([ones(length(mkt_rtn_arr)) mkt_rtn_arr], stock_rtn_arr)
LinearModel{GLM.LmResp{Array{Float64,1}},GLM.DensePredChol{Float64,LinearAlgebra.Cholesky{Float64,Array{Float64,2}}}}:
Coefficients:
─────────────────────────────────────────────────────────────────────
Estimate Std. Error t value Pr(>|t|) Lower 95% Upper 95%
─────────────────────────────────────────────────────────────────────
x1 0.616791 7.80308e-18 7.90446e16 <1e-99 0.616791 0.616791
x2 0.5 7.78767e-18 6.42041e16 <1e-99 0.5 0.5
─────────────────────────────────────────────────────────────────────
请注意,这里我在市场 return 数组中附加了一列 ones 来估计带有截距的模型,@formula
宏将自动执行(类似于完成的方式)在 R).