首页 > 解决方案 > 无法评估 Julia 中的简单表达式

问题描述

我正在尝试为股票收益之间相关性的几个不同值绘制投资组合平均值与标准差(散点图)。但是,对于相关系数的每个不同值,我似乎无法获得标准偏差向量的不同值。

rA = .05; sA = .00; lA = "A"  # mean and std.dev. and label of stock A returns
rB = .10; sB = .38; lB = "B"  # mean and std.dev. and label of stock B returns

# several possible values of the correlation (There should be one curve for each value)
rrab1 = 1
rrab2 = .5 
rrab3 = 0        # and other such values

# Create portfolio weight vectors (Needed to generate the curves)
x = collect(0 : .05 : 1)   # weight on stock A (a vector)
y = 1 .-x                  # weight on stock B (a vector)

# Evaluate the portfolio mean and the portfolio std.dev.

rab1 = rA*x + rB*y             # Portfolio return
sab1 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab1*sA*sB .*x .* y)    # Portfolio std.dev. for correl = 1

rab2 = rA*x + rB*y
sab2 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab2*sA*sB .*x .* y )    # Portfolio std.dev. for correl = .5

rab3 = rA*x + rB*y
sab3 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab3*sA*sB .*x .* y )      # Portfolio std.dev. for correl = 1

and so on for other possible values of correlation.

我想使用 PGFPlotsX 在相同的 rs 轴上绘制所有 3 条曲线。但我只得到一个情节,即 rrab1。

如果我检查我的 std.dev。向量 我发现我无法获得不同的向量。

sab1 == sab2 == sab3   # outputs true

using DataFrames
s = DataFrame()
s.x = sab1
s.y = sab3
s

outputs:
21 rows × 2 columns
    x   y
    Float64 Float64
1   0.38    0.38
2   0.361   0.361
3   0.342   0.342
4   0.323   0.323
5   0.304   0.304
6   0.285   0.285
7   0.266   0.266
8   0.247   0.247
9   0.228   0.228
10  0.209   0.209
11  0.19    0.19
12  0.171   0.171
13  0.152   0.152
14  0.133   0.133
15  0.114   0.114
16  0.095   0.095
17  0.076   0.076
18  0.057   0.057
19  0.038   0.038
20  0.019   0.019
21  0.0     0.0

也就是说,尽管相关性不同,但所有 s 向量都是相同的。我是 Julia 的新手,一定缺少一些基本的东西。

标签: julia

解决方案


我认为 Bogumil 的评论应该是一个答案 - 这不是真正的 Julia 问题,而是直接来自您的假设。你从:

sA = .00

然后计算:

sab1 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab1*sA*sB .*x .* y)   
sab2 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab2*sA*sB .*x .* y ) 
sab3 = sqrt.(sA^2*x.^2 + sB^2*y.^2 - 2*rrab3*sA*sB .*x .* y )    

sA = 0.0通过使用因此所有项乘以sA消失的事实来简化这一点:

sab1 = sqrt.(sB^2*y.^2)   
sab2 = sqrt.(sB^2*y.^2) 
sab3 = sqrt.(sB^2*y.^2)    

确实

julia> sqrt.(sB^2 * y.^2)
21-element Vector{Float64}:
 0.38
 0.361
 0.342
 0.323
 0.304
 0.28500000000000003
 0.26599999999999996
 0.24700000000000003
 0.22799999999999998
 0.20900000000000002
 0.19
 0.17099999999999999
 0.152
 0.13299999999999998
 0.11400000000000002
 0.095
 0.07599999999999998
 0.05700000000000001
 0.03799999999999999
 0.019000000000000017
 0.0

推荐阅读