एक ग्राफ में घाटियों की तलाश कैसे करें?


10

मैं कुछ जीनोमिक कवरेज डेटा की जांच कर रहा हूं जो मूल रूप से पूर्णांक की एक लंबी सूची (कुछ मिलियन मान) है, प्रत्येक कह रहा है कि जीनोम में यह स्थिति कितनी अच्छी तरह (या "गहरी") कवर की गई है।

मैं इस डेटा में "घाटियों" की तलाश करना चाहता हूं, अर्थात्, ऐसे क्षेत्र जो अपने आसपास के वातावरण की तुलना में "कम" हैं।

ध्यान दें कि मैं जिन घाटियों की तलाश कर रहा हूं उनका आकार 50 ठिकानों से लेकर कुछ हजारों तक हो सकता है।

उन घाटियों को खोजने के लिए आप किस तरह के प्रतिमानों का उपयोग करने की सलाह देंगे?

अपडेट करें

डेटा के लिए कुछ चित्रमय उदाहरण: वैकल्पिक शब्द वैकल्पिक शब्द

अद्यतन २

परिभाषित करना कि घाटी क्या है निश्चित रूप से एक सवाल है जिसके साथ मैं संघर्ष कर रहा हूं। ये मेरे लिए स्पष्ट हैं: वैकल्पिक शब्द वैकल्पिक शब्द

लेकिन कुछ और जटिल स्थितियां हैं। सामान्य तौर पर, मेरे विचार में 3 मानदंड हैं: 1. वैश्विक औसत के संबंध में खिड़की में (औसत? अधिकतम?) कवरेज। 2. खिड़की (...) खिड़की में अपने आसपास के संबंध में कवरेज। 3. खिड़की कितनी बड़ी है: अगर मुझे बहुत कम समय के लिए बहुत कम कवरेज दिखाई देती है तो यह दिलचस्प है, अगर मुझे बहुत कम समय के लिए बहुत कम कवरेज दिखाई देता है, तो यह भी दिलचस्प है, अगर मुझे थोड़े समय के लिए मामूली कम कवरेज दिखाई देता है, तो यह वास्तव में दिलचस्प नहीं है , लेकिन अगर मुझे लंबे समय के लिए मामूली कम कवरेज दिखाई देता है - यह है .. तो यह sapn की लंबाई का संयोजन है और यह कवरेज है। अब यह है, उच्च मैं कवरेज को होने देता हूं और अभी भी इसे घाटी मानता हूं।

धन्यवाद,

डेव


क्या आप एक छोटा डेटा नमूना प्रदान कर सकते हैं?
शेन

@ शेन अपडेट देखें
डेविड बी

@ डेविड धन्यवाद। जैसा कि दोनों उत्तर स्पष्ट करते हैं, समय श्रृंखला विश्लेषण यहां लागू किया जा सकता है क्योंकि आपने टिप्पणियों का आदेश दिया है।
शेन

यह इस तरह का उत्तर देना कठिन है कि आप क्या देख रहे हैं। क्या आप उन भूखंडों पर अंक प्राप्त कर सकते हैं जिन्हें आप कैप्चर करना चाहते हैं? आप "घाटी" को क्या मानते हैं? कितना कम जाना पड़ता है और आप क्या देख रहे हैं? प्रश्न, यानी थ्रेसहोल्ड और इस तरह की जानकारी के बिना समाधान तैयार करना कठिन है।
फाल्मरी

@ शेन ♦ धन्यवाद। जैसा कि मुझे समय-श्रृंखला विश्लेषण के साथ भी कोई अनुभव नहीं है, क्या आप कुछ बिंदुओं को छोड़ सकते हैं जहां मुझे शुरू करना चाहिए?
डेविड बी

जवाबों:


5

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

डेटा का एक मूविंग एवरेज लें, एक उचित आकार की विंडो का उपयोग करके (मुझे लगता है कि यह आपके ऊपर निर्भर है कि वह कितना चौड़ा है)।

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

ऐसा करने के लिए आप बेतरतीब ढंग से अपने डेटा (जैसे का उपयोग करके sample()) के मूल्यों को स्वैप करते हैं और अपने स्वैप किए गए डेटा के लिए चलती औसत को पुनर्गणना करते हैं।

इस अंतिम मार्ग को बार-बार उच्च मात्रा में (> 5000) दोहराएं और इन परीक्षणों के सभी औसत को संग्रहीत करें। तो अनिवार्य रूप से आपके पास 5000 लाइनों के साथ एक मैट्रिक्स होगा, एक परीक्षण, प्रत्येक उस परीक्षण के लिए चलती औसत वाले।

प्रत्येक स्तंभ के लिए इस बिंदु पर आप 5% (या 1% या जो भी आप चाहते हैं) मात्रात्मक चुनते हैं, वह मूल्य है जिसके तहत यादृच्छिक डेटा के साधनों का केवल 5% निहित है।

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

बेशक, यह ध्यान में रखते हुए कि न तो यह और न ही कोई अन्य गणितीय पद्धति आपको कभी भी जैविक महत्व का संकेत दे सकती है, हालांकि मुझे यकीन है कि आप इसके बारे में अच्छी तरह से जानते हैं।

EDIT - एक उदाहरण

require(ares) # for the ma (moving average) function

# Some data with peaks and throughs 
values <- cos(0.12 * 1:100) + 0.3 * rnorm(100) 
plot(values, t="l")

# Calculate the moving average with a window of 10 points 
mov.avg <- ma(values, 1, 10, FALSE)

numSwaps <- 1000    
mov.avg.swp <- matrix(0, nrow=numSwaps, ncol=length(mov.avg))

# The swapping may take a while, so we display a progress bar 
prog <- txtProgressBar(0, numSwaps, style=3)

for (i in 1:numSwaps)
{
# Swap the data
val.swp <- sample(values)
# Calculate the moving average
mov.avg.swp[i,] <- ma(val.swp, 1, 10, FALSE)
setTxtProgressBar(prog, i)
}

# Now find the 1% and 5% quantiles for each column
limits.1 <- apply(mov.avg.swp, 2, quantile, 0.01, na.rm=T)
limits.5 <- apply(mov.avg.swp, 2, quantile, 0.05, na.rm=T)

# Plot the limits
points(limits.5, t="l", col="orange", lwd=2)
points(limits.1, t="l", col="red", lwd=2)

यह आपको रेखांकन को क्षेत्रों को खोजने की अनुमति देगा, लेकिन आप आसानी से इनका उपयोग कर सकते हैं which(values>limits.5)


जाहिर है कि आप चलती औसत की तुलना में कुछ और का उपयोग करके एक ही दृष्टिकोण लागू कर सकते हैं, यह सिर्फ एक विचार देने के लिए था।
निको

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

@ डेविड बी: बेशक, आप एक वैश्विक सीमा का उपयोग कर सकते हैं और यह शायद आपको कुछ गणना समय बचाएगा। मुझे लगता है कि वैश्विक औसत के 1/3 की तरह कुछ चुनना एक शुरुआत हो सकती है। यह स्वैपिंग प्रक्रिया शायद अधिक सहायक है यदि आप चलती औसत की तुलना में कुछ अन्य आंकड़ों का उपयोग करते हैं, तो यह ज्यादातर एक विचार देने के लिए था। वैसे भी चलती औसत आसपास के खाते में ले जाएगी, उदाहरण में यह 10 बिंदुओं की खिड़की को ध्यान में रखेगा।
निको

4

मैं इन आंकड़ों से पूरी तरह अनभिज्ञ हूं, लेकिन यह मानते हुए कि डेटा का आदेश दिया जाता है (समय में नहीं, लेकिन स्थिति से?) यह समय श्रृंखला विधियों का उपयोग करने के लिए समझ में आता है। डेटा में टेम्पोरल क्लस्टर्स की पहचान करने के लिए बहुत सारे तरीके हैं। आम तौर पर उनका उपयोग उच्च मूल्यों को खोजने के लिए किया जाता है, लेकिन एक साथ समूहीकृत कम मूल्यों के लिए उपयोग किया जा सकता है। मैं यहाँ स्कैन आँकड़ों के बारे में सोच रहा हूँ, गिनती के आंकड़ों में संचयी योग आँकड़े (और अन्य) का उपयोग बीमारी के प्रकोप का पता लगाने के लिए किया जाता है। इन विधियों के उदाहरण निगरानी पैकेज और DCluster पैकेज में हैं।


@ cxr आपकी प्रतिक्रिया के लिए धन्यवाद। मेरे पास एक नज़र है surveillanceऔर DCluster , लेकिन क्या आप कृपया थोड़ा और विशिष्ट हो सकते हैं? वे दोनों अपेक्षाकृत बड़े पैकेज हैं और उनका उद्देश्य काफी विशिष्ट है। मुझे यकीन नहीं है कि कहां से शुरू करना है।
डेविड बी

2

इसके लिए कई विकल्प हैं, लेकिन एक अच्छा एक: आप पैकेजmsExtrema में फ़ंक्शन का उपयोग कर सकते हैं ।msProcess

संपादित करें:

वित्तीय प्रदर्शन विश्लेषण में, इस तरह के विश्लेषण को अक्सर "ड्रॉडाउन" अवधारणा का उपयोग करके किया जाता है। PerformanceAnalyticsपैकेज कुछ है इन घाटियों को खोजने के लिए उपयोगी कार्यों । यदि आप अपनी टिप्पणियों को समय श्रृंखला के रूप में मानते हैं तो आप यहां उसी एल्गोरिथ्म का उपयोग कर सकते हैं।

यहां कुछ उदाहरण दिए गए हैं कि आप इसे अपने डेटा पर कैसे लागू कर सकते हैं (जहां "तिथियां" अप्रासंगिक हैं, लेकिन केवल ऑर्डर करने के लिए उपयोग की जाती हैं), लेकिन zooऑब्जेक्ट में पहला तत्व आपका डेटा होगा:

library(PerformanceAnalytics)
x <- zoo(cumsum(rnorm(50)), as.Date(1:50))
findDrawdowns(x)
table.Drawdowns(x)
chart.Drawdown(x)

धन्यवाद शेन, लेकिन ऐसा लगता है कि स्थानीय मिनीमा (या मैक्सिमा) - यानी एक क्षेत्र में एक बिंदु। मेरा डेटा (किसी भी बायोलॉजिकल डेटा के रूप में) IS NOISY> मैं वास्तव में पॉइंट मिनिमा के बारे में नहीं बल्कि बड़े क्षेत्रों के बारे में परवाह करता हूं जो निम्न हैं।
डेविड बी

यदि आपके पास स्थानीय अधिकतम और न्यूनतम बिंदु हैं, तो आप आसानी से मतभेदों की गणना कर सकते हैं। तो आप ऐसे उदाहरण जानना चाहते हैं जब अंतर दोनों परिमाण में और "अवधि" में बड़ा हो? क्या यह समय श्रृंखला डेटा है?
शेन

@david शायद, आप इस फ़ंक्शन का उपयोग कर सकते हैं। एक मिनीमा की पहचान करने के लिए फ़ंक्शन का उपयोग करें। उस बिंदु और आस-पास के बिंदुओं को छोड़ें (कुछ सहनशीलता के स्तर के भीतर x अंक कहें)। आप एक सहिष्णुता स्तर चुन सकते हैं (जैसे, + - 10 गिनती) जो आपके आवेदन के लिए एक सपाट क्षेत्र को परिभाषित करेगा। नए डाटासेट पर एक नया मिनीमा खोजें। क्या वह काम करेगा?

@ शाने जो सादृश्य मन में आता है वह पहाड़ी क्षेत्र की घाटियों का है। मुझे लगता है कि लक्ष्य सभी घाटियों की पहचान करना है और मुद्दा यह है कि कुछ घाटियाँ 'गहरी' हैं और कुछ पहाड़ों के सापेक्ष 'उथली' हैं।

@Shane यह एक समय श्रृंखला नहीं है, ये जीनोम (गुणसूत्र) के साथ समन्वयित हैं।
डेविड बी

2

में से कुछ BioConductor के संकुल (जैसे, ShortRead , Biostrings , BSgenome , IRanges , genomeIntervals ) के लिए जीनोम पदों या कवरेज वैक्टर, जैसे से निपटने के लिए प्रस्ताव सुविधाओं चिप-सेक और समृद्ध क्षेत्रों की पहचान। अन्य उत्तरों के लिए, मैं मानता हूं कि कुछ सीमा-आधारित फ़िल्टर के साथ आदेशित टिप्पणियों पर निर्भर किसी भी विधि को एक विशिष्ट बैंडविथ के भीतर कम संकेत को अलग करने की अनुमति होगी।

हो सकता है कि आप तथाकथित "द्वीप" की पहचान करने के लिए इस्तेमाल किए जाने वाले तरीकों को भी देख सकते हैं

ज़ैंग, सी, स्कोन्स, डीई, ज़ेंग, सी, कुई, के, झाओ, के, और पेंग, डब्ल्यू (2009)। हिस्टोन संशोधन चिप-सेक डेटा से समृद्ध डोमेन की पहचान के लिए एक क्लस्टरिंग दृष्टिकोण । जैव सूचना विज्ञान, 25 (15) , 1952-1958।

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