The correlation problem

Given three random variables A, B, C and given bounds on two of the three correlation coefficients:

-0.2 <= ρ_AB <= -0.1
0.4 <= ρ_BC <=  0.5

We can use the following property of the correlations to determine bounds on ρ_AC by solving a SDP:

|  1    ρ_AB  ρ_AC |
| ρ_AB   1    ρ_BC |  ≽ 0
| ρ_AC  ρ_BC   1   |
using JuMP
import SCS

function example_corr_sdp()
    model = Model(SCS.Optimizer)
    set_silent(model)
    @variable(model, X[1:3, 1:3], PSD)
    # Diagonal is 1s
    @constraint(model, X[1, 1] == 1)
    @constraint(model, X[2, 2] == 1)
    @constraint(model, X[3, 3] == 1)
    # Bounds on the known correlations
    @constraint(model, X[1, 2] >= -0.2)
    @constraint(model, X[1, 2] <= -0.1)
    @constraint(model, X[2, 3] >=  0.4)
    @constraint(model, X[2, 3] <=  0.5)
    # Find upper bound
    @objective(model, Max, X[1, 3])
    optimize!(model)
    println("An upper bound for X[1, 3] is $(value(X[1, 3]))")
    # Find lower bound
    @objective(model, Min, X[1, 3])
    optimize!(model)
    println("A lower bound for X[1, 3] is $(value(X[1, 3]))")
    return
end

example_corr_sdp()
An upper bound for X[1, 3] is 0.8719210492774392
A lower bound for X[1, 3] is -0.9779977729237779

View this file on Github.


This page was generated using Literate.jl.