मैं आर में एक विवश प्रतिगमन को कैसे फिट करूं ताकि गुणांक कुल = 1 हो?


36

मुझे यहाँ एक समान विवशता दिखाई देती है:

एक निर्दिष्ट बिंदु के माध्यम से रेखीय प्रतिगमन को विवश किया

लेकिन मेरी आवश्यकता थोड़ी अलग है। मुझे 1 में जोड़ने के लिए गुणांक की आवश्यकता है। विशेष रूप से मैं 3 अन्य विदेशी मुद्रा श्रृंखलाओं के खिलाफ 1 विदेशी मुद्रा श्रृंखला के रिटर्न को पुनः प्राप्त कर रहा हूं, ताकि निवेशक उस श्रृंखला के अपने एक्सपोजर को अन्य 3 के एक्सपोजर के संयोजन के साथ बदल सकें, लेकिन उनके नकद परिव्यय में परिवर्तन नहीं होना चाहिए, और अधिमानतः (लेकिन यह अनिवार्य नहीं है), गुणांक सकारात्मक होना चाहिए।

मैंने आर और गूगल में विवश प्रतिगमन के लिए खोज करने की कोशिश की है लेकिन कम भाग्य के साथ।


क्या आप सुनिश्चित हैं कि यह एक विवश प्रतिगमन समस्या है? जैसा कि मैंने सवाल पढ़ा है, आप प्रपत्र की एक रिश्ते की तलाश (एक विदेशी मुद्रा श्रृंखला) = β 1 y 1 + β 2 y 2 + β 3 y 3 (प्लस, मुझे लगता है, एक चौथे कार्यकाल के एक प्रचलित सुरक्षित दर का प्रतिनिधित्व वापसी)। यह निवेश निर्णय से स्वतंत्र है। एक ग्राहक निवेश करना चाहता है तो में राजधानी y 4 का उपयोग कर y 1 , y 2 , और y 3 प्रॉक्सी के रूप में है, तो वे सिर्फ निवेश करेगा βy4β1y1+β2y2+β3y3सीy4y1y2y3सीβ1 मेंy1 ,सीβ2 मेंy2 , औरcβ3 मेंy3 । यह प्रतिगमन में कोई विशेष जटिलता नहीं जोड़ता है?
whuber

ऐसा इसलिए होता है क्योंकि यदि आप इसे मॉडल करते हैं तो आप पाएंगे कि B1 + B2 + B3> 1 कई मामलों में (या <1 दूसरों में)। ऐसा इसलिए है क्योंकि एक मुद्रा जो वर्णनकर्ताओं के साथ दोहराने की कोशिश कर रहा है, उसमें आम तौर पर अन्य लोगों की तुलना में बड़ी या छोटी अस्थिरता होगी, और इसलिए प्रतिगमन आपको प्रतिक्रिया में छोटे या बड़े वजन देगा। इसके लिए निवेशक को या तो पूरी तरह से निवेश करने की जरूरत नहीं है, या लाभ उठाने की नहीं है, जो मुझे नहीं चाहिए। वापसी की सुरक्षित दर के लिए के रूप में। हम सभी अन्य वेरिएबल्स का उपयोग करके श्रृंखला 1 को दोहराने की कोशिश कर रहे हैं। एक वित्त व्यक्ति होने के नाते और एक सांख्यिकीविद् नहीं होने के कारण शायद मैंने अपने सवाल का गलत इस्तेमाल किया है।
थॉमस ब्राउन

सुरक्षित दर वापसी के लिए एक शब्द को शामिल करने का कारण यह है कि कभी-कभी इसमें गैर-गुणांक गुणांक होगा। संभवतः, सुरक्षित उपकरण (रातोंरात बैंक जमा) कम लागत पर सभी के लिए उपलब्ध हैं, इसलिए किसी को भी अपने निवेश की टोकरी के एक घटक के रूप में इसे अनदेखा करने से उप-संयोजन का चयन किया जा सकता है। अब, अगर गुणांक एकता में नहीं जुड़ते हैं, तो क्या? बस उतना ही निवेश करें जितना आप रिग्रेशन द्वारा अनुमानित अनुपात में चाहते हैं ।
whuber

सही ..... उस के रूप में सरल। धन्यवाद। मुझे अब थोड़ा हाहा सा लग रहा है।
थॉमस ब्राउन

1
मूर्खतापूर्ण नहीं है। इस सवाल को पूछने के लिए उच्च स्तर का विचार दर्शाता है। मैं सिर्फ यह सुनिश्चित करने के लिए आपके प्रश्न की अपनी समझ की जांच कर रहा था कि आपको एक प्रभावी उत्तर मिला है। चीयर्स।
whuber

जवाबों:


35

अगर मैं सही ढंग से समझ, अपने मॉडल है साथ Σ कश्मीर π कश्मीर = 1 और π कश्मीर0 । आप कम से कम करने की जरूरत है Σ मैं ( वाई मैं - ( π 1 एक्स मैं 1 + π 2 एक्स मैं 2 + π 3 एक्स मैं

Y=π1X1+π2X2+π3X3+ε,
kπk=1πकश्मीर0 ) इन बाधाओं के अधीन। इस तरह की समस्या कोद्विघात प्रोग्रामिंग केरूप में जाना जाताहै
Σमैं(Yमैं-(π1एक्समैं1+π2एक्समैं2+π3एक्समैं3))2

यहाँ आर कोड एक संभव समाधान देने के कुछ ही लाइन ( के स्तंभ हैं , के सही मूल्यों π कश्मीर 0.2, 0.3 और 0.5 रहे हैं)।एक्स1,एक्स2,एक्स3Xπकश्मीर

> 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
यह चतुर, एल्विस है, लेकिन क्या आप एक ही बात को केवल प्रतिगमन को फिर से जोड़कर पूरा नहीं कर सकते हैं? उदाहरण के लिए, चलो कि करने के लिए के समकक्ष वाई - एक्स 3 = α 1 ( एक्स 1 - एक्स 3 ) + α 2 ( एक्स 2 - एक्स 3 )Y=α1एक्स1+α2एक्स2+(1-α1-α2)एक्स3+ε । अनुमान और के मानक त्रुटियों π मैं अनुमान और के वर-COVAR मैट्रिक्स से गणना करने के लिए स्पष्ट हैं α 1 और α 2Y-एक्स3=α1(एक्स1-एक्स3)+α2(एक्स2-एक्स3)+επमैंα1α2
whuber

6
@whuber हाँ लेकिन अधिक शोर डेटा के साथ, या से कुछ के साथ के करीब 0 , आप आसानी से का उल्लंघन होता बाधा π कश्मीर > 0 है, जो समस्या का "हार्ड" हिस्सा है। πकश्मीर0πकश्मीर>0
एल्विस

2
एक सकारात्मक गुणांक आपको एक विदेशी मुद्रा खरीदने के लिए कहता है; एक नकारात्मक गुणांक आपको इसे बेचने के लिए कहता है। यदि आप पहले से ही उस मुद्रा के मालिक नहीं हैं, तो आपको इसे बेचने के लिए इसे उधार लेना होगा ("कम बिक्री")। क्योंकि अप्रतिबंधित उधार लोगों को परेशानी में डाल सकते हैं, उधार लेने की मात्रा और "मार्जिन आवश्यकताओं" और "पूंजी वहन लागत" और "मार्क-टू-मार्केट" प्रक्रियाओं के लिए भुगतान कैसे किया जाता है, इस पर अड़चनें हैं। इसलिए, उधार लेना संभव है, लेकिन अक्सर बाज़ारों में प्रमुख खिलाड़ियों को छोड़कर या जब तक कि यह बड़े फायदे नहीं देता है, से बचा जाता है।
whuber

2
सभी की मदद के लिए सभी को बहुत धन्यवाद। वास्तव में केवल एफएक्स बाजारों पर सामान्य रूप से टिप्पणी करने के लिए, वे इक्विटी या बॉन्ड की तुलना में कम करने के लिए अधिक आसान हैं क्योंकि किसी को शॉर्ट सेलिंग से पहले स्टॉक उधार लेने की आवश्यकता नहीं है। एक बस हर और अंश मुद्राओं को प्रवाहित करता है। इसलिए उदाहरण के लिए EURUSD को बेचना और USDEUR को बेचना जोखिम विभाग के संदर्भ में बिल्कुल समान ट्रेड हैं, लेकिन वे निश्चित रूप से विपरीत पदों पर हैं। यही कारण है कि एफएक्स क्वांट व्यापारियों के लिए एक ऐसा महान खेल का मैदान है क्योंकि उन्हें दिशात्मक घर्षणों के बारे में ज्यादा चिंता करने की जरूरत नहीं है जो इक्विटी में बहुत अधिक महत्वपूर्ण हैं
थॉमस ब्राउन

8

जैसा कि व्हीबर द्वारा उल्लेख किया गया है, यदि आप केवल समानता की बाधाओं में रुचि रखते हैं, तो आप अपने मॉडल को फिर से लिखकर केवल मानक एलएम () फ़ंक्शन का उपयोग कर सकते हैं:

Y=α+β1एक्स1+β2एक्स2+β3एक्स3+ε=α+β1एक्स1+β2एक्स2+(1-β1-β2)एक्स3+ε=α+β1(एक्स1-एक्स3)+β2(एक्स2-एक्स3)+एक्स3+ε

लेकिन यह इस बात की गारंटी नहीं है कि आपकी असमानता बाधाओं से संतुष्ट है! इस मामले में, यह हालांकि है, इसलिए आपको ऊपर दिए गए द्विघात प्रोग्रामिंग उदाहरण का उपयोग करने के समान परिणाम मिलता है (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.5(1-β1-β2)=-0.25

1
यह इंगित करने के लिए @AS धन्यवाद। वास्तव में, यह समाधान केवल समानता की बाधाओं के लिए काम करता है, असमानता वाले लोगों के लिए नहीं। मैंने तदनुसार पाठ संपादित किया।
Matifou

1

एक्स¯¯¯=y¯
Σ[¯]=1

¯

उदाहरण के लिए ] यहाँ हम हमारे अलग कर सकते हैं कश्मीर nowns और¯सी¯टीसी¯¯आर1

¯=[कश्मीर0कश्मीर1कश्मीर2]=टीसी¯¯सी¯=[100010-1-11][कश्मीर0कश्मीर1आर]
कश्मीरयू
सी¯=[कश्मीर0कश्मीर1आर]=एसयू¯¯सीयू¯+एसकश्मीर¯¯सीकश्मीर¯=[100100][कश्मीर0कश्मीर1]+[001]आर
एक्स¯¯टीसी¯¯(एसयू¯¯सीयू¯+एसकश्मीर¯¯सीकश्मीर¯)=y¯v¯¯=एक्स¯¯टीसी¯¯एसयू¯¯w¯=y¯-एक्स¯¯टीसी¯¯एसकश्मीर¯¯सीकश्मीर¯
v¯¯सीयू¯=w¯

1

पुराना सवाल है, लेकिन जब से मैं उसी समस्या का सामना कर रहा हूँ मैंने सोचा कि मैं अपना 2p पोस्ट करूँ ...

@ एल्विस द्वारा सुझाए गए द्विघात प्रोग्रामिंग का उपयोग करें लेकिन प्रकर्मा पैकेज से sqlincon का उपयोग करें । मुझे लगता है कि बाधाओं को निर्दिष्ट करने के लिए अधिक लाभ एक सरल उपयोगकर्ता इंटरफ़ेस है। (वास्तव में, चारों ओर एक आवरण है )।quadrpog::solve.QPlsqlinconsolve.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

संपादित करें यहाँ कुछ स्पष्टीकरण के लिए गोंग की टिप्पणी को संबोधित करने का प्रयास करें । sqlincon ने matlab के lsqlin का अनुकरण किया जिसमें एक अच्छा सहायता पृष्ठ है। यहाँ प्रासंगिक बिट्स के साथ कुछ (मामूली) मेरे संपादन हैं:

Xगुणक मैट्रिक्स, युगल के मैट्रिक्स के रूप में निर्दिष्ट। C, अभिव्यक्ति x * Y में C हल x के गुणक का प्रतिनिधित्व करता है। 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, represents x ub represents lb में कम सीमा वाले तत्व का प्रतिनिधित्व करता है।

ubऊपरी सीमा, युगल के वेक्टर के रूप में निर्दिष्ट। ub lb ≤ x। ub में ऊपरी सीमा तत्व को दर्शाता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.