2015-06-30 16 views
5

poly आर में फ़ंक्शन के साथ, मैं का मूल्यांकन बहुविकल्पीय बहुपद कैसे कर सकता हूं?आप आरआई पॉली() मूल्यांकन (या "पूर्वानुमान") बहुविकल्पीय नए डेटा (ऑर्थोगोनल या कच्चे) कैसे बनाते हैं?

  • इस पोस्ट में कुल 4 प्रश्न हैं, जो नीचे दिए गए हैं।
  • मैं poly()-आउटपुट ऑब्जेक्ट (ऑर्थोगोनल या कच्चे बहुपद) के आउटपुट का मूल्यांकन करने की मांग कर रहा हूं। इस तरह मुझे मेरे मॉडल मैट्रिक्स की तरह एक पंक्ति उत्पन्न करने के लिए बहुपदों का उपयोग करने की क्षमता मिलती है जिसका उपयोग मैं परिणाम का मूल्यांकन करने के लिए कर सकता हूं (यानी, मैं परीक्षण डेटा मानों को poly() कॉल के माध्यम से धक्का देना चाहता हूं ताकि यह हो सके मेरे प्रतिगमन के विधि मैट्रिक्स की एक पंक्ति के समान मूल्यांकन किया गया)।
  • मेरी पृष्ठभूमि: मैं आर, आर के poly(), और आर के प्रतिगमन दिनचर्या के लिए अपेक्षाकृत नया हूं।
  • मैं कई दृष्टिकोण की कोशिश की है और प्रत्येक के साथ मदद की सराहना करेंगे:

(ए): predict

इस विधि के साथ सीधा दृष्टिकोण विफल रहा है, जाहिरा तौर पर की कुछ अप्रत्याशित वर्ग की वजह से इनपुट मुझे पता है कि इन विशेष x1 & x2 मान, कॉललाइनर होने के नाते, सामान्य फिट के लिए आदर्श नहीं हैं (मैं बस predict मशीनरी परिचालन प्राप्त करने की कोशिश कर रहा हूं)। predict का उपयोग this SO पोस्ट से प्रेरित था। (क्यू 1) क्या इस बहुपद का मूल्यांकन करने के लिए सीधे predict विधि को कॉल करना संभव है?

> x1 = seq(1, 10, by=0.2) 
> x2 = seq(1.1,10.1,by=0.2) 
> t = poly(cbind(x1,x2),degree=2,raw=T) 
> predict(t,newdata=data.frame(x1=2.03,x2=2.03)) 
Error in UseMethod("predict") : 
    no applicable method for 'predict' applied to an object of class "c('matrix', 'double', 'numeric')" 

(बी) डायरेक्ट मूल्यांकन केवल कच्चे बहुआयामी पद (ओर्थोगोनल नहीं)

(ए) के कारण के लिए काम करता है, मैं पाली के लिए एक सीधा कॉल के साथ एक समाधान की कोशिश की()। कच्चे बहुपदों के लिए, मैं इसे काम करने के लिए प्राप्त कर सकता था, लेकिन मुझे प्रत्येक संबंधित चर के लिए डेटा दोहराना पड़ा। निम्नलिखित शो (1) एकल डेटा बिंदु के साथ विफलता, (2) मूल्य दोहराने के साथ सफलता। (Q2) क्या कच्चे poly() को सही तरीके से मूल्यांकन करने के लिए दूसरी सूची में डेटा की अनावश्यक दोहराने से बचने का कोई तरीका है?

> poly(cbind(x1=c(2.03),x2=c(2.13)),degree=2,raw=T) 
Error in `colnames<-`(`*tmp*`, value = apply(z, 1L, function(x) paste(x, : 
    attempt to set 'colnames' on an object with less than two dimensions 

> poly(cbind(x1=c(2.03,2.03),x2=c(2.13,2.13)),degree=3,raw=T) 
     1.0 2.0  3.0 0.1 1.1  2.1 0.2  1.2  0.3 
[1,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597 
[2,] 2.03 4.1209 8.365427 2.13 4.3239 8.777517 4.5369 9.209907 9.663597 
attr(,"degree") 
[1] 1 2 3 1 2 3 2 3 3 

अगर मैं ओर्थोगोनल बहुआयामी पद के साथ एक समान प्रचुरता से सूचीबद्ध-डेटा तरीके का प्रयास करें, मैं "अरे, अपने डेटा की निरर्थक!" उठाना त्रुटि (जो मैं भी करता हूं अगर मैं केवल एक बार प्रत्येक चर के मूल्य को सूचीबद्ध करता हूं)। (क्यू 3) क्या poly() पर सीधी कॉल के माध्यम से बहुविकल्पीय ऑर्थोगोनल बहुपदों का मूल्यांकन करना संभव है?

> poly(cbind(x1=c(2.03, 2.03),x2=c(2.13, 2.13)),degree=2) 
Error in poly(dots[[1L]], degree, raw = raw) : 
    'degree' must be less than number of unique points 

(सी) असमर्थता मल्टीवेरिएट ओर्थोगोनल बहुआयामी पद अंत में, मुझे पता है predict.poly करने के लिए एक coefs इनपुट चर है कि वहाँ हूँ से अल्फा & आदर्श गुणांकों को निकालने के लिए।मैं समझता हूं कि coefs ऑर्थोगोनल बहुपद फिट से अल्फा और मानक मान आउटपुट होना है। हालांकि, मैं केवल univariate बहुपद फिट से निकालने में सक्षम हूं ... जब मैं multivariate ऑर्थोगोनल (या कच्चा) फिट करता हूं, poly से वापसी मान कोफ नहीं है। (Q4) alpha और norm गुणांक निकालने के लिए poly() को ऑर्थोगोनल बहुपद फिट के लिए multivariate डेटा पर निकालना संभव है?

> t = poly(cbind(x1),degree=2) # univariate orthog poly --> WORKS 
> attributes(t)$coefs 
$alpha 
[1] 5.5 5.5 

$norm2 
[1] 1.000 46.000 324.300 1826.458 


> t = poly(cbind(x1,x2),degree=2) # multivariate orthog poly --> DOES NOT WORK 
> attributes(t)$coefs 
NULL 

अगर मैं स्पष्टीकरण दे सकता हूं तो कृपया मुझे बताएं। आप जो भी मदद कर सकते हैं उसके लिए कृपया धन्यवाद।

+1

मैं आर-सहायता मेलिंग सूची आप nabble http के माध्यम से पढ़ सकते हैं जो करने के लिए एक प्रासंगिक पोस्ट कर दिया है: //r.789695.n4 .nabble.com/भविष्यवाणी-पाली के लिए मल्टीवेरिएट-डेटा-tp4709718.html – user20637

उत्तर

1

रिकॉर्ड के लिए, ऐसा लगता है कि यह तय किया गया है

> x1 = seq(1, 10, by=0.2) 
> x2 = seq(1.1,10.1,by=0.2) 
> t = poly(cbind(x1,x2),degree=2,raw=T) 
> 
> class(t) # has a class now 
[1] "poly" "matrix" 
> 
> # does not throw error 
> predict(t, newdata = cbind(x1,x2)[1:2, ])              
    1.0 2.0 0.1 1.1 0.2 
[1,] 1.0 1.00 1.1 1.10 1.21 
[2,] 1.2 1.44 1.3 1.56 1.69 
attr(,"degree") 
[1] 1 2 1 2 2 
attr(,"class") 
[1] "poly" "matrix" 
> 
> # and gives the same 
> t[1:2, ] 
    1.0 2.0 0.1 1.1 0.2 
[1,] 1.0 1.00 1.1 1.10 1.21 
[2,] 1.2 1.44 1.3 1.56 1.69 
> 
> sessionInfo() 
R version 3.4.1 (2017-06-30) 
Platform: x86_64-w64-mingw32/x64 (64-bit) 
Running under: Windows >= 8 x64 (build 9200) 
संबंधित मुद्दे