बहुपद विपरीत चर की गणना


11

कृपया मुझे यह बताएं कि ऑर्थोगोनल बहुपद विपरीत चर के सेट में एक श्रेणीगत चर (कारक) को कुशलतापूर्वक कैसे प्राप्त किया जाए।

कई प्रकार के विपरीत चर (जैसे विचलन, सरल, हेल्मर्ट, आदि) के लिए पास है:

  1. इसके विपरीत गुणांक मैट्रिक्स के प्रकार के अनुरूप बनाएं।
  2. व्युत्क्रम या सामान्यीकरण-व्युत्क्रम इसे कोडों के मैट्रिक्स को प्राप्त करने के लिए।

उदाहरण के लिए:

Suppose there is 3-group factor and we want to recode it into a set of deviation  contrast variables.
The last group is treated as reference. Then the contrast coefficients matrix L is

         Group1 Group2 Group3
   var1   2/3   -1/3   -1/3
   var2  -1/3    2/3   -1/3

and ginv(L) is then the sought-for coding matrix

         var1 var2
  Group1   1    0
  Group2   0    1
  Group3  -1   -1

(We might also use inv(L) instead if we add a row for constant, equal to 1/3, at the head of L.)

क्या बहुपद विपरीत चर प्राप्त करने के लिए समान या समान तरीका है? यदि हाँ, तो मैट्रिक्स C कैसा दिखेगा और इसे कैसे बनाया जाएगा? यदि नहीं, तो अभी भी बहुपद विपरीत चर को कुशलतापूर्वक गणना करने का तरीका क्या है (जैसे मैट्रिक्स बीजगणित द्वारा)।


1
मैंने आपके प्रश्न को (संयोगवश) सत्यापित करने के बाद देखा कि मेरे पोस्ट qr.qy()के qr.Q(qr(X))बाद की मैन्युअल गणनाओं से सहमत हैं Q%*%z। मुझे वास्तव में आश्चर्य होता है कि क्या मैं आपके प्रश्न का उत्तर दोहराए बिना कुछ अलग कह सकता हूं। मैं वास्तव में एक बुरा काम नहीं करना चाहता ... मैंने आपके लिए बहुत सम्मान करने के लिए आपके पोस्ट पढ़े हैं ... अगर मुझे कोड के बिना अवधारणा को व्यक्त करने का एक तरीका मिल जाए, तो बस वैचारिक रूप से रैखिक बीजगणित के माध्यम से, मैं इसमें वापस आता हूँ। हालांकि, मुझे खुशी है कि आपने कुछ मूल्य के मुद्दे की मेरी खोज की। शुभकामनाएं, टोनी।
एंटोनी परेलाडा

@Antoni, धन्यवाद। मेरा उद्देश्य इसे (SPSS में, इसके सिंटैक्स द्वारा) कोड करने में सक्षम होना है। क्या यह पता लगाना संभव है कि आप जिन कार्यों का उल्लेख करते हैं, वे कैसे काम करते हैं?
ttnphns

जवाबों:


5

इस विषय पर अपनी पूर्व पोस्ट के लिए एक तर्क के रूप में मैं कुछ अस्थायी (यद्यपि अपूर्ण) रैखिक बीजगणित और संबंधित आर कार्यों के पीछे कार्यों की खोज को साझा करना चाहता हूं। यह कार्य प्रगति पर होना चाहिए।

QRuAe11uI2uuTx

यहाँ छवि विवरण दर्ज करें

परिणामी प्रक्षेपण के रूप में व्यक्त किया जा सकता है

sign(xi=x1)×x[1000]+[x1x2x3xm]

वेक्टर मैट्रिक्स में कॉलम वैक्टर बीच के अंतर को दर्शाता है जिसे हम विघटित करना चाहते हैं और वैक्टर , जो " " द्वारा निर्धारित उप-भाग या "दर्पण" के प्रतिबिंब के अनुरूप है ।एक्स वाई यूvxAyu

LAPACK द्वारा उपयोग की गई विधि हाउसहोल्डर रिफ्लेक्टरों में पहली प्रविष्टि के भंडारण की आवश्यकता को में बदलकर उन्हें मुक्त करती है । सदिश से को साथ सामान्य करने के बजाय , यह सिर्फ मुट्ठी प्रविष्टि है जिसे में परिवर्तित किया जाता है ; फिर भी, ये नए वैक्टर - उन्हें हैं, अभी भी एक दिशात्मक वैक्टर के रूप में उपयोग किया जा सकता है।वी यू यू = 1 1 w1vuu=11w

विधि की सुंदरता यह है कि उस को a अपघटन में दिए जाने पर ऊपरी त्रिकोणीय है, हम वास्तव में इन रिफ्लेक्टर्स के साथ भरने के लिए विकर्ण के नीचे में तत्वों का लाभ उठा सकते हैं । शुक्र है, इन वैक्टरों में अग्रणी प्रविष्टियाँ सभी बराबर , मैट्रिक्स के "विवादित" विकर्ण में एक समस्या को रोकती हैं: यह जानते हुए कि वे सभी उन्हें शामिल करने की आवश्यकता नहीं है, और की प्रविष्टियों के लिए विकर्ण उत्पन्न कर सकते हैं ।RQR0Rw11R

फ़ंक्शन में "कॉम्पैक्ट क्यूआर" मैट्रिक्स को "संशोधित" रिफ्लेक्टर के लिए qr()$qrमोटे तौर पर मैट्रिक्स और निचले त्रिकोणीय "भंडारण" मैट्रिक्स के अतिरिक्त के रूप में समझा जा सकता है ।R

हाउसहोल्डर प्रोजेक्शन में अभी भी फॉर्म , लेकिन हम ( ) के साथ काम नहीं करेंगे , बल्कि एक वेक्टर के साथ , जिनमें से केवल पहली प्रविष्टि होना दोषी है , औरI2uuTxux=1w1

(1)I2uuTx=I2wwwTwx=I2wwTw2x

एक यह मान लेगा कि विकर्ण या नीचे इन परावर्तकों को स्टोर करना ठीक रहेगा , की पहली प्रविष्टि को छोड़कर , और इसे एक दिन कहें। हालांकि, चीजें कभी इतनी आसान नहीं होती हैं। इसके बजाय जो विकर्ण के नीचे संग्रहीत किया जाता है, वह का संयोजन है और हाउसहोल्डर परिवर्तन में गुणांकों (1) के रूप में व्यक्त किया गया है, जैसे कि, को परिभाषित करना :wR1qr()$qrwtau

रिफ्लेक्टर=w/τRQRτ=wTw2=w2 , रिफ्लेक्टरों को रूप में व्यक्त किया जा सकता है। । ये "परावर्तक" वैक्टर तथाकथित "कॉम्पैक्ट " में ठीक नीचे संग्रहीत होते हैं ।reflectors=w/τRQR

अब हम vectors से एक डिग्री दूर हैं , और पहली प्रविष्टि अब नहीं है , इसलिए "रिफ़्लेक्टर" वैक्टर की पहली प्रविष्टि को बाहर करने पर जोर देने के बाद आउटपुट को उन्हें पुनर्स्थापित करने के लिए कुंजी को शामिल करना होगा। में सब कुछ फिट । तो क्या हम आउटपुट में मान देख रहे हैं ? खैर, ऐसा नहीं है कि यह अनुमान के मुताबिक होगा। इसके बजाय (जहाँ यह कुंजी संग्रहीत है) के आउटपुट में हम ।1 τw1qr()qr()$qrτqr()$qrauxρ=reflectors22=wTwτ2/2

तो नीचे लाल रंग में तैयार, हम "रिफ्लेक्टर" ( ) देखते हैं, उनकी पहली प्रविष्टि को छोड़कर।w/τ

यहाँ छवि विवरण दर्ज करें

सभी कोड यहाँ है , लेकिन चूंकि यह उत्तर कोडिंग और रैखिक बीजगणित के प्रतिच्छेदन के बारे में है, इसलिए मैं आउटपुट को पेस्ट करूँगा:


options(scipen=999)
set.seed(13)
(X = matrix(c(rnorm(16)), nrow=4, byrow=F))
           [,1]      [,2]       [,3]       [,4]
[1,]  0.5543269 1.1425261 -0.3653828 -1.3609845
[2,] -0.2802719 0.4155261  1.1051443 -1.8560272
[3,]  1.7751634 1.2295066 -1.0935940 -0.4398554
[4,]  0.1873201 0.2366797  0.4618709 -0.1939469

अब मैंने फंक्शन House()को इस प्रकार लिखा है:

   House = function(A){
    Q = diag(nrow(A))
    reflectors = matrix(0,nrow=nrow(A),ncol=ncol(A))
    for(r in 1:(nrow(A) - 1)){ 
        # We will apply Householder to progressively the columns in A, decreasing 1 element at a time.
        x = A[r:nrow(A), r] 
        # We now get the vector v, starting with first entry = norm-2 of x[i] times 1
        # The sign is to avoid computational issues
        first = (sign(x[1]) * sqrt(sum(x^2))) +  x[1]
        # We get the rest of v, which is x unchanged, since e1 = [1, 0, 0, ..., 0]
        # We go the the last column / row, hence the if statement:
        v = if(length(x) > 1){c(first, x[2:length(x)])}else{v = c(first)}
        # Now we make the first entry unitary:
        w = v/first
        # Tau will be used in the Householder transform, so here it goes:
        t = as.numeric(t(w)%*%w) / 2
        # And the "reflectors" are stored as in the R qr()$qr function:
        reflectors[r: nrow(A), r] = w/t
        # The Householder tranformation is:
        I = diag(length(r:nrow(A)))
        H.transf = I - 1/t * (w %*% t(w))
        H_i  = diag(nrow(A))
        H_i[r:nrow(A),r:ncol(A)] = H.transf
        # And we apply the Householder reflection - we left multiply the entire A or Q
        A = H_i %*% A
        Q = H_i %*% Q
    }
    DECOMPOSITION = list("Q"= t(Q), "R"= round(A,7), 
            "compact Q as in qr()$qr"=  
            ((A*upper.tri(A,diag=T))+(reflectors*lower.tri(reflectors,diag=F))), 
            "reflectors" = reflectors,
            "rho"=c(apply(reflectors[,1:(ncol(reflectors)- 1)], 2, 
                function(x) sum(x^2) / 2), A[nrow(A),ncol(A)]))
    return(DECOMPOSITION)
}

आइए ouput की तुलना आर-निर्मित कार्यों से करें। पहले घर का बना समारोह:

(H = House(X))
$Q
            [,1]        [,2]       [,3]       [,4]
[1,] -0.29329367 -0.73996967  0.5382474  0.2769719
[2,]  0.14829152 -0.65124800 -0.5656093 -0.4837063
[3,] -0.93923665  0.13835611 -0.1947321 -0.2465187
[4,] -0.09911084 -0.09580458 -0.5936794  0.7928072

$R
          [,1]       [,2]       [,3]      [,4]
[1,] -1.890006 -1.4517318  1.2524151 0.5562856
[2,]  0.000000 -0.9686105 -0.6449056 2.1735456
[3,]  0.000000  0.0000000 -0.8829916 0.5180361
[4,]  0.000000  0.0000000  0.0000000 0.4754876

$`compact Q as in qr()$qr`
            [,1]        [,2]       [,3]      [,4]
[1,] -1.89000649 -1.45173183  1.2524151 0.5562856
[2,] -0.14829152 -0.96861050 -0.6449056 2.1735456
[3,]  0.93923665 -0.67574886 -0.8829916 0.5180361
[4,]  0.09911084  0.03909742  0.6235799 0.4754876

$reflectors
            [,1]        [,2]      [,3] [,4]
[1,]  1.29329367  0.00000000 0.0000000    0
[2,] -0.14829152  1.73609434 0.0000000    0
[3,]  0.93923665 -0.67574886 1.7817597    0
[4,]  0.09911084  0.03909742 0.6235799    0

$rho
[1] 1.2932937 1.7360943 1.7817597 0.4754876

आर कार्यों के लिए:

qr.Q(qr(X))
            [,1]        [,2]       [,3]       [,4]
[1,] -0.29329367 -0.73996967  0.5382474  0.2769719
[2,]  0.14829152 -0.65124800 -0.5656093 -0.4837063
[3,] -0.93923665  0.13835611 -0.1947321 -0.2465187
[4,] -0.09911084 -0.09580458 -0.5936794  0.7928072

qr.R(qr(X))
          [,1]       [,2]       [,3]      [,4]
[1,] -1.890006 -1.4517318  1.2524151 0.5562856
[2,]  0.000000 -0.9686105 -0.6449056 2.1735456
[3,]  0.000000  0.0000000 -0.8829916 0.5180361
[4,]  0.000000  0.0000000  0.0000000 0.4754876

$qr
            [,1]        [,2]       [,3]      [,4]
[1,] -1.89000649 -1.45173183  1.2524151 0.5562856
[2,] -0.14829152 -0.96861050 -0.6449056 2.1735456
[3,]  0.93923665 -0.67574886 -0.8829916 0.5180361
[4,]  0.09911084  0.03909742  0.6235799 0.4754876

$qraux
[1] 1.2932937 1.7360943 1.7817597 0.4754876

+1 लेकिन मुझे लगता है कि SPSS ने क्यूआर अपघटन (या मैं गलत हूं?) के लिए फ़ंक्शन में बनाया है, इसलिए यदि उद्देश्य SPSS में कुछ कोड करना है जिसमें QR शामिल है तो शायद ही क्यूआर एल्गोरिदम को मैन्युअल रूप से लागू करने की आवश्यकता है।
अमीबा

@amoeba धन्यवाद। चूंकि हम अकेले हैं, मुझे आप में विश्वास दिलाता हूं: ओपी के लेखक को मुझसे किसी भी तरह की मदद की आवश्यकता नहीं है, लेकिन मैंने (विशेष रूप से) आर के कार्यों के बारे में उनकी टिप्पणी (उपरोक्त) ली, जो मैंने साथी पोस्ट में उपयोग किए थे एक व्यक्तिगत मज़ेदार चुनौती के रूप में, क्योंकि इससे मुझे एहसास हुआ कि आर कार्यों में निर्मित क्यूआर फ़ैक्टराइजेशन के इन कार्यान्वयनों को मैंने कितना कम समझा। चूँकि मेरे लिए किसी भी अच्छे संदर्भ को खोजना या किसी भी उत्तर को प्राप्त करना अविश्वसनीय रूप से कठिन था, जो वास्तव में ऑनलाइन पूछकर फर्क पड़ता है, मैं पोस्ट कर रहा हूं कि मुझे जितना ध्यान देना चाहिए था उससे अधिक प्रयास के बाद मिला।
एंटोनी परेलाडा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.