बूटस्ट्रैपिंग या मोंटे कार्लो दृष्टिकोण का उपयोग करके महत्वपूर्ण प्रमुख घटकों का निर्धारण कैसे करें?


40

मैं एक प्रिंसिपल कंपोनेंट एनालिसिस (PCA) या एम्पिरिकल ऑर्थोगोनल फंक्शन (EOF) एनालिसिस से निकलने वाले महत्वपूर्ण पैटर्न की संख्या निर्धारित करने में दिलचस्पी रखता हूँ। मुझे इस पद्धति को जलवायु डेटा पर लागू करने में विशेष रुचि है। डेटा फ़ील्ड MxN मैट्रिक्स है जिसमें M समय आयाम (जैसे दिन) और N स्थानिक आयाम (उदाहरण lon / lat स्थान) है। मैंने महत्वपूर्ण पीसी को निर्धारित करने के लिए एक संभावित बूटस्ट्रैप विधि के बारे में पढ़ा है, लेकिन अधिक विस्तृत विवरण खोजने में असमर्थ रहा है। अब तक, मैं इस कटऑफ को निर्धारित करने के लिए नॉर्थ के नियम ऑफ थम्ब (नॉर्थ एट अल ।, 1982) को लागू कर रहा हूं , लेकिन मैं सोच रहा था कि क्या अधिक मजबूत विधि उपलब्ध थी।

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

###Generate data
x <- -10:10
y <- -10:10
grd <- expand.grid(x=x, y=y)

#3 spatial patterns
sp1 <- grd$x^3+grd$y^2
tmp1 <- matrix(sp1, length(x), length(y))
image(x,y,tmp1)

sp2 <- grd$x^2+grd$y^2
tmp2 <- matrix(sp2, length(x), length(y))
image(x,y,tmp2)

sp3 <- 10*grd$y
tmp3 <- matrix(sp3, length(x), length(y))
image(x,y,tmp3)


#3 respective temporal patterns
T <- 1:1000

tp1 <- scale(sin(seq(0,5*pi,,length(T))))
plot(tp1, t="l")

tp2 <- scale(sin(seq(0,3*pi,,length(T))) + cos(seq(1,6*pi,,length(T))))
plot(tp2, t="l")

tp3 <- scale(sin(seq(0,pi,,length(T))) - 0.2*cos(seq(1,10*pi,,length(T))))
plot(tp3, t="l")


#make data field - time series for each spatial grid (spatial pattern multiplied by temporal pattern plus error)
set.seed(1)
F <- as.matrix(tp1) %*% t(as.matrix(sp1)) + 
as.matrix(tp2) %*% t(as.matrix(sp2)) + 
as.matrix(tp3) %*% t(as.matrix(sp3)) +
matrix(rnorm(length(T)*dim(grd)[1], mean=0, sd=200), nrow=length(T), ncol=dim(grd)[1]) # error term

dim(F)
image(F)


###Empirical Orthogonal Function (EOF) Analysis 
#scale field
Fsc <- scale(F, center=TRUE, scale=FALSE)

#make covariance matrix
C <- cov(Fsc)
image(C)

#Eigen decomposition
E <- eigen(C)

#EOFs (U) and associated Lambda (L) 
U <- E$vectors
L <- E$values

#projection of data onto EOFs (U) to derive principle components (A)
A <- Fsc %*% U

dim(U)
dim(A)

#plot of top 10 Lambda
plot(L[1:10], log="y")

#plot of explained variance (explvar, %) by each EOF
explvar <- L/sum(L) * 100
plot(explvar[1:20], log="y")


#plot original patterns versus those identified by EOF
layout(matrix(1:12, nrow=4, ncol=3, byrow=TRUE), widths=c(1,1,1), heights=c(1,0.5,1,0.5))
layout.show(12)

par(mar=c(4,4,3,1))
image(tmp1, main="pattern 1")
image(tmp2, main="pattern 2")
image(tmp3, main="pattern 3")

par(mar=c(4,4,0,1)) 
plot(T, tp1, t="l", xlab="", ylab="")
plot(T, tp2, t="l", xlab="", ylab="")
plot(T, tp3, t="l", xlab="", ylab="")

par(mar=c(4,4,3,1))
image(matrix(U[,1], length(x), length(y)), main="eof 1") 
image(matrix(U[,2], length(x), length(y)), main="eof 2")
image(matrix(U[,3], length(x), length(y)), main="eof 3")

par(mar=c(4,4,0,1)) 
plot(T, A[,1], t="l", xlab="", ylab="")
plot(T, A[,2], t="l", xlab="", ylab="")
plot(T, A[,3], t="l", xlab="", ylab="")

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

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

###Determine significant EOFs

#North's Rule of Thumb
Lambda_err <- sqrt(2/dim(F)[2])*L
upper.lim <- L+Lambda_err
lower.lim <- L-Lambda_err
NORTHok=0*L
for(i in seq(L)){
    Lambdas <- L
    Lambdas[i] <- NaN
    nearest <- which.min(abs(L[i]-Lambdas))
    if(nearest > i){
        if(lower.lim[i] > upper.lim[nearest]) NORTHok[i] <- 1
    }
    if(nearest < i){
        if(upper.lim[i] < lower.lim[nearest]) NORTHok[i] <- 1
    }
}
n_sig <- min(which(NORTHok==0))-1

plot(L[1:10],log="y", ylab="Lambda (dots) and error (vertical lines)", xlab="EOF")
segments(x0=seq(L), y0=L-Lambda_err, x1=seq(L), y1=L+Lambda_err)
abline(v=n_sig+0.5, col=2, lty=2)
text(x=n_sig, y=mean(L[1:10]), labels="North's Rule of Thumb", srt=90, col=2)

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

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

आपकी सहायता के लिए धन्यवाद।

संदर्भ: ब्योर्नसन, एच। और वेनेगैस, एसए (1997)। "ईओएफ और एसवीडी के लिए एक मैनुअल जलवायु डेटा का विश्लेषण", मैकगिल विश्वविद्यालय, सीसीजीसीआर रिपोर्ट नंबर 97-1, मॉन्ट्रियल, क्यूबेक, 52pp। http://andvari.vedur.is/%7Efolk/halldor/PICKUP/eof.pdf

जीआर नॉर्थ, टीएल बेल, आरएफ केलन, और एफजे मूंग। (1982)। अनुभवजन्य ऑर्थोगोनल कार्यों के आकलन में नमूनाकरण त्रुटियां। सोम Wea। Rev., 110: 699–706।

वॉन स्टॉर्च, एच, ज़्वियर्स, एफडब्ल्यू (1999)। जलवायु अनुसंधान में सांख्यिकीय विश्लेषण। कैम्ब्रिज यूनिवर्सिटी प्रेस।


बूटस्ट्रैप दृष्टिकोण पर आपका संदर्भ क्या है?
माइकल चर्निक

4
एक बूटस्ट्रैप यहाँ काम करने वाला नहीं है। यह उन डेटा सेटों के साथ काम नहीं करेगा जिनमें बहुत अधिक हर अवलोकन किसी अन्य अवलोकन के साथ सहसंबद्ध है; डेटा की उचित प्रतिकृतियां उत्पन्न करने के लिए उसे स्वतंत्रता या कम से कम अनुमानित स्वतंत्रता (समय श्रृंखला में परिस्थितियों को मिलाकर कहना) की आवश्यकता होती है। बेशक जंगली बूटस्ट्रैप की तरह विशेष बूटस्ट्रैप योजनाएं हैं, जो इन मुद्दों को दरकिनार कर सकती हैं। लेकिन मैं इस पर ज्यादा दांव नहीं लगाऊंगा। और आपको वास्तव में बहुभिन्नरूपी सांख्यिकी पुस्तकों को देखने की जरूरत है, और उनका अनुसरण करना है, ताकि उत्तर के रूप में एक और अनिश्चितकालीन हॉकी स्टिक प्राप्त न हो।
StasK

2
बॉक्स में @Marc आप समय श्रृंखला, MBB (चलती ब्लॉक बूटस्ट्रैप) CBB (परिपत्र ब्लॉक बूटस्ट्रैप), या SBB (स्थिर ब्लॉक बूटस्ट्रैप) के लिए उपयोग किए जाने वाले विभिन्न ब्लॉक बूटस्ट्रैप का उल्लेख कर सकते हैं, मॉडल का अनुमान लगाने के लिए डेटा के समय ब्लॉक का उपयोग करें। मापदंडों।
माइकल चेरिक

3
@StasK मुझे नहीं पता कि आपको ऐसा क्यों लगता है कि आपको समय श्रृंखला में बूटस्ट्रैप को लागू करने के लिए मिश्रण की स्थिति की आवश्यकता है। मॉडल आधारित तरीकों की आवश्यकता है कि आप एक समय श्रृंखला संरचना फिट करते हैं और फिर आप अवशिष्ट को बूटस्ट्रैप कर सकते हैं। तो आपके पास ट्रेंड और मौसमी घटकों के साथ समय श्रृंखला हो सकती है और फिर भी मॉडल-आधारित बूटस्ट्रैप कर सकते हैं।
माइकल चेरिक

2
मेरे पास पूर्ण पाठ तक पहुंच नहीं है, लेकिन आप एक नज़र डालने की कोशिश कर सकते हैं: "हामिद बामोरादी, फ्रैंस वैन डेन बर्ग, fullस्मंड रिनन, बूटस्ट्रैप प्रमुख घटक विश्लेषण में विश्वास सीमाएं - एक केस स्टडी, केमोमेट्रिक्स और इंटेलिजेंट लेबोरेटरी सिस्टम, वॉल्यूम 120, 15 जनवरी 2013 पेज 97-105, ISSN 0169-7439, 10.1016 / j.chemolab.2012.10.007 (। sciencedirect.com/science/article/pii/S0169743912002171 ) कीवर्ड: बूटस्ट्रैप, पीसीए, विश्वास सीमा; ई.पू. < उप> एक </ sub>; अनिश्चितता "
tomasz74

जवाबों:


19

मैं यहां संवाद को थोड़ा आगे बढ़ाने की कोशिश करने जा रहा हूं, हालांकि यह मेरा सवाल है। मुझे यह पूछे जाने के 6 महीने हो चुके हैं और दुर्भाग्य से कोई भी पूर्ण उत्तर नहीं दिया गया है, मैं कोशिश करूँगा और संक्षेप में बताऊंगा कि मैंने इस तरह अभी तक क्या इकट्ठा किया है और देखें कि कोई भी शेष मुद्दों पर विस्तार से बता सकता है। कृपया लम्बे उत्तर का बहाना करें, लेकिन मुझे कोई और रास्ता नहीं दिखता ...

सबसे पहले, मैं संभवतः बेहतर सिंथेटिक डेटा सेट का उपयोग करके कई दृष्टिकोण प्रदर्शित करूंगा। यह बेकर्स एंड रिक्सन ( 2003 ) द्वारा एक पेपर से आता है जो गप्पू डेटा पर ईओएफ के संचालन के लिए एक एल्गोरिथ्म के उपयोग को दर्शाता है। अगर किसी को दिलचस्पी है ( लिंक ) तो मैंने आर में एल्गोरिथ्म को फिर से तैयार किया है ।

सिंथेटिक डेटा सेट:

#color palette
pal <- colorRampPalette(c("blue", "cyan", "yellow", "red"))

#Generate data
m=50
n=100
frac.gaps <- 0.5 # the fraction of data with NaNs
N.S.ratio <- 0.25 # the Noise to Signal ratio for adding noise to data

x <- (seq(m)*2*pi)/m
t <- (seq(n)*2*pi)/n


#True field
Xt <- 
 outer(sin(x), sin(t)) + 
 outer(sin(2.1*x), sin(2.1*t)) + 
 outer(sin(3.1*x), sin(3.1*t)) +
 outer(tanh(x), cos(t)) + 
 outer(tanh(2*x), cos(2.1*t)) + 
 outer(tanh(4*x), cos(0.1*t)) + 
 outer(tanh(2.4*x), cos(1.1*t)) + 
 tanh(outer(x, t, FUN="+")) + 
 tanh(outer(x, 2*t, FUN="+"))

Xt <- t(Xt)
image(Xt, col=pal(100))

#Noise field
set.seed(1)
RAND <- matrix(runif(length(Xt), min=-1, max=1), nrow=nrow(Xt), ncol=ncol(Xt))
R <- RAND * N.S.ratio * Xt

#True field + Noise field
Xp <- Xt + R
image(Xp, col=pal(100))

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

तो, सही डेटा फ़ील्ड Xtमें 9 सिग्नल शामिल हैं और मैंने इसमें कुछ शोर जोड़ा है ताकि अवलोकन क्षेत्र का निर्माण Xpकिया जा सके, जिसका उपयोग नीचे दिए गए उदाहरणों में किया जाएगा। EOF को इस प्रकार निर्धारित किया जाता है:

EOF

#make covariance matrix
C <- t(Xp) %*% Xp #cov(Xp)
image(C)

#Eigen decomposition
E <- svd(C)

#EOFs (U) and associated Lambda (L) 
U <- E$u
L <- E$d

#projection of data onto EOFs (U) to derive principle components (A)
A <- Xp %*% U

उदाहरण के बाद जो मैंने अपने मूल उदाहरण में उपयोग किया था, मैं उत्तर के अंगूठे के नियम के माध्यम से "महत्वपूर्ण" ईओएफ निर्धारित करेगा।

उत्तर के अंगूठे का नियम

Lambda_err <- sqrt(2/dim(Xp)[2])*L
upper.lim <- L+Lambda_err
lower.lim <- L-Lambda_err
NORTHok=0*L
for(i in seq(L)){
    Lambdas <- L
    Lambdas[i] <- NaN
    nearest <- which.min(abs(L[i]-Lambdas))
    if(nearest > i){
        if(lower.lim[i] > upper.lim[nearest]) NORTHok[i] <- 1
    }
    if(nearest < i){
        if(upper.lim[i] < lower.lim[nearest]) NORTHok[i] <- 1
    }
}
n_sig <- min(which(NORTHok==0))-1
n_sig

plot(L[1:20],log="y", ylab="Lambda (dots) and error (vertical lines)", xlab="EOF")
segments(x0=seq(L), y0=L-Lambda_err, x1=seq(L), y1=L+Lambda_err)
abline(v=n_sig+0.5, col=2, lty=2)
text(x=n_sig, y=mean(L[1:10]), labels="North's Rule of Thumb", srt=90, col=2)

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

चूंकि आयाम में 2: 4 के लैम्बडा मूल्य एक-दूसरे के बहुत करीब हैं, इसलिए इन्हें अंगूठे के नियम से महत्वहीन माना जाता है - अर्थात उनके संबंधित ईओएफ पैटर्न उनके समान आयामों को ओवरलैप और मिक्स कर सकते हैं। यह दुर्भाग्यपूर्ण है कि हम जानते हैं कि 9 संकेत वास्तव में क्षेत्र में मौजूद हैं।

लॉग-रूपांतरित लैम्ब्डा मान ("स्क्री प्लॉट") को देखने के लिए और फिर अनुगामी मूल्यों के लिए एक प्रतिगमन फिट करने के लिए एक अधिक व्यक्तिपरक दृष्टिकोण है। एक तो यह निर्धारित कर सकता है कि लैम्बडा मान इस स्तर से ऊपर किस स्तर पर है:

मिट्टी - रोढ़ी वाला भूखंड

ntrail <- 35
tail(L, ntrail)
fit <- lm(log(tail(L, ntrail)) ~ seq(length(L)-ntrail+1, length(L)))
plot(log(L))
abline(fit, col=2)

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

तो, 5 प्रमुख ईओएफ इस लाइन के ऊपर स्थित हैं। मैंने इस उदाहरण की कोशिश की है जब Xpकोई अतिरिक्त शोर नहीं जोड़ा गया है और परिणाम सभी 9 मूल संकेतों को प्रकट करते हैं। तो, ईओएफ 6: 9 की तुच्छता इस तथ्य के कारण है कि उनका आयाम क्षेत्र में शोर से कम है।

एक अधिक वस्तुनिष्ठ विधि ओवरलैंड और प्रीसेंडॉरफ़र (1982) द्वारा "नियम एन" मानदंड है। wqपैकेज के भीतर एक कार्यान्वयन है , जिसे मैं नीचे दिखाता हूं।

नियम एन

library(wq)
eofNum(Xp, distr = "normal", reps = 99)

RN <- ruleN(nrow(Xp), ncol(Xp), type = "normal", reps = 99)
RN
eigs <- svd(cov(Xp))$d
plot(eigs, log="y")
lines(RN, col=2, lty=2)

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

नियम एन ने 4 महत्वपूर्ण ईओएफ की पहचान की। व्यक्तिगत रूप से, मुझे इस पद्धति को बेहतर ढंग से समझने की आवश्यकता है; यादृच्छिक क्षेत्र के आधार पर त्रुटि के स्तर को मापना क्यों संभव है जो समान वितरण का उपयोग नहीं करता है Xp? इस पद्धति में एक भिन्नता डेटा को फिर से शुरू करने के लिए होगी Xpताकि प्रत्येक कॉलम को यादृच्छिक रूप से फेरबदल किया जाए। इस तरह, हम यह सुनिश्चित करते हैं कि यादृच्छिक क्षेत्र का कुल रूपांतर वैसा ही हो जैसा कि है Xp। कई बार फिर से आकर, हम तब अपघटन की एक आधारभूत त्रुटि की गणना करने में सक्षम होते हैं।

यादृच्छिक क्षेत्र के साथ मोंटे कार्लो (यानी अशक्त मॉडल तुलना)

iter <- 499
LAMBDA <- matrix(NaN, ncol=iter, nrow=dim(Xp)[2])

set.seed(1)
for(i in seq(iter)){
    #i=1

    #random reorganize dimensions of scaled field
    Xp.tmp <- NaN*Xp
    for(j in seq(dim(Xp.tmp)[2])){
        #j=1
        Xp.tmp[,j] <- Xp[,j][sample(nrow(Xp))]
    }

    #make covariance matrix
    C.tmp <- t(Xp.tmp) %*% Xp.tmp #cov(Xp.tmp)

    #SVD decomposition
    E.tmp <- svd(C.tmp)

    #record Lambda (L) 
    LAMBDA[,i] <- E.tmp$d

    print(paste(round(i/iter*100), "%", " completed", sep=""))
}

boxplot(t(LAMBDA), log="y", col=8, border=2, outpch="")
points(L)

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

फिर से, 4 ईओएफ यादृच्छिक क्षेत्रों के लिए वितरण से ऊपर हैं। इस दृष्टिकोण के साथ, और नियम एन के बारे में मेरी चिंता यह है कि ये वास्तव में लैम्ब्डा मूल्यों के विश्वास अंतराल को संबोधित नहीं कर रहे हैं; उदाहरण के लिए एक उच्च प्रथम लैम्ब्डा मूल्य स्वतः ही कम संख्या में विचरण का परिणाम देगा, जिसे अनुगामी द्वारा समझाया जाएगा। इस प्रकार यादृच्छिक क्षेत्रों से गणना किए गए लैम्ब्डा में हमेशा कम खड़ी ढलान होगी और इसके परिणामस्वरूप कुछ महत्वपूर्ण ईओएफ का चयन किया जा सकता है। [नोट: eofNum()फ़ंक्शन मानता है कि EOF की गणना एक सहसंबंध मैट्रिक्स से की जाती है। यह संख्या भिन्न हो सकती है यदि उदाहरण के लिए एक सहसंयोजक मैट्रिक्स (केंद्रित लेकिन स्केल नहीं किया गया डेटा) का उपयोग करें।]

अंत में, @ tomasz74 ने बाबामोरादी एट अल द्वारा कागज का उल्लेख किया। (२०१३), जिस पर मेरी संक्षिप्त नज़र थी। यह बहुत दिलचस्प है, लेकिन यह लैंबडा के बजाय ईओएफ लोडिंग और गुणांक के सीआई की गणना करने पर अधिक ध्यान केंद्रित करता है। फिर भी, मेरा मानना ​​है कि एक ही कार्यप्रणाली का उपयोग करके लैम्ब्डा त्रुटि का आकलन करने के लिए इसे अपनाया जा सकता है। एक बूटस्ट्रैप रेज़म्पलिंग एक नया फ़ील्ड उत्पन्न होने तक पंक्तियों को फिर से रैंप करके डेटा फ़ील्ड से किया जाता है। एक ही पंक्ति को एक से अधिक बार बदला जा सकता है, जो एक गैर-पैरामीट्रिक दृष्टिकोण है और किसी को डेटा के वितरण के बारे में धारणा बनाने की आवश्यकता नहीं है।

लैम्बडा मूल्यों का बूटस्ट्रैप

B <- 40 * nrow(Xp)
LAMBDA <- matrix(NaN, nrow=length(L), ncol=B)
for(b in seq(B)){
    samp.b <- NaN*seq(nrow(Xp))
    for(i in seq(nrow(Xp))){
        samp.b[i] <- sample(nrow(Xp), 1)
    }
    Xp.b  <- Xp[samp.b,]
    C.b  <- t(Xp.b) %*% Xp.b 
    E.b  <- svd(C.b)
    LAMBDA[,b] <- E.b$d
    print(paste(round(b/B*100), "%", " completed", sep=""))
}
boxplot(t(LAMBDA), log="y", col=8, outpch="", ylab="Lambda [log-scale]")
points(L, col=4)
legend("topright", legend=c("Original"), pch=1, col=4)

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

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

फिर से, मैं इन मुद्दों में विशेषज्ञ नहीं हूं, इसलिए मैं अभी भी उम्मीद कर रहा हूं कि अधिक अनुभव वाला कोई व्यक्ति इस स्पष्टीकरण में जोड़ सकता है।

संदर्भ:

बेकर्स, जीन-मैरी और एम। रिक्सन। "ईओएफ गणना और अधूरा ओशनोग्राफिक डेटासेट से डेटा भरना।" वायुमंडलीय और महासागरीय प्रौद्योगिकी जर्नल 20.12 (2003): 1839-1856।

ओवरलैंड, जे।, और आर। प्रीसिडोरफेर, चक्रवात के चरम पर जाने वाले प्रमुख घटकों के लिए एक महत्त्वपूर्ण परीक्षण, मोन। Wea। रेव।, 110, 1-4, 1982।

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