दिए गए सहसंबंध को 2D डेटा पुनर्व्यवस्थित कैसे करें?


9

मेरे पास दो निरंतर चर के साथ निम्नलिखित सरल डेटासेट हैं; अर्थात:

d = data.frame(x=runif(100,0,100),y = runif(100,0,100))
plot(d$x,d$y)
abline(lm(y~x,d), col="red")
cor(d$x,d$y) # = 0.2135273

आधार वितरण

मुझे रास्ते में डेटा को फिर से व्यवस्थित करने की आवश्यकता है चर के बीच सहसंबंध ~ 0.6 हो। मुझे दोनों चरों के स्थिरांक और अन्य वर्णनात्मक आँकड़े (एसडी, मिनट, अधिकतम, आदि) रखने की आवश्यकता है।

मुझे पता है कि दिए गए डेटा के साथ लगभग कोई संबंध बनाना संभव है:

d2 = with(d,data.frame(x=sort(x),y=sort(y)))
plot(d2$x,d2$y)
abline(lm(y~x,d2), col="red")
cor(d2$x,d2$y) # i.e. 0.9965585

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

अगर मैं sampleइस कार्य के लिए फ़ंक्शन का उपयोग करने का प्रयास करता हूं :

cor.results = c()
for(i in 1:1000){
    set.seed(i)
    d3 = with(d,data.frame(x=sample(x),y=sample(y)))
    cor.results =  c(cor.results,cor(d3$x,d3$y))
}

मैं सहसंबंधों की काफी विस्तृत श्रृंखला प्राप्त करता हूं:

> summary(cor.results)
     Min.   1st Qu.    Median      Mean   3rd Qu.      Max. 
-0.281600 -0.038330 -0.002498 -0.001506  0.034380  0.288800

लेकिन यह सीमा डेटा फ्रेम में पंक्तियों की संख्या और आकार में वृद्धि के साथ कम होती जाती है।

> d = data.frame(x=runif(1000,0,100),y = runif(1000,0,100))
> cor.results = c()
> for(i in 1:1000){
+ set.seed(i)
+ d3 = with(d,data.frame(x=sample(x),y=sample(y)))
+ cor.results =  c(cor.results,cor(d3$x,d3$y))
+ }
> summary(cor.results)
      Min.    1st Qu.     Median       Mean    3rd Qu.       Max. 
-0.1030000 -0.0231300 -0.0005248 -0.0005547  0.0207000  0.1095000

मेरा सवाल यह है कि:

दिए गए सहसंबंध (यानी 0.7) प्राप्त करने के लिए ऐसे डेटासेट को पुनर्व्यवस्थित कैसे करें? (यह भी अच्छा होगा यदि विधि डेटासेट आकार पर निर्भरता को हटा देगी)

जवाबों:


6

यहां डेटा को पुनर्व्यवस्थित करने का एक तरीका है जो अतिरिक्त यादृच्छिक संख्या उत्पन्न करने पर आधारित है।

हम निर्दिष्ट सहसंबंध के साथ एक द्विभाजित सामान्य वितरण से नमूने लेते हैं। इसके बाद, हम अपने द्वारा प्राप्त और मानों के रैंक की गणना करते हैं । इन रैंकों का उपयोग मूल मूल्यों को ऑर्डर करने के लिए किया जाता है। इस दृष्टिकोण के लिए, हमारे पास मूल और दोनों मान हैं।xyxy

सबसे पहले, हम वास्तविक डेटा सेट बनाते हैं (जैसे आपके उदाहरण में)।

set.seed(1)
d <- data.frame(x = runif(100, 0, 100), y = runif(100, 0, 100))

cor(d$x, d$y)
# [1] 0.01703215

अब, हम एक सहसंबंध मैट्रिक्स निर्दिष्ट करते हैं।

corr <- 0.7  # target correlation
corr_mat <- matrix(corr, ncol = 2, nrow = 2)
diag(corr_mat) <- 1
corr_mat
#      [,1] [,2]
# [1,]  1.0  0.7
# [2,]  0.7  1.0

हम , (दोनों चर के लिए) और निर्दिष्ट सहसंबंध के साथ एक सामान्य वितरण के बाद यादृच्छिक डेटा उत्पन्न करते हैं । आर में, यह पैकेज से फ़ंक्शन के साथ किया जा सकता है । हम यह इंगित करने के लिए उपयोग करते हैं कि सहसंबंध अनुभवजन्य सहसंबंध है (जनसंख्या सहसंबंध नहीं)।μ=0σ=1mvrnormMASSempirical = TRUE

library(MASS)
mvdat <- mvrnorm(n = nrow(d), mu = c(0, 0), Sigma = corr_mat, empirical = TRUE)

cor(mvdat)
#      [,1] [,2]
# [1,]  1.0  0.7
# [2,]  0.7  1.0

यादृच्छिक डेटा पूरी तरह से निर्दिष्ट सहसंबंध से मेल खाता है।

अगला, हम यादृच्छिक डेटा की रैंक की गणना करते हैं।

rx <- rank(mvdat[ , 1], ties.method = "first")
ry <- rank(mvdat[ , 2], ties.method = "first")

मूल डेटा के लिए रैंक का उपयोग करने के लिए d, हमें मूल डेटा को सॉर्ट करना होगा।

dx_sorted <- sort(d$x)
dy_sorted <- sort(d$y)

अब, हम क्रमबद्ध डेटा के क्रम को निर्दिष्ट करने के लिए रैंकों का उपयोग कर सकते हैं।

cor(dx_sorted[rx], dy_sorted[ry])
# [1] 0.6868986

प्राप्त सहसंबंध निर्दिष्ट एक से पूरी तरह से मेल नहीं खाता है, लेकिन अंतर अपेक्षाकृत छोटा है।

यहाँ, dx_sorted[rx]और dy_sorted[ry]मूल डेटा के पुनर्निर्धारित संस्करण हैं d


2
+1 यह काफी अच्छा है। चरण 1 हैं) सही पियर्सन सहसंबंध के साथ सामान्य डेटा उत्पन्न करते हैं, 2) मूल डेटा बनाते हैं और उत्पन्न डेटा मिलान रैंक सहसंबंध बिल्कुल 3) मूल डेटा में लगभग वही पियर्सन सहसंबंध है। यह काम क्यों करता है? क्या कोई विश्लेषणात्मक परिणाम है जो यह कहता है? विभिन्न सह-संबंध उपायों को रखने में असमानताओं को अच्छी तरह से व्यवहार किए गए वितरण या कुछ और के लिए एक दूसरे के करीब रखना?
बिल

1
@ क्या मैं दृष्टिकोण को विश्लेषणात्मक रूप से स्पष्ट नहीं कर सकता। यह सिर्फ एक विचार है जो मेरे दिमाग में आया। हालाँकि, आपने चरणों को एक अच्छे तरीके से संक्षेप में प्रस्तुत किया। धन्यवाद।
स्वेन होनस्टीन

2

एक निर्दिष्ट सहसंबंध के साथ दो समान वितरण उत्पन्न करने के लिए, रससीओ और काज़ेटो (2008) एल्गोरिदम काम करेगा। वे आर कोड प्रदान करते हैं । फिर आप अपने लक्ष्य मिनट, अधिकतम, माध्य और SD को प्राप्त करने के लिए एक सरल रैखिक फ़ंक्शन के साथ बदल सकते हैं।

रुस्सियो और काज़ेटोव एल्गोरिथम

मैं बीवरिएट मामले को संक्षेप में बताऊंगा, लेकिन यह बहुभिन्नरूपी समस्याओं के साथ भी काम कर सकता है। असंबंधित और किसी भी आकार (जैसे, समान) के साथ उत्पन्न होते हैं। फिर, और एक मध्यवर्ती सहसंबंध के साथ सामान्य रूप से होते हैं। और को रैंक-संरक्षण फैशन में और द्वारा प्रतिस्थापित किया । R ( ) बहुत कम या बहुत अधिक होने के आधार पर उच्च या निम्न होने के लिए मध्यवर्ती सहसंबंध को समायोजित करें । और नए मध्यवर्ती सहसंबंध के साथ सामान्य रूप से उत्पन्न होते हैं। दोहराएँ।XoYoX1Y1X1Y1X0Y0X1,Y1X2Y2

ध्यान दें कि यह @Sven Hohenstein के समाधान से बहुत मिलता-जुलता है, सिवाय इसके कि यह पुनरावृत्ति है, इसलिए मध्यवर्ती सहसंबंध लक्ष्य सहसंबंध के करीब और करीब पहुंच जाएगा जब तक कि वे अप्रभेद्य न हों। इसके अलावा, ध्यान दें कि इस एल्गोरिदम का उपयोग बड़ी आबादी (जैसे, एन = 1 मिलियन) उत्पन्न करने के लिए किया जा सकता है, जिसमें से छोटे नमूने खींचे जा सकते हैं - यदि आपको नमूना त्रुटि की आवश्यकता है तो यह उपयोगी है।

संबंधित पोस्ट के लिए: सहसंबंध और गैर-सामान्य वितरण

वर्णनात्मक सांख्यिकी का संरक्षण

इस बात की कोई गारंटी नहीं है कि एल्गोरिथम ठीक उसी वर्णनात्मक का उत्पादन करेगा। हालाँकि, क्योंकि एक समान वितरण का माध्य और SD इसके न्यूनतम और अधिकतम द्वारा निर्धारित किया जाता है, आप बस सब कुछ ठीक करने के लिए न्यूनतम और अधिकतम समायोजित कर सकते हैं।

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

गणना Xf=(Xgmin(X))(max(X)min(x))/(max(Xg)min(Xg))

लिए भीYf

संदर्भ:

रुसियो, जे।, और केज़ेटो, डब्ल्यू। (2008)। एक पुनरावृत्ति एल्गोरिथ्म का उपयोग करते हुए बहुभिन्नरूपी गैर-असामान्य डेटा का अनुकरण। बहुभिन्नरूपी व्यवहार अनुसंधान, 43, 355-381। डोई: 10.1080 / 00273170802285693


1

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

r = .6
n = 1000
x = rnorm(n) 
z = rnorm(n) 
y = (r/(1-r^2)^.5)*x + z

cor(x,y)
plot(x,y)
abline(lm(y~x), col="red")

3
नहीं, मैं वास्तव में "resample" का मतलब है। मुझे दोनों चरों के साधनों और अन्य वर्णनात्मक आंकड़ों (एसडी, न्यूनतम, अधिकतम) को स्थिर रखने की आवश्यकता है। सवाल अपडेट किया।
यूरी पेट्रोव्स्की
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.