Làm thế nào để tôi phù hợp với hồi quy bị ràng buộc trong R sao cho hệ số tổng = 1?


36

Tôi thấy một hồi quy bị ràng buộc tương tự ở đây:

Hồi quy tuyến tính bị ràng buộc thông qua một điểm được chỉ định

nhưng yêu cầu của tôi là hơi khác nhau. Tôi cần các hệ số cộng thêm lên 1. Cụ thể, tôi đang hồi quy lợi nhuận của 1 chuỗi ngoại hối so với 3 chuỗi ngoại hối khác, để các nhà đầu tư có thể thay thế tiếp xúc của họ với chuỗi đó bằng sự kết hợp tiếp xúc với 3 chuỗi khác, nhưng tiền mặt không được thay đổi, và tốt nhất là (nhưng điều này không bắt buộc), các hệ số phải dương.

Tôi đã cố gắng tìm kiếm hồi quy bị ràng buộc trong R và Google nhưng với rất ít may mắn.


Bạn có chắc chắn đây là một vấn đề hồi quy bị ràng buộc? Khi tôi đọc câu hỏi, bạn tìm kiếm một mối quan hệ có dạng y4 (một Forex series) = β1y1+β2y2+β3y3 (cộng, tôi đoán, một nhiệm kỳ thứ tư đại diện cho một tỷ lệ hiện hành an toàn trở về). Điều đó độc lập với quyết định đầu tư. Nếu khách hàng muốn đầu tư c vốn trong y4 sử dụng y1 , y2 , và y3 như các proxy, sau đó họ sẽ chỉ đầu tư cβ1 trongy1 ,cβ2 trongy2 , vàcβ3 trongy3 . Điều đó thêm không có biến chứng đặc biệt cho hồi quy, phải không?
whuber

Điều này đúng bởi vì nếu bạn lập mô hình này, bạn sẽ thấy rằng B1 + B2 + B3> 1 trong nhiều trường hợp (hoặc <1 trong các trường hợp khác). Đó là bởi vì đồng tiền đang cố gắng sao chép với các mô tả thường sẽ có độ biến động lớn hơn hoặc nhỏ hơn so với các loại tiền tệ khác, và do đó, hồi quy sẽ cung cấp cho bạn trọng số nhỏ hơn hoặc lớn hơn. Điều này đòi hỏi nhà đầu tư không được đầu tư đầy đủ, hoặc tận dụng, điều mà tôi không muốn. Đối với tỷ lệ lợi nhuận an toàn không có. Tất cả những gì chúng tôi đang cố gắng làm là sao chép chuỗi1 bằng các biến khác. Là một người tài chính và không phải là một nhà thống kê có lẽ tôi đã đặt tên sai cho câu hỏi của tôi.
Thomas Browne

Lý do bao gồm một thuật ngữ cho tỷ lệ hoàn vốn an toàn là vì đôi khi nó sẽ có hệ số khác. Có lẽ, các công cụ an toàn (tiền gửi ngân hàng qua đêm) có sẵn cho mọi người với chi phí thấp, vì vậy bất kỳ ai bỏ qua đây là một thành phần trong giỏ đầu tư của họ có thể chọn kết hợp dưới mức tối ưu. Bây giờ, nếu các hệ số không thêm vào sự thống nhất, vậy thì sao? Chỉ cần đầu tư nhiều như bạn muốn theo tỷ lệ ước tính bằng hồi quy.
whuber

đúng ..... đơn giản như vậy. Cảm ơn. Tôi cảm thấy hơi ngớ ngẩn bây giờ haha.
Thomas Browne

1
Không ngớ ngẩn chút nào. Chỉ hỏi câu hỏi này phản ánh một mức độ cao của suy nghĩ. Tôi chỉ kiểm tra sự hiểu biết của riêng tôi về câu hỏi của bạn để đảm bảo bạn có câu trả lời hiệu quả. Chúc mừng.
whuber

Câu trả lời:


35

Nếu tôi hiểu đúng, mô hình của bạn là với Σ k π k = 1π k0 . Bạn cần giảm thiểu i ( Y i - ( π 1 X i 1 + π 2 X i 2 + π 3 X i

Y= =π1X1+π2X2+π3X3+ε,
Σkπk= =1πk0 chủ đề cho những ràng buộc này. Loại vấn đề này được gọi làlập trình bậc hai.
Σtôi(Ytôi-(π1Xtôi1+π2Xtôi2+π3Xtôi3))2

Ở đây một vài dòng mã R đưa ra giải pháp khả thi ( là các cột của , các giá trị thực của số π k là 0,2, 0,3 và 0,5).X1,X2,X3Xπk

> 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

Tôi không biết bất kỳ kết quả nào về phân phối tiệm cận của các công cụ ước tính, v.v. Nếu ai đó có con trỏ, tôi sẽ tò mò muốn lấy một số (nếu bạn muốn tôi có thể mở một câu hỏi mới về điều này).


Thật ra câu hỏi nhanh. Tôi có nên giảm thiểu phương sai thay vì tổng không? Không phải đó là những gì một hồi quy làm là giảm thiểu phương sai của bình phương sai số sao?
Thomas Browne

6
Điều này thật thông minh, Elvis, nhưng bạn không thể hoàn thành điều tương tự chỉ bằng cách xác định lại hồi quy? Ví dụ: đặt Điều đó tương đương với Y - X 3 = α 1 ( X 1 - X 3 ) + α 2 ( X 2 - X 3 )Y= =α1X1+α2X2+(1-α1-α2)X3+ε . Các ước tính và sai số chuẩn của π i rất đơn giản để tính toán từ các ước lượng và ma trận var-covar của α 1 α 2 . Y-X3= =α1(X1-X3)+α2(X2-X3)+επtôiα1α2
whuber

6
@whuber Có, nhưng với dữ liệu ồn ào hơn, hoặc với một số các gần 0 , bạn sẽ vi phạm một cách dễ dàng hạn chế π k > 0 , đó là "cứng" một phần của vấn đề. πk0πk>0
Elvis

2
Một hệ số dương cho bạn mua ngoại tệ; một hệ số âm cho bạn bán nó. Nếu bạn chưa sở hữu loại tiền đó, bạn cần phải vay để bán nó ("bán khống"). Bởi vì việc vay không hạn chế có thể khiến mọi người gặp rắc rối, có những hạn chế về số tiền vay và cách thức thanh toán ("yêu cầu ký quỹ" và "chi phí mang vốn" và "thủ tục đánh dấu thị trường"). Do đó, việc vay là có thể nhưng thường được tránh ngoại trừ bởi những người chơi lớn trên thị trường hoặc trừ khi nó mang lại lợi thế lớn.
whuber

2
Rất cám ơn tất cả sự giúp đỡ. Trên thực tế chỉ để nhận xét về thị trường ngoại hối nói chung, chúng dễ rút ngắn hơn so với cổ phiếu hoặc trái phiếu vì người ta không phải vay một cổ phiếu trước khi bán khống. Người ta chỉ cần lật các mẫu số và tử số. Vì vậy, ví dụ bán EURUSD và bán USDEUR là các giao dịch tương đương chính xác về mặt rủi ro, nhưng tất nhiên chúng hoàn toàn trái ngược nhau. Đó là lý do tại sao FX là một sân chơi tuyệt vời cho các nhà giao dịch số lượng vì họ không phải lo lắng nhiều về ma sát định hướng, điều quan trọng hơn nhiều trong cổ phiếu
Thomas Browne

8

Như được đề cập bởi whuber, nếu bạn chỉ quan tâm đến các ràng buộc đẳng thức, bạn cũng có thể chỉ sử dụng hàm lm () tiêu chuẩn bằng cách viết lại mô hình của mình:

Y= =α+β1X1+β2X2+β3X3+ε= =α+β1X1+β2X2+(1-β1-β2)X3+ε= =α+β1(X1-X3)+β2(X2-X3)+X3+ε

Nhưng điều này không đảm bảo rằng các ràng buộc bất bình đẳng của bạn được thỏa mãn! Tuy nhiên, trong trường hợp này, do đó, bạn nhận được kết quả chính xác giống như sử dụng ví dụ lập trình bậc hai ở trên (đặt X3 ở bên trái):

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,5(1-β1-β2)= =-0,25

1
Cảm ơn @AS đã chỉ ra điều này. Thật vậy, giải pháp này chỉ hoạt động cho các ràng buộc bình đẳng, không phải là bất bình đẳng. Tôi chỉnh sửa văn bản cho phù hợp.
Matifou

1

x¯¯b¯= =y¯
Σ[b¯]= =1

b¯

b¯c¯Tc¯¯r1

b¯= =[k0k1k2]= =Tc¯¯c¯= =[100010-1-11][k0k1r]
kbạn
c¯= =[k0k1r]= =Sbạn¯¯cbạn¯+Sk¯¯ck¯= =[100100][k0k1]+[001]r
x¯¯Tc¯¯(Sbạn¯¯cbạn¯+Sk¯¯ck¯)= =y¯v¯¯= =x¯¯Tc¯¯Sbạn¯¯w¯= =y¯-x¯¯Tc¯¯Sk¯¯ck¯
v¯¯cbạn¯= =w¯

1

Câu hỏi cũ nhưng vì tôi đang đối mặt với cùng một vấn đề nên tôi nghĩ sẽ đăng 2p của mình ...

Sử dụng lập trình bậc hai theo đề xuất của @Elvis nhưng sử dụng sqlincon từ gói pracma . Tôi nghĩ rằng lợi thế hơn quadrpog::solve.QPlà một giao diện người dùng đơn giản hơn để xác định các ràng buộc. (Trong thực tế, lsqlinconlà một bao bọc xung quanh solve.QP).

Thí dụ:

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

Kết quả tương tự như của Elvis:

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

EDIT Để cố gắng giải quyết bình luận của gung đây là một số lời giải thích. sqlincon mô phỏng matlab của lsqlin trong đó có một trang trợ giúp tốt đẹp. Đây là các bit có liên quan với một số chỉnh sửa (nhỏ) của tôi:

XMa trận số nhân, được chỉ định là ma trận nhân đôi. C đại diện cho cấp số nhân của nghiệm x trong biểu thức C * x - Y. C là M-by-N, trong đó M là số phương trình và N là số phần tử của x.

YVectơ không đổi, được chỉ định là một vectơ nhân đôi. Y đại diện cho thuật ngữ hằng số cộng trong biểu thức C * x - Y. Y là M-by-1, trong đó M là số phương trình.

Aeq: Ma trận ràng buộc đẳng thức tuyến tính, được chỉ định là ma trận nhân đôi. Aeq đại diện cho các hệ số tuyến tính trong các ràng buộc Aeq * x = beq. Aeq có kích thước Meq-by-N, trong đó Meq là số lượng ràng buộc và N là số phần tử của x

beqVectơ ràng buộc tuyến tính, được chỉ định là một vectơ nhân đôi. beq đại diện cho vectơ không đổi trong các ràng buộc Aeq * x = beq. beq có chiều dài Meq, trong đó Aeq là Meq-by-N.

lbGiới hạn dưới, được chỉ định là một vectơ tăng gấp đôi. lb đại diện cho giới hạn dưới theo phần tử theo lb ≤ x ≤ ub.

ubGiới hạn trên, được chỉ định là một vectơ đôi. ub đại diện cho giới hạn trên theo phần tử theo lb ≤ x ≤ ub.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.