আমি একটি নমুনার নমুনা কোভরিয়েন্স ম্যাট্রিক্স অনুমান করেছি এবং একটি প্রতিসাম্য ম্যাট্রিক্স পাই। দিয়ে আমি ভারিটেট স্বাভাবিক বিতরণকৃত আরএন তৈরি করতে চাই তবে অতএব আমার কোলেস্কি পচন দরকার । ইতিবাচক নির্দিষ্ট না হলে আমার কী করা উচিত ?
আমি একটি নমুনার নমুনা কোভরিয়েন্স ম্যাট্রিক্স অনুমান করেছি এবং একটি প্রতিসাম্য ম্যাট্রিক্স পাই। দিয়ে আমি ভারিটেট স্বাভাবিক বিতরণকৃত আরএন তৈরি করতে চাই তবে অতএব আমার কোলেস্কি পচন দরকার । ইতিবাচক নির্দিষ্ট না হলে আমার কী করা উচিত ?
উত্তর:
একটি (সম্ভবত) একক কোভারিয়েন্স ম্যাট্রিক্স দিয়ে মাল্টিভারিয়েট স্বাভাবিক বিতরণ থেকে এলোমেলো পরিবর্তনগুলি কীভাবে উত্পন্ন করা যায় তা প্রশ্নটি উদ্বেগের সাথে জড়িত । এই উত্তরটি এমন একটি উপায় ব্যাখ্যা করে যা কোনও সোভিয়েশন ম্যাট্রিক্সের জন্য কাজ করবে । এটি এমন একটি বাস্তবায়ন সরবরাহ করে যা এর যথার্থতা পরীক্ষা করে।R
যেহেতু একটি কোভেরিয়েন্স ম্যাট্রিক্স, এটি অগত্যা প্রতিসাম্য এবং ধনাত্মক-সেমিডেফিনাইট। পটভূমি তথ্য সম্পূর্ণ করতে, আসুন desired কাঙ্ক্ষিত উপায়ের ভেক্টর হোন ।
যেহেতু প্রতিসম হয়, এর একক মান মূল্য ক্ষয় (এসভিডি) এবং এর আইজেন্ডেকম্পোজেশনটি স্বয়ংক্রিয়ভাবে ফর্মটি ধারণ করে
কিছু অরথোগোনাল ম্যাট্রিক্স এবং তির্যক ম্যাট্রিক্স ডি 2 এর জন্য । সাধারণভাবে ডি 2 এর তির্যক উপাদানগুলি ননজিগেটেটিভ হয় (বোঝায় যে এগুলির সকলের প্রকৃত বর্গমূল রয়েছে: তির্যক ম্যাট্রিক্স ডি গঠনের জন্য ধনাত্মকগুলি চয়ন করুন )। সি সম্পর্কে আমাদের যে তথ্য রয়েছে সেগুলি বলে যে dia তির্যক উপাদানগুলির মধ্যে এক বা একাধিকটি শূন্য - তবে এটি পরবর্তী কোনও ক্রিয়াকলাপকে প্রভাবিত করবে না এবং এসভিডিকে গণনা করা থেকে বিরত রাখবে না।
আসুন একটি প্রমিত বহুচলকীয় সাধারন বন্টন আছে: প্রতিটি উপাদানের শূন্য গড়, ইউনিট ভ্যারিয়েন্স আছে, এবং সব covariances শূন্য আছেন: তার সহভেদাংক ম্যাট্রিক্স পরিচয় আমি । তারপরে র্যান্ডম ভেরিয়েবল Y = V D X এর কোভারিয়েন্স ম্যাট্রিক্স রয়েছে
ফলে দৈব চলক গড় সঙ্গে একটি বহুচলকীয় সাধারন ডিস্ট্রিবিউশন আছে μ এবং সহভেদাংক ম্যাট্রিক্স সি ।
নিম্নলিখিত R
কোডটি প্রদত্ত মাত্রাগুলি এবং র্যাঙ্কের একটি কোভারিয়েন্স ম্যাট্রিক্স উত্পন্ন করে, এসভিডি (বা, মন্তব্যযুক্ত আউট কোডে একটি ইজেনডিকোপজেশন সহ) এর সাথে বিশ্লেষণ করে, বিশ্লেষণটি নির্দিষ্ট সংখ্যার উপলব্ধির উত্স তৈরি করতে ব্যবহার করে (গড় ভেক্টর 0 সহ ) , এবং তারপরে সেই ডেটাগুলির কোভেরিয়েন্স ম্যাট্রিক্সকে সংখ্যাসূচকভাবে এবং গ্রাফিকভাবে উদ্দেশ্যে কোভেরিয়েন্স ম্যাট্রিক্সের সাথে তুলনা করে। দেখানো, এটা উত্পন্ন 10 , 000 উপলব্ধির যেখানে মাত্রা ওয়াই হয় 100 এবং পদে সি হল 50 । আউটপুট হয়
rank L2
5.000000e+01 8.846689e-05
অর্থাৎ ডাটা পদে হয় এবং সহভেদাংক ম্যাট্রিক্স তথ্য থেকে অনুমান করা যেমন দুরুত্বে 8 × 10 - 5 এর সি পাসে --which। আরও বিশদ বিশদ চেক হিসাবে, সি এর গুণফলগুলি তার অনুমানগুলির বিরুদ্ধে চক্রান্ত করে। তারা সকলেই সমতার লাইনের কাছে থাকে:
কোডটি পূর্ববর্তী বিশ্লেষণের ঠিক সমান্তরাল হয় এবং তাই স্ব-বর্ণনামূলক হওয়া উচিত (এমনকী অ R
ব্যবহারকারীদেরও, যারা এটি তাদের পছন্দের অ্যাপ্লিকেশন পরিবেশে অনুকরণ করতে পারে)। ভাসমান-পয়েন্ট অ্যালগরিদমগুলি ব্যবহার করার সময় এটির একটি বিষয়টি যা প্রকাশ করে তা হ'ল: দুর্বলতার কারণে এর এন্ট্রিগুলি সহজেই নেতিবাচক (তবে ক্ষুদ্র) হতে পারে। বর্গমূলের ডি নিজেই খুঁজে বের করার জন্য এ জাতীয় এন্ট্রিগুলি শূন্য করা দরকার ।
n <- 100 # Dimension
rank <- 50
n.values <- 1e4 # Number of random vectors to generate
set.seed(17)
#
# Create an indefinite covariance matrix.
#
r <- min(rank, n)+1
X <- matrix(rnorm(r*n), r)
C <- cov(X)
#
# Analyze C preparatory to generating random values.
# `zapsmall` removes zeros that, due to floating point imprecision, might
# have been rendered as tiny negative values.
#
s <- svd(C)
V <- s$v
D <- sqrt(zapsmall(diag(s$d)))
# s <- eigen(C)
# V <- s$vectors
# D <- sqrt(zapsmall(diag(s$values)))
#
# Generate random values.
#
X <- (V %*% D) %*% matrix(rnorm(n*n.values), n)
#
# Verify their covariance has the desired rank and is close to `C`.
#
s <- svd(Sigma <- cov(t(X)))
(c(rank=sum(zapsmall(s$d) > 0), L2=sqrt(mean(Sigma - C)^2)))
plot(as.vector(C), as.vector(Sigma), col="#00000040",
xlab="Intended Covariances",
ylab="Estimated Covariances")
abline(c(0,1), col="Gray")
সমাধান পদ্ধতি একটি :
ম্যাটল্যাবে কোডটি হবে
D = 0.5 * (C + C');
D = D + (m - min(eig(CD)) * eye(size(D));
সমাধানের পদ্ধতি বি : তাদের পার্থক্যের ফ্রোবিনিয়াস রীতি অনুযায়ী সি এর নিকটতম ম্যাট্রিক্স ডি সন্ধান করার জন্য একটি উত্তল এসডিপি (সেমিডেফিনেট প্রোগ্রাম) প্রণয়ন এবং সমাধান করুন, যেমন ডি ন্যূনতম ইগেনুয়ালু মি নির্দিষ্ট করে ধনাত্মক সুনির্দিষ্ট।
ম্যাটল্যাবের অধীনে সিভিএক্স ব্যবহার করে কোডটি হবে:
n = size(C,1);
cvx_begin
variable D(n,n)
minimize(norm(D-C,'fro'))
D -m *eye(n) == semidefinite(n)
cvx_end
সমাধান পদ্ধতির তুলনা : প্রাথমিক ম্যাট্রিক্সের প্রতিসাম্য ছাড়াও সমাধান পদ্ধতি একটি সাধারণ মাত্রায় কেবল তির্যক উপাদানকে সামঞ্জস্য করে (বৃদ্ধি করে) এবং অফ-তির্যক উপাদানগুলি অপরিবর্তিত রাখে। সমাধান পদ্ধতি বি সুনির্দিষ্ট সুনির্দিষ্ট ম্যাট্রিক্স ডি এবং মূল ম্যাট্রিক্স সি এর পার্থক্যের ন্যূনতম ফ্রোবেনিয়াস আদর্শের অর্থে, সুনির্দিষ্ট নূন্যতম ইগেনালুযুক্ত সুনির্দিষ্ট সুনির্দিষ্ট ম্যাট্রিক্স সন্ধান করে অফ-তির্যক উপাদানগুলি অন্তর্ভুক্ত করতে ডি - সি এর সমস্ত উপাদানগুলির স্কোয়ার পার্থক্য। সুতরাং অফ-তির্যক উপাদানগুলি সামঞ্জস্য করে, এটি তির্যক উপাদানগুলি বাড়ানোর পরিমাণটি হ্রাস করতে পারে এবং ডায়াগনল উপাদানগুলি অভিন্নভাবে সমস্ত পরিমাণ বৃদ্ধি করার প্রয়োজন হয় না।
আপনি যে মডেলটি অনুমান করছেন তার কথা চিন্তা করেই আমি শুরু করব।
যদি কোনও কোভেরিয়েন্স ম্যাট্রিক্স ইতিবাচক অর্ধ-নির্দিষ্ট না হয় তবে এটি ইঙ্গিত দিতে পারে যে আপনার ভেরিয়েবলগুলিতে আপনার একটি কোলিনারিটি সমস্যা রয়েছে যা মডেলটির সাথে একটি সমস্যা নির্দেশ করবে এবং অগত্যা সংখ্যাসূচক পদ্ধতিতে সমাধান করা উচিত নয়।
যদি সংখ্যাসূচক কারণে ম্যাট্রিক্স ইতিবাচক অর্ধ-চূড়ান্ত না হয়, তবে এখানে কিছু সমাধান রয়েছে যা এখানে পড়তে পারেন
একটি উপায় হ'ল ইগেনুয়ালু পচন থেকে ম্যাট্রিক্স গণনা করা। এখন আমি স্বীকার করব আমি এই প্রক্রিয়াগুলির পিছনে গণিতের খুব বেশি কিছু জানি না তবে আমার গবেষণা থেকে এই সহায়তা ফাইলটি দেখার পক্ষে ফলপ্রসূ মনে হচ্ছে:
http://stat.ethz.ch/R-manual/R-patched/library/Matrix/html/chol.html
আর সম্পর্কিত অন্যান্য কমান্ড
এছাড়াও, ম্যাট্রিক্স প্যাকেজে 'কাছের পিডি' পরীক্ষা করে দেখুন।
দুঃখিত আমি আরও সাহায্য করতে পারি না তবে আমার আশেপাশে আমার অনুসন্ধানগুলি আপনাকে সঠিক দিকে ঠেলে দিতে সহায়তা করতে পারে hope
আর এর ম্যাট্রিক্স প্যাকেজে নিকট পিডি ফাংশন থেকে আপনি ফলাফল পেতে পারেন This এটি আপনাকে একটি সত্যিকারের মূল্যবান ম্যাট্রিক্স ফিরিয়ে দেবে।
library(Matrix)
A <- matrix(1, 3,3); A[1,3] <- A[3,1] <- 0
n.A <- nearPD(A, corr=T, do2eigen=FALSE)
n.A$mat
# 3 x 3 Matrix of class "dpoMatrix"
# [,1] [,2] [,3]
# [1,] 1.0000000 0.7606899 0.1572981
# [2,] 0.7606899 1.0000000 0.7606899
# [3,] 0.1572981 0.7606899 1.0000000