পারস্পরিক সম্পর্ক পেতে কীভাবে 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

বেস বিতরণ

ভেরিয়েবলের মধ্যে lation 0.6 হতে পারস্পরিক সম্পর্ক রাখার জন্য আমাকে তথ্যটি পুনরায় সাজানো দরকার। আমার উভয় ভেরিয়েবলের অর্থ এবং অন্যান্য বর্ণনামূলক পরিসংখ্যান (এসডি, মিনিট, সর্বোচ্চ, ইত্যাদি) রাখা দরকার keep

আমি জানি যে প্রদত্ত ডেটার সাথে প্রায় কোনও সম্পর্ক স্থাপন করা সম্ভব যেমন:

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

অতিরিক্ত র্যান্ডম সংখ্যা উত্পন্ন করার উপর ভিত্তি করে ডেটা পুনরায় সাজানোর একটি উপায় এখানে।

আমরা নির্দিষ্ট পারস্পরিক সম্পর্ক সহ একটি দ্বিখণ্ডিত সাধারণ বিতরণ থেকে নমুনা আঁকি। এরপরে, আমরা এর র‌্যাঙ্কগুলি গণনা করিএক্স এবং Yআমরা প্রাপ্ত মান। এই র‌্যাঙ্কগুলি মূল মানগুলি অর্ডার করতে ব্যবহৃত হয়। এই পদ্ধতির জন্য, আমরা মূল উভয় শীর্ষ বাছাই আছেএক্স এবং Y মান।

প্রথমত, আমরা প্রকৃত ডেটা সেট তৈরি করি (আপনার উদাহরণের মতো)।

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, σ=1(উভয় ভেরিয়েবলের জন্য) এবং নির্দিষ্ট পারস্পরিক সম্পর্ক। আর এ, প্যাকেজ mvrnormথেকে ফাংশন দিয়ে এটি করা যেতে পারে MASS। আমরা empirical = 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

একটি নির্দিষ্ট পারস্পরিক সম্পর্ক সহ দুটি অভিন্ন বিতরণ উত্পন্ন করতে, রুসিও এবং ক্যাকজেটো (২০০৮) অ্যালগরিদম কাজ করবে। তারা আর কোড সরবরাহ করে । তারপরে আপনি আপনার টার্গেট ন্যূনতম, সর্বোচ্চ, গড় এবং এসডি পেতে একটি সাধারণ লিনিয়ার ফাংশন দিয়ে রূপান্তর করতে পারেন।

রুসিও এবং ক্যাকজেটো অ্যালগরিদম

আমি দ্বিখণ্ডিত কেসটির সংক্ষিপ্তসার করব, তবে এটি বহুবিধ সমস্যাগুলির সাথেও কাজ করতে পারে। সম্পর্কহীনএক্স এবং ওয়াইযে কোনও আকারের সাথে উত্পন্ন হয় (যেমন, ইউনিফর্ম)। তারপর,এক্স1 এবং ওয়াই1 একটি মধ্যবর্তী পারস্পরিক সম্পর্ক সঙ্গে দ্বিচারিত স্বাভাবিক হিসাবে উত্পন্ন হয়। এক্স1 এবং ওয়াই1 দ্বারা প্রতিস্থাপিত হয় এক্স0 এবং ওয়াই0র‌্যাঙ্ক-সংরক্ষণ ফ্যাশন এ। মধ্যবর্তী পারস্পরিক সম্পর্ক আরও বেশি বা কম হতে পারে তার উপর নির্ভর করে আর (এক্স1,ওয়াই1) খুব কম বা খুব বেশি। এক্স2 এবং ওয়াই2নতুন মধ্যবর্তী পারস্পরিক সম্পর্কের সাথে দ্বিপরিচালিত স্বাভাবিক হিসাবে উত্পন্ন হয় । পদ্ধতি পুনরাবৃত্তি করুন।

লক্ষ্য করুন যে এটি পুনরায় সংঘটিত ব্যতীত @ সোভেন হোহেনস্টেইনের সমাধানের সাথে খুব মিল, সুতরাং মধ্যবর্তী পারস্পরিক সম্পর্কটি অবিচ্ছেদ্য না হওয়া অবধি লক্ষ্য পারস্পরিক সম্পর্কের আরও কাছাকাছি ও কাছাকাছি পৌঁছে যাবে। এছাড়াও, নোট করুন যে এই অ্যালগরিদমটি একটি বৃহত জনসংখ্যার (যেমন, এন = 1 মিলিয়ন) উত্পাদন করতে ব্যবহার করা যেতে পারে যা থেকে ছোট নমুনাগুলি আঁকতে পারে - যদি আপনার নমুনা ত্রুটির প্রয়োজন হয় তবে এটি দরকারী।

সম্পর্কিত পোস্টের জন্য: সম্পর্কিত এবং অ-সাধারণ বিতরণ

বর্ণনামূলক পরিসংখ্যান সংরক্ষণ করা

কোনও গ্যারান্টি নেই যে অ্যালগরিদম ঠিক একই বর্ণনামূলক উত্পাদন করবে। তবে, কারণ অভিন্ন বিতরণের গড় এবং এসডি এর নূন্যতম এবং সর্বাধিক দ্বারা নির্ধারিত হয়, আপনি সবকিছু ঠিক করার জন্য কেবল ন্যূনতম এবং সর্বাধিক সমন্বয় করতে পারেন।

দিন এক্স এবং ওয়াই রুসিও এবং ক্যাকজেটো অ্যালগরিদমের শেষ পুনরাবৃত্তি থেকে আপনার উত্পন্ন ভেরিয়েবল হোন, এক্স এবং ওয়াই আপনার চূড়ান্ত পরিবর্তনশীল হোন যা আপনি আশা করতে পারেন (লক্ষ্য বর্ণনার সাথে), এবং and এক্স এবং ওয়াই আপনার ডেটাসেটে আপনার আসল ভেরিয়েবল হোন।

হিসাব এক্স=(এক্স-মিআমিএন(এক্স))*(মিএকটিএক্স(এক্স)-মিআমিএন(এক্স))/(মিএকটিএক্স(এক্স)-মিআমিএন(এক্স))

একই জন্য ওয়াই

রেফারেন্স:

রুসিও, জে।, এবং ক্যাকজেটো, ডাব্লু। (২০০৮)। পুনরাবৃত্তাকারী অ্যালগরিদম ব্যবহার করে বহুভিত্তিক অস্বাভাবিক ডেটা সিমুলেট করা। মাল্টিভিয়ারিয়েট আচরণমূলক গবেষণা, 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
না আমি সত্যিই "রেজামাল" বলতে চাইছি। আমার উভয় ভেরিয়েবলের মাধ্যম এবং অন্যান্য বর্ণনামূলক পরিসংখ্যান (এসডি, মিনিট, সর্বোচ্চ) রাখা দরকার keep প্রশ্ন আপডেট করেছেন।
ইউরি পেট্রোভস্কি 11
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.