2010-09-02 13 views
7

को प्रतिस्थापित करने के लिए इंटरपोलेशन का उपयोग करना मेरे पास सेल सरणी है जिसमें प्रत्येक पंक्ति पंक्ति के रूप में मानों का अनुक्रम होता है। अनुक्रमों में NaN द्वारा प्रतिनिधित्व किए गए कुछ अनुपलब्ध मान होते हैं।MATLAB: गुम मूल्यों (NaN)

मैं कुछ प्रकार की इंटरपोलेशन विधि का उपयोग करके सभी नाएन को प्रतिस्थापित करना चाहता हूं, मैं MATLAB में यह कैसे कर सकता हूं? मैं इन लापता मूल्यों से निपटने के तरीके के बारे में अन्य सुझावों के लिए भी खुला हूं। एक

प्रतिक्रियाओं के आधार पर, मुझे लगता है कि हो गया है:

समस्या को वर्णन करने के लिए इस नमूना डेटा पर विचार करें:

seq = {randn(1,10); randn(1,7); randn(1,8)}; 
for i=1:numel(seq) 
    %# simulate some missing values 
    ind = rand(size(seq{i})) < 0.2; 
    seq{i}(ind) = nan; 
end 

जिसके परिणामस्वरूप दृश्यों:

seq{1} 
ans = 
    -0.50782  -0.32058   NaN  -3.0292  -0.45701  1.2424   NaN  0.93373   NaN -0.029006 
seq{2} 
ans = 
     0.18245  -1.5651 -0.084539  1.6039  0.098348  0.041374  -0.73417 
seq{3} 
ans = 
      NaN   NaN  0.42639  -0.37281  -0.23645  2.0237  -2.2584  2.2294 

संपादित करें भ्रम: जाहिर है, मैं यादृच्छिक डेटा के साथ काम नहीं कर रहा हूं, ऊपर दिखाया गया कोड बस एक उदाहरण है कि कैसे टी वह डेटा संरचित है।

वास्तविक डेटा संसाधित संकेतों का कुछ रूप है। समस्या यह है कि विश्लेषण के दौरान, अगर समाधान में गुम मूल्य होते हैं, तो मेरे समाधान विफल हो जाएंगे, इसलिए फ़िल्टरिंग/इंटरपोलेशन की आवश्यकता (मैं पहले से ही प्रत्येक अनुक्रम के माध्य का उपयोग करके रिक्त स्थान भरने के लिए विचार कर रहा हूं, लेकिन मैं कुछ अधिक शक्तिशाली की उम्मीद कर रहा हूं)

+1

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

+1

@ जुडोविल: मुझे लगता है कि वह सिर्फ यादृच्छिक डेटा का उपयोग लोगों के साथ खेलने के लिए एक उदाहरण के रूप में कर रहा था। – gnovice

उत्तर

8

ठीक है, यदि आप समय-श्रृंखला डेटा के साथ काम कर रहे हैं तो आप Matlab के इंटरपोलेशन फ़ंक्शन में निर्मित का उपयोग कर सकते हैं।

इस तरह कुछ ऐसा आपकी स्थिति के लिए काम करना चाहिए, लेकिन आपको इसे थोड़ा सा बनाना होगा ... यानी। यदि आपके पास बराबर स्पेस नमूना नहीं है तो आपको times लाइन को संशोधित करने की आवश्यकता होगी।

nseq = cell(size(seq)) 
for i = 1:numel(seq) 
    times = 1:length(seq{i}); 
    mask = ~isnan(seq{i}); 
    nseq{i} = seq{i}; 
    nseq{i}(~mask) = interp1(times(mask), seq{i}(mask), times(~mask)); 

end 

आप interp1 के विकल्प के साथ चारों ओर खेलने के लिए यह पता लगाने की कि कौन सा अपनी स्थिति के लिए सबसे अच्छा काम की आवश्यकता होगी।

+0

धन्यवाद, मेरे मामले में मुझे 'टाइम्स' वेक्टर बदलने की जरूरत है क्योंकि मान 3 सेकंड के आधार पर – Dave

+0

पर दर्ज किए जाते हैं ... अब जब मैं इसके बारे में सोच रहा हूं, तब तक कोई फर्क नहीं पड़ता जब तक कि अनुक्रम समान रूप से नमूनेबद्ध होते हैं , है न? – Dave

+0

हाँ, जब तक वे समान रूप से नमूने हैं, वास्तव में इससे कोई फर्क नहीं पड़ता ... लेकिन मैं यथासंभव स्पष्ट होने की कोशिश करता हूं। – JudoWill

0

जूडोविल कहते हैं, आपको अपने डेटा के बीच कुछ प्रकार के रिश्ते को मानने की आवश्यकता है।

एक छोटा विकल्प आपकी कुल श्रृंखला के माध्य की गणना करना होगा, और गायब डेटा के लिए उन लोगों का उपयोग करना होगा। एक और मामूली विकल्प एन पिछले और एन अगले मूल्यों का मतलब लेना होगा।

लेकिन इस से बहुत सावधान रहें: यदि आप डेटा खो रहे हैं, तो आप अपने लापता डेटा को बनाने के लिए सामान्य रूप से उन लापता डेटा से निपटने के लिए बेहतर होते हैं जो आपके विश्लेषण को खराब कर सकते हैं।

1

यदि आपके पास सिस्टम पहचान टूलबॉक्स तक पहुंच है, तो आप गुम मूल्यों का अनुमान लगाने के लिए MISDATA फ़ंक्शन का उपयोग कर सकते हैं। documentation के अनुसार:

यह आदेश रैखिक लापता मूल्यों interpolates पहले मॉडल अनुमान लगाने के लिए। फिर, यह पर इस मॉडल का उपयोग पैरामीटर को पुनर्निर्मित डेटा से प्राप्त पूर्वानुमान त्रुटियों को कम करके पैरामीटर के रूप में अनुपलब्ध डेटा का अनुमान लगाता है।

असल में एल्गोरिदम अपेक्षाकृत अधिकतमकरण (ईएम) एल्गोरिदम के समान तरीके से गायब डेटा का आकलन करने और मॉडलों का आकलन करने के बीच वैकल्पिक होता है।

मॉडल अनुमानित रैखिक मॉडल idmodel (एआर/एआरएक्स/..) हो सकता है, या यदि दिया गया है, तो डिफ़ॉल्ट-ऑर्डर स्टेट-स्पेस मॉडल का उपयोग करता है।

यहाँ कैसे अपने डेटा पर लागू करने का है:

for i=1:numel(seq) 
    dat = misdata(iddata(seq{i}(:))); 
    seq{i} = dat.OutputData; 
end 
6

मैं inpaint_nans, प्रक्षेप द्वारा 1-डी या 2-डी मैट्रिक्स में नेन तत्वों को बदलने के लिए डिजाइन उपकरण का प्रयोग करेंगे।

seq{1} = [-0.50782 -0.32058 NaN -3.0292 -0.45701 1.2424 NaN 0.93373 NaN -0.029006]; 
seq{2} = [0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417]; 
seq{3} = [NaN NaN 0.42639 -0.37281 -0.23645 2.0237]; 

for i = 1:3 
    seq{i} = inpaint_nans(seq{i}); 
end 

seq{:} 
ans = 
-0.50782 -0.32058 -2.0724 -3.0292 -0.45701 1.2424 1.4528 0.93373 0.44482 -0.029006 

ans = 
    0.18245 -1.5651 -0.084539 1.6039 0.098348 0.041374 -0.73417 

ans = 
    2.0248 1.2256 0.42639 -0.37281 -0.23645 2.0237 
+1

+1 धन्यवाद वुडचिप्स – Dave

0

निम्नलिखित उदाहरण पर विचार

एक्स = यह

में कुछ Nx1 सरणी वाई = एफ (एक्स) कुछ Nans साथ तो

X1 = एक्स (लगता है (~ isnan का उपयोग (वाई))); वाई 1 = वाई (ढूंढें (~ इस्नान (वाई)));

अब सभी एक्स

0

उपयोग griddedInterpolant

वहाँ

भी interp1 जैसे कुछ अन्य समारोहों में एक्स 1 और सभी मूल्यों की गणना करने के लिए Y1 से अधिक अंतर्वेशन। घुमावदार भूखंडों के लिए लापता डेटा खोजने के लिए सबसे अच्छी विधि है।