दिलचस्प पोस्ट
ValueTypes ऑब्जेक्ट (संदर्भ प्रकार) से कैसे प्राप्त करते हैं और अभी भी ValueTypes हैं? चयन तत्व की सामग्री को सॉर्ट करने के लिए जावास्क्रिप्ट पायथन की स्ट्रिंग कंसैक्शन बनाम str.join कैसे धीमा है? सीएसएस: एक तत्व, कई तत्वों के लिए प्रभाव होवर करें? पासवर्ड एन्क्रिप्शन / डिक्रिप्शन कोड .नेट में जावा में दो सूची <स्ट्रिंग> के कुशल प्रतिच्छेदन? एंड्रॉइड में sendStickyBroadcast और sendBroadcast के बीच अंतर क्या है पॉसों और द्विपद यादृच्छिक संख्या उत्पन्न करने के लिए एल्गोरिदम? सी में एक समारोह के अंदर स्थिर चर अंदर MySQL में छोटे, छोटे, मध्यम, बड़े और अंतर में अंतर क्या है? libavcodec.so: पाठ पुनर्स्थापना है एक तेज चलती छवि स्लाइड शो बनाने के लिए जावास्क्रिप्ट? सूची करने के लिए <SubClass> कास्ट करने का सबसे कारगर तरीका <BaseClass> मैं क्लाउड में मैक्स में अधिकतम मैक्रो के साथ कैसे टल सकता हूं? क्यों "आयात *" खराब है?

कर्व के तहत क्षेत्र की गणना करें

मैं एक वक्र के तहत क्षेत्र की गणना करना चाहूंगा ताकि एक समारोह को परिभाषित किए बिना integrate() जैसे integrate()

मेरा डेटा इस रूप में दिखता है:

 Date Strike Volatility 2003-01-01 20 0.2 2003-01-01 30 0.3 2003-01-01 40 0.4 etc. 

मैंने अस्थिरता मुस्कुराहट को देखने के लिए plot(strike, volatility) रची। क्या इस प्लॉट "वक्र" को एकीकृत करने का एक तरीका है?

Solutions Collecting From Web of "कर्व के तहत क्षेत्र की गणना करें"

एयूसी बहुत सारे ट्रेपेज़ियम आंकड़े को देखकर बहुत आसानी से अनुमानित है, हर बार x_i , x_{i+1} , y{i+1} और y_i । चिड़ियाघर पैकेज के रोलमेन का उपयोग करके, आप यह कर सकते हैं:

 library(zoo) x <- 1:10 y <- 3*x+25 id <- order(x) AUC <- sum(diff(x[id])*rollmean(y[id],2)) 

सुनिश्चित करें कि आप x मानों को ऑर्डर करते हैं, या आपका परिणाम अर्थ नहीं होगा। यदि आपके पास y अक्ष के साथ कहीं नकारात्मक मान हैं, तो आपको यह पता लगाना होगा कि आप वक्र के नीचे क्षेत्र को किस प्रकार परिभाषित करना चाहते हैं, और तदनुसार समायोजित करें (जैसे abs() का प्रयोग करना)

आपके अनुवर्ती के बारे में: यदि आपके पास कोई औपचारिक कार्य नहीं है, तो आप इसे कैसे छान लेंगे? इसलिए यदि आपके पास केवल मान हैं, तो आप जिस चीज का अनुमान लगा सकते हैं वह एक निश्चित अभिन्न है यहां तक ​​कि अगर आपके पास आर में फ़ंक्शन है, तो आप केवल integrate() का उपयोग करके निश्चित समेकन की गणना कर सकते हैं। यदि आप इसे परिभाषित भी कर सकते हैं, तो औपचारिक कार्य केवल प्लॉट करना संभव है

बस अपने कार्यक्रम के लिए निम्नलिखित जोड़ें और आप वक्र के तहत क्षेत्र प्राप्त करेंगे:

 require(pracma) AUC = trapz(strike,volatility) 

से ?trapz :

यह दृष्टिकोण बेसपॉइंट x के साथ ट्रिपोज़ाइडल नियम का उपयोग करते हुए फ़ंक्शन को एकीकृत करने के लिए बिल्कुल सटीक मानता है।

तीन और विकल्प, जिनमें एक को एक पट्टी विधि का उपयोग कर और एक सिम्पसन के नियम का उपयोग कर शामिल है …

 # get data n <- 100 mean <- 50 sd <- 50 x <- seq(20, 80, length=n) y <- dnorm(x, mean, sd) *100 # using sintegral in Bolstad2 require(Bolstad2) sintegral(x,y)$int # using auc in MESS require(MESS) auc(x,y, type = 'spline') # using integrate.xy in sfsmisc require(sfsmisc) integrate.xy(x,y) 

ट्रेपेज़ोडायडल विधि स्पीन विधि से कम सटीक है, इसलिए MESS::auc ( Bolstad2::sintegral पद्धति का उपयोग करता है) या Bolstad2::sintegral (सिम्पसन के नियम का उपयोग करता है) संभवतः पसंदीदा होना चाहिए इन के DIY संस्करण (और क्वाड्रचर नियम का उपयोग करते हुए एक अतिरिक्त तरीका) यहां हैं: http://www.r-bloggers.com/one-dimensional-integrals/

ठीक है, तो मैं पार्टी में थोड़ी देर तक आती हूं लेकिन जवाबों से गुजर रहा हूं, समस्या के समाधान के लिए एक सादे हल। यहां, सरल और साफ हो जाता है:

 sum(diff(x) * (head(y,-1)+tail(y,-1)))/2 

ओपी के लिए समाधान तब पढ़ता है:

 sum(diff(strike) * (head(volatility,-1)+tail(volatility,-1)))/2 

यह प्रभावी रूप से "बाएं" और "दाएं" वाई-मानों की औसत ले कर trapezoidal विधि का उपयोग करके क्षेत्र की गणना करता है

एनबी: @जोरिस ने पहले ही बताई है कि आप एब्स abs(y) उपयोग कर सकते हैं यदि यह अधिक समझदारी पैदा करेगा

फार्माकोकाइनेटिक्स (पीके) की दुनिया में, विभिन्न प्रकार के एयूसी की गणना एक सामान्य और मौलिक काम है। फार्माकोटिक्स के लिए बहुत सारे एउसी गणनाएं हैं, जैसे कि

  • AUC0-t = AUC शून्य से समय तक टी
  • AUC0-last = AUC शून्य से अंतिम समय बिंदु तक (ऊपर के जैसा हो सकता है)
  • AUC0-inf = AUC शून्य से लेकर अनंत तक
  • AUCint = AUC एक समय अंतराल पर
  • AUCall = AUC पूरे समय अवधि के लिए जिसके लिए डेटा मौजूद है

फाइजर पर लोगों से अपेक्षाकृत नया पैकेज PKNCA है जो ये गणना करता है सबसे अच्छे पैकेज में से एक है। इसकी जांच – पड़ताल करें।

जॉरिस मेस का जवाब बहुत अच्छा था, लेकिन मैं अपने नमूनों से एनएएस को हटाने की कोशिश कर रहा था। यहाँ उनके साथ काम करने के लिए लिखा गया छोटा कार्य है:

 library(zoo) #for the rollmean function ###### #' Calculate the Area Under Curve of y~x #' #'@param y Your y values (measures ?) #'@param x Your x values (time ?) #'@param start : The first x value #'@param stop : The last x value #'@param na.stop : returns NA if one value is NA #'@param ex.na.stop : returns NA if the first or the last value is NA #' #'@examples #'myX = 1:5 #'myY = c(17, 25, NA, 35, 56) #'auc(myY, myX) #'auc(myY, myX, na.stop=TRUE) #'myY = c(17, 25, 28, 35, NA) #'auc(myY, myX, ex.na.stop=FALSE) auc = function(y, x, start=first(x), stop=last(x), na.stop=FALSE, ex.na.stop=TRUE){ if(all(is.na(y))) return(NA) bounds = which(x==start):which(x==stop) x=x[bounds] y=y[bounds] r = which(is.na(y)) if(length(r)>0){ if(na.stop==TRUE) return(NA) if(ex.na.stop==TRUE & (is.na(first(y)) | is.na(last(y)))) return(NA) if(is.na(last(y))) warning("Last value is NA, so this AUC is bad and you should feel bad", call. = FALSE) if(is.na(first(y))) warning("First value is NA, so this AUC is bad and you should feel bad", call. = FALSE) x = x[-r] y = y[-r] } sum(diff(x[order(x)])*rollmean(y[order(x)],2)) } 

तो मैं इसे अपने myDF$auc = apply(myDF, MARGIN=1, FUN=auc, x=c(0,5,10,15,20)) पर लागू होने के साथ प्रयोग करता हूं: myDF$auc = apply(myDF, MARGIN=1, FUN=auc, x=c(0,5,10,15,20))

आशा है कि यह मेरे जैसे noobs मदद कर सकते हैं 🙂

संपादित करें: जोड़ा सीमाएं

आप आरओसीआर पैकेज का उपयोग कर सकते हैं, जहां निम्न पंक्तियां आपको AUC देगी:

 pred <- prediction(classifier.labels, actual.labs) attributes(performance(pred, 'auc'))$y.values[[1]]