如何在R中拟合约束回归,以使系数total = 1?


36

我在这里看到类似的约束回归:

通过指定点的约束线性回归

但我的要求略有不同。我需要将这些系数相加为1。具体而言,我正在将1个外汇系列的收益与其他3个外汇系列的收益进行回归,以便投资者可以用对其他3个外汇系列的组合代替他们对该系列的风险敞口,但是现金支出一定不能改变,而且最好(但这不是强制性的),系数应该为正。

我试图在R和Google中搜索约束回归,但是运气不佳。


您确定这是约束回归问题吗?因为我读的问题,你所寻求的形式的关系ÿ4(一个外汇系列)= β1个ÿ1个+β2ÿ2+β3ÿ3(另外,我相信,代表的现行安全率四分之一术语返回)。这与投资决策无关。如果客户希望投资C资本ÿ4使用ÿ1个ÿ2ÿ3作为代理,那么他们只会投资Cβ1个ÿ1个Cβ2ÿ2,和Cβ3ÿ3。那不会给回归增加任何特殊的复杂性,不是吗?
Whuber

这样做是因为,如果对此进行建模,您会发现在许多情况下B1 + B2 + B3> 1(在其他情况下为<1)。那是因为一种试图用描述符复制的货币通常会比其他货币具有更大或更小的波动性,因此回归将为您提供更大或更小的权重。这就要求投资者要么不被完全投资,要么不利用我不想要的杠杆。至于安全收益率没有。我们要做的就是使用其他变量复制series1。作为财务人员而不是统计学家,也许我把我的问题弄错了。
Thomas Browne 2012年

包含安全收益率的术语的原因是,有时它将具有非零系数。据推测,每个人都能以较低的成本获得安全的工具(隔夜银行存款),因此,任何将其作为投资篮成分的人都可以选择次优组合。现在,如果系数不加1,那又如何呢?只需在回归估计的比例中进行任意投资即可。
whuber

对.....就这么简单。谢谢。我现在觉得有点傻哈哈。
Thomas Browne 2012年

1
一点都不傻。仅问这个问题就反映出很高的思想水平。我只是检查自己对问题的理解,以确保您得到有效的答案。干杯。
Whuber

Answers:


35

如果正确地明白你的模型是 Σ ķ π ķ = 1π ķ0。您需要尽量减少 ΣŸ - π 1 X 1 + π 2 X 2 + π 3 X

ÿ=π1个X1个+π2X2+π3X3+ε
ķπķ=1个πķ0 受这些约束。这种问题称为二次规划
一世ÿ一世-π1个X一世1个+π2X一世2+π3X一世32

这里的ř码给人一种可能的解决方案的几个线(是的列,所述的真值π ķ是0.2,0.3和0.5)。X1个X2X3Xπķ

> library("quadprog");
> X <- matrix(runif(300), ncol=3)
> Y <- X %*% c(0.2,0.3,0.5) + rnorm(100, sd=0.2)
> Rinv <- solve(chol(t(X) %*% X));
> C <- cbind(rep(1,3), diag(3))
> b <- c(1,rep(0,3))
> d <- t(Y) %*% X  
> solve.QP(Dmat = Rinv, factorized = TRUE, dvec = d, Amat = C, bvec = b, meq = 1)
$solution
[1] 0.2049587 0.3098867 0.4851546

$value
[1] -16.0402

$unconstrained.solution
[1] 0.2295507 0.3217405 0.5002459

$iterations
[1] 2 0

$Lagrangian
[1] 1.454517 0.000000 0.000000 0.000000

$iact
[1] 1

我不知道估计量的渐近分布等的任何结果。如果有人有指针,我会很好奇地得到一些(如果您希望我可以就此提出一个新的问题)。


其实很简单。我不应该最小化方差而不是总和吗?回归不是使误差平方的方差最小化吗?
Thomas Browne

6
ÿ=α1个X1个+α2X2+1个-α1个-α2X3+εÿ-X3=α1个X1个-X3+α2X2-X3+επ一世α1个α2

6
πķ0πķ>0

2
正系数告诉您购买外币;负系数告诉您出售它。如果您尚未拥有该货币,则需要借入该货币才能出售(“卖空”)。由于无限制的借贷会给人们带来麻烦,因此对借贷的金额及其支付方式存在一些限制(“保证金要求”和“资本账面成本”以及“按市值计价”程序)。因此,借款是可能的,但通常会被市场中的主要参与者所避免或除非它具有很大的优势,否则通常会避免借款。
Whuber

2
非常感谢大家的帮助。实际上,实际上只是为了评论外汇市场,它们比股票或债券更容易做空,因为人们不必在卖空前借入股票。只需翻转分母和分子货币。因此,例如,就风险部门而言,卖出EURUSD和卖出USDEUR是完全等效的交易,但它们当然是完全相反的头寸。这就是为什么外汇交易市场对于量化交易者如此之大的原因,因为他们不必担心定向摩擦,这在股票中更为重要
Thomas Browne 2012年

8

如whuber所述,如果您仅对相等约束感兴趣,则还可以通过重写模型来使用标准lm()函数:

ÿ=α+β1个X1个+β2X2+β3X3+ϵ=α+β1个X1个+β2X2+1个-β1个-β2X3+ϵ=α+β1个X1个-X3+β2X2-X3+X3+ϵ

但这不能保证您的不平等约束得到满足!但是,在这种情况下,您得到的结果与上述二次编程示例完全相同(将X3放在左侧):

X <- matrix(runif(300), ncol=3)
Y <- X %*% c(0.2,0.3,0.5) + rnorm(100, sd=0.2)
X1 <- X[,1]; X2 <-X[,2]; X3 <- X[,3]
lm(Y-X3~-1+I(X1-X3)+I(X2-X3))

β1个=0.75β2=0.51个-β1个-β2=-0.25

1
感谢@AS指出这一点。实际上,此解决方案仅适用于平等约束,而不适用于不平等约束。我相应地编辑了文本。
Matifou

1

X¯¯b¯=ÿ¯
[b¯]=1个

b¯

b¯C¯ŤC¯¯[R1个

b¯=[ķ0ķ1个ķ2]=ŤC¯¯C¯=[1个0001个0-1个-1个1个][ķ0ķ1个[R]
ķü
C¯=[ķ0ķ1个[R]=小号ü¯¯Cü¯+小号ķ¯¯Cķ¯=[1个001个00][ķ0ķ1个]+[001个][R
X¯¯ŤC¯¯小号ü¯¯Cü¯+小号ķ¯¯Cķ¯=ÿ¯v¯¯=X¯¯ŤC¯¯小号ü¯¯w¯=ÿ¯-X¯¯ŤC¯¯小号ķ¯¯Cķ¯
v¯¯Cü¯=w¯

1

老问题了,但是由于我遇到了同样的问题,我想发布2p ...

通过@Elvis的建议,但使用使用二次规划sqlinconpracma包。我认为,这样做的好处quadrpog::solve.QP是可以使用更简单的用户界面来指定约束。(实际上lsqlincon是的包装器solve.QP)。

例:

library(pracma)

set.seed(1234)

# Test data
X <- matrix(runif(300), ncol=3)
Y <- X %*% c(0.2, 0.3, 0.5) + rnorm(100, sd=0.2)

# Equality constraint: We want the sum of the coefficients to be 1.
# I.e. Aeq x == beq  
Aeq <- matrix(rep(1, ncol(X)), nrow= 1)
beq <- c(1)

# Lower and upper bounds of the parameters, i.e [0, 1]
lb <- rep(0, ncol(X))
ub <- rep(1, ncol(X))

# And solve:
lsqlincon(X, Y, Aeq= Aeq, beq= beq, lb= lb, ub= ub)

[1] 0.1583139 0.3304708 0.5112153

与猫王的结果相同:

library(quadprog)
Rinv <- solve(chol(t(X) %*% X));
C <- cbind(rep(1,3), diag(3))
b <- c(1,rep(0,3))
d <- t(Y) %*% X  
solve.QP(Dmat = Rinv, factorized = TRUE, dvec = d, Amat = C, bvec = b, meq = 1)$solution

编辑为了尝试解决gung的评论,这里有一些解释。sqlincon模拟了matlab的lsqlin,它具有一个不错的帮助页面。这是我的一些(较小)编辑的相关信息:

X乘数矩阵,指定为双精度矩阵。C表示表达式C * x-Y中解x的乘数。C为M×N,其中M为方程式数,N为x的元素数。

Y常数向量,指定为双精度向量。Y表示表达式C * x-Y中的加法常数项。Y为M×1,其中M为方程式数。

Aeq:线性相等约束矩阵,指定为双精度矩阵。Aeq表示约束Aeq * x = beq中的线性系数。Aeq的大小为Meq-by-N,其中Meq是约束的数量,N是x的元素数量

beq线性相等约束向量,指定为双精度向量。beq表示约束Aeq * x = beq中的常数向量。beq的长度为Meq,其中Aeq为Meq-N。

lb下限,指定为double的向量。lb表示元素下限,以lb≤x≤ub为单位。

ub上限,指定为double的向量。ub表示元素上限,以lb≤x≤ub为单位。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.