ฉันจะพอดีกับการถดถอยที่ จำกัด ใน R เพื่อให้สัมประสิทธิ์รวม = 1 ได้อย่างไร


36

ฉันเห็นการถดถอยที่มีข้อ จำกัด คล้ายกันที่นี่:

จำกัด การถดถอยเชิงเส้นผ่านจุดที่ระบุ

แต่ความต้องการของฉันแตกต่างกันเล็กน้อย ฉันต้องการค่าสัมประสิทธิ์ในการเพิ่มเป็น 1 โดยเฉพาะฉันกำลังถดถอยผลตอบแทนของ 1 ชุดแลกเปลี่ยนเงินตราต่างประเทศกับ 3 ชุดแลกเปลี่ยนเงินตราต่างประเทศอื่น ๆ เพื่อให้นักลงทุนสามารถแทนที่การสัมผัสกับชุดนั้นด้วยการรวมกันของชุดที่ 3 การจ่ายเงินสดจะต้องไม่เปลี่ยนแปลงและโดยเฉพาะอย่างยิ่ง (แต่ไม่บังคับ) ค่าสัมประสิทธิ์ควรเป็นค่าบวก

ฉันพยายามค้นหาการถดถอยแบบ จำกัด ใน R และ Google แต่โชคดีเล็กน้อย


คุณแน่ใจหรือไม่ว่านี่เป็นปัญหาการถดถอยที่ จำกัด ? เมื่อฉันอ่านคำถามคุณจะพบความสัมพันธ์ของรูปแบบ (หนึ่งชุด Forex) = (บวกฉันเข้าใจว่าเป็นคำที่สี่ที่แสดงถึงอัตราผลตอบแทนที่ปลอดภัยในขณะนั้น) นั่นเป็นอิสระจากการตัดสินใจลงทุน หากลูกค้าต้องการลงทุนในโดยใช้ ,และเป็นพร็อกซี่พวกเขาก็จะลงทุนใน ,ในและในβ 1 y 1 + β 2 y 2 + β 3 y 3 cy4β1y1+β2y2+β3y3cy 1 y 2 y 3 c β 1 y 1 c β 2 y 2 c β 3 y 3y4y1y2y3cβ1y1cβ2y2cβ3y3. นั่นไม่ได้เพิ่มความยุ่งยากพิเศษให้กับการถดถอยใช่ไหม?
whuber

มันเป็นเพราะถ้าคุณทำแบบนี้คุณจะพบว่า B1 + B2 + B3> 1 ในหลายกรณี (หรือ <1 ในคนอื่น ๆ ) นั่นเป็นเพราะสกุลเงินที่หนึ่งพยายามจำลองด้วย descriptors โดยทั่วไปจะมีความผันผวนที่ใหญ่กว่าหรือเล็กกว่าสกุลเงินอื่น ๆ ดังนั้นการถดถอยจะให้น้ำหนักที่ตอบสนองน้อยลงหรือใหญ่ขึ้น สิ่งนี้ต้องการนักลงทุนไม่ว่าจะลงทุนเต็มหรือใช้ประโยชน์ซึ่งฉันไม่ต้องการ สำหรับอัตราผลตอบแทนที่ปลอดภัย สิ่งที่เราพยายามทำคือการทำซ้ำชุดที่ 1 โดยใช้ตัวแปรอื่น ๆ การเป็นนักการเงินและไม่ใช่นักสถิติบางทีฉันอาจตั้งคำถามผิดไป
โทมัสบราวน์

เหตุผลในการรวมคำศัพท์สำหรับอัตราผลตอบแทนที่ปลอดภัยคือบางครั้งจะมีค่าสัมประสิทธิ์ที่ไม่ใช่ศูนย์ สันนิษฐานได้ว่าเครื่องมือที่ปลอดภัย (เงินฝากธนาคารข้ามคืน) มีให้สำหรับทุกคนในราคาที่ต่ำดังนั้นใครก็ตามที่เพิกเฉยต่อสิ่งนี้เนื่องจากองค์ประกอบของตะกร้าการลงทุน ทีนี้ถ้าสัมประสิทธิ์ไม่เพิ่มความเป็นเอกภาพอะไรล่ะ? เพียงแค่ลงทุนให้มากที่สุดเท่าที่คุณต้องการในสัดส่วนที่ประมาณการโดยการถดถอย
whuber

ใช่ ..... ง่ายเหมือนกัน ขอบคุณ ฉันรู้สึกงี่เง่านิดหน่อยฮ่าฮ่า
โทมัสบราวน์

1
ไม่โง่เลย เพียงแค่ถามคำถามนี้สะท้อนความคิดระดับสูง ฉันแค่ตรวจสอบความเข้าใจคำถามของคุณเองเพื่อให้แน่ใจว่าคุณได้รับคำตอบที่มีประสิทธิภาพ ไชโย
whuber

คำตอบ:


35

ถ้าผมเข้าใจอย่างถูกต้องรูปแบบของคุณคือ กับและ\คุณต้องย่อเล็กสุด ขึ้นอยู่กับข้อ จำกัด เหล่านี้ ชนิดของปัญหานี้เป็นที่รู้จักกันในการเขียนโปรแกรมการกำลังสองk π k = 1 π k0 ฉัน( Y i - ( π 1 X ฉัน1 + π 2 X ฉัน2 + π 3 X i 3 ) ) 2

Y=π1X1+π2X2+π3X3+ε,
kπk=1πk0
i(Yi(π1Xi1+π2Xi2+π3Xi3))2

นี่คือโค้ด R สองสามบรรทัดที่ให้ทางแก้ปัญหาที่เป็นไปได้ (คือคอลัมน์ของ, ค่าจริงของคือ 0.2, 0.3 และ 0.5)π kX1,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

ฉันไม่ทราบผลลัพธ์ใด ๆ เกี่ยวกับการแจกแจงเชิงซีมโทติคของการประมาณค่า ฯลฯ หากใครบางคนมีพอยน์เตอร์ฉันจะอยากรู้อยากเห็นบางอย่าง (ถ้าคุณต้องการฉันสามารถเปิดคำถามใหม่ได้)


คำถามที่รวดเร็วจริง ฉันไม่ควรจะลดความแปรปรวนให้น้อยที่สุดแทนที่จะเป็นผลรวม? นั่นไม่ใช่สิ่งที่การถดถอยทำเพื่อลดความแปรปรวนของกำลังสองของข้อผิดพลาดหรือไม่
โทมัสบราวน์

6
นี่คือเอลวิสที่ฉลาด แต่คุณไม่สามารถทำสิ่งเดียวกันให้สำเร็จได้โดยการคำนวณการถดถอยซ้ำอีกครั้ง? เช่นปล่อยให้ นั่นเทียบเท่ากับvarepsilon ประมาณการและข้อผิดพลาดมาตรฐานของตรงไปตรงมาในการคำนวณจากประมาณการและเมทริกซ์ var-covar ของและ\Y - X 3 = α 1 ( X 1 - X 3 ) + α 2 ( X 2 - X 3 ) + ε เธฉันα 1 α 2Y=α1X1+α2X2+(1α1α2)X3+εYX3=α1(X1X3)+α2(X2X3)+επiα1α2
whuber

6
@whuber ใช่ แต่มีข้อมูลที่มีเสียงดังมากขึ้นหรือด้วยบางส่วนใกล้กับคุณจะละเมิดข้อ จำกัด ได้อย่างง่ายดายซึ่งเป็นส่วน "ยาก" ของปัญหา 0 π k > 0πk0πk>0
Elvis

2
สัมประสิทธิ์เชิงบวกบอกให้คุณซื้อสกุลเงินต่างประเทศ สัมประสิทธิ์เชิงลบบอกให้คุณขายมัน หากคุณไม่ได้เป็นเจ้าของสกุลเงินนั้นแล้วคุณต้องยืมเพื่อที่จะขาย ("ขายชอร์ต") เนื่องจากการกู้ยืมแบบไม่ จำกัด สามารถทำให้ผู้คนเดือดร้อนจึงมีข้อ จำกัด เกี่ยวกับปริมาณการยืมและวิธีการชำระเงินสำหรับ ("ข้อกำหนดด้านหลักประกัน" และ "ต้นทุนการดำเนินการเกี่ยวกับเงินทุน" และ "การทำตลาดสู่ตลาด") ดังนั้นการยืมจึงเป็นไปได้ แต่มักจะหลีกเลี่ยงได้ยกเว้นผู้เล่นรายใหญ่ในตลาด
whuber

2
ขอบคุณมากสำหรับความช่วยเหลือทั้งหมด ที่จริงแล้วเพียงแค่ให้ความเห็นเกี่ยวกับตลาด FX โดยทั่วไปพวกเขาจะสั้นกว่าหุ้นหรือพันธบัตรได้ง่ายกว่าเพราะไม่ต้องยืมหุ้นก่อนขายสั้น หนึ่งเพียงแค่พลิกสกุลเงินส่วนและเศษ ดังนั้นตัวอย่างเช่นการขาย EURUSD และการขาย USDEUR เป็นการซื้อขายที่เทียบเท่ากันในแง่ของแผนกความเสี่ยง แต่แน่นอนว่าพวกเขาอยู่ในตำแหน่งที่ตรงกันข้าม นั่นเป็นเหตุผลว่าทำไม FX จึงเป็นสนามเด็กเล่นที่ยอดเยี่ยมสำหรับเทรดเดอร์เชิงปริมาณเพราะพวกเขาไม่ต้องกังวลกับความเสียดทานในทิศทางที่สำคัญกว่าในตลาดหุ้น
Thomas Browne

8

ดังที่ whuber กล่าวไว้หากคุณสนใจเฉพาะข้อ จำกัด ด้านความเท่าเทียมคุณสามารถใช้ฟังก์ชัน lm () มาตรฐานโดยเขียนแบบจำลองของคุณใหม่:

Y=α+β1X1+β2X2+β3X3+ϵ=α+β1X1+β2X2+(1β1β2)X3+ϵ=α+β1(X1X3)+β2(X2X3)+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))

ในกรณีข้างต้นโดย Matifou สิ่งที่จะป้องกันไม่ให้สัมประสิทธิ์ที่สามจากการเป็นลบ? ตัวอย่างเช่นมีค่าสัมประสิทธิ์ที่เหมาะสมที่สุดสำหรับและเราจะได้รับนั้นซึ่งแสดงถึงที่นี่ว่าค่าสัมประสิทธิ์ที่สามของเราเป็นลบและดังนั้นจึงไม่ถือตามของเรา การถดถอยที่ต้องการ β1=0.75β2=0.5(1β1β2)=0.25
AS

1
ขอบคุณ @AS ที่ชี้เรื่องนี้ออกมา อันที่จริงการแก้ปัญหานี้ใช้ได้เฉพาะกับข้อ จำกัด ความเสมอภาคไม่ใช่ความไม่เท่าเทียม ฉันแก้ไขข้อความตามนั้น
Matifou

1

เมื่อฉันเข้าใจโมเดลของคุณคุณกำลังค้นหา นั้น

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

ฉันพบวิธีที่ง่ายที่สุดในการจัดการกับปัญหาเหล่านี้คือการใช้คุณสมบัติการเชื่อมโยงของเมทริกซ์เพื่อจัดการเป็นฟังก์ชันของตัวแปรอื่น ๆb¯

เช่นเป็นหน้าที่ของผ่านการแปลงบล็อก{T_c}} ในกรณีของคุณด้านล่างเป็น1 นี่เราสามารถแยก nowns และ nknowns ของเรา b¯c¯Tc¯¯r1

b¯=[k0k1k2]=Tc¯¯c¯=[100010111][k0k1r]
ku
c¯=[k0k1r]=Su¯¯cu¯+Sk¯¯ck¯=[100100][k0k1]+[001]r
ในขณะที่ฉันสามารถรวมการแปลงที่แตกต่างกัน / บล็อกแยกที่ยุ่งยากกับโมเดลที่สลับซับซ้อนมากขึ้น บล็อกเหล่านี้อนุญาตให้แยกออกเป็นที่รู้จักและไม่ทราบ ˉ ˉ วี ¯ ยู = ˉ W
x¯¯Tc¯¯(Su¯¯cu¯+Sk¯¯ck¯)=y¯v¯¯=x¯¯Tc¯¯Su¯¯w¯=y¯x¯¯Tc¯¯Sk¯¯ck¯
ในที่สุดปัญหาอยู่ในรูปแบบที่คุ้นเคย
v¯¯cu¯=w¯

1

คำถามเก่า แต่เนื่องจากฉันประสบปัญหาเดียวกันฉันคิดว่าจะโพสต์ 2p ของฉัน ...

ใช้การเขียนโปรแกรมสมการกำลังสองตามที่ @Elvis แนะนำ แต่ใช้sqlinconจากแพ็คเกจpracma ฉันคิดว่าข้อดีเหนือกว่า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

ผลลัพธ์เดียวกับของ 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

แก้ไขเพื่อพยายามที่จะแก้ไขความคิดเห็นของ gung ต่อไปนี้เป็นคำอธิบายบางอย่าง sqlincon เลียนแบบ lsqlin ของmatlabซึ่งมีหน้าช่วยเหลือที่ดี นี่คือบิตที่เกี่ยวข้องกับการแก้ไขบางส่วน (เล็กน้อย) ของฉัน:

Xตัวคูณเมทริกซ์ระบุเป็นเมทริกซ์คู่ C แทนตัวคูณของโซลูชัน x ในนิพจน์ C * x - Y. C คือ M-by-N โดยที่ M คือจำนวนของสมการและ N คือจำนวนองค์ประกอบของ x

Yเวกเตอร์คงที่ที่ระบุเป็นเวกเตอร์ของคู่ Y แทนคำว่าค่าคงที่แบบเพิ่มเติมในนิพจน์ C * x - Y. Y คือ M-by-1 โดยที่ M คือจำนวนของสมการ

Aeq: เมทริกซ์จำกัดความเท่าเทียมกันเชิงเส้นระบุเป็นเมทริกซ์ของคู่ Aeq แสดงถึงสัมประสิทธิ์เชิงเส้นในข้อ จำกัด Aeq * x = beq Aeq มีขนาด Meq-by-N โดยที่ Meq คือจำนวนข้อ จำกัด และ N คือจำนวนองค์ประกอบของ x

beqเวกเตอร์ จำกัด ความเท่าเทียมกันเชิงเส้นที่ระบุเป็นเวกเตอร์ของคู่ beq แสดงถึงเวกเตอร์คงที่ในข้อ จำกัด Aeq * x = beq beq มีความยาว Meq โดยที่ Aeq คือ Meq-by-N

lbขอบเขตที่ต่ำกว่าซึ่งระบุเป็นเวกเตอร์ของคู่ lb หมายถึงขอบเขตที่ต่ำกว่าตามเข็มนาฬิกาในหน่วยปอนด์≤ x ≤ ub

ubขอบเขตบนระบุเป็นเวกเตอร์ของคู่ ub แสดงถึงขอบเขตบนทวนเข็มนาฬิกาในหน่วย lb ≤ x ≤ ub

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.