আর ফাংশনগুলি 'প্রিনম্পম্প' এবং 'প্রম্পম্প' কেন বিভিন্ন ইগেনভ্যালু দেয়?


22

আপনি এটি পুনরুত্পাদন করতে ডেকাথলন ডেটাসেট {FactoMineR use ব্যবহার করতে পারেন। প্রশ্নটি হল যে কেন গণিত ইজেনভ্যালুগুলি কোভারিয়েন্স ম্যাট্রিক্সের থেকে পৃথক হয়।

এখানে ইউজভ্যালুগুলি ব্যবহার করে princomp:

> library(FactoMineR);data(decathlon)
> pr <- princomp(decathlon[1:10], cor=F)
> pr$sd^2
      Comp.1       Comp.2       Comp.3       Comp.4       Comp.5       Comp.6 
1.348073e+02 2.293556e+01 9.747263e+00 1.117215e+00 3.477705e-01 1.326819e-01 
      Comp.7       Comp.8       Comp.9      Comp.10 
6.208630e-02 4.938498e-02 2.504308e-02 4.908785e-03 

এবং একই ব্যবহার করে PCA:

> res<-PCA(decathlon[1:10], scale.unit=FALSE, ncp=5, graph = FALSE)
> res$eig
          eigenvalue percentage of variance cumulative percentage of variance
comp 1  1.348073e+02           79.659589641                          79.65959
comp 2  2.293556e+01           13.552956464                          93.21255
comp 3  9.747263e+00            5.759799777                          98.97235
comp 4  1.117215e+00            0.660178830                          99.63252
comp 5  3.477705e-01            0.205502637                          99.83803
comp 6  1.326819e-01            0.078403653                          99.91643
comp 7  6.208630e-02            0.036687700                          99.95312
comp 8  4.938498e-02            0.029182305                          99.98230
comp 9  2.504308e-02            0.014798320                          99.99710
comp 10 4.908785e-03            0.002900673                         100.00000

আপনি আমাকে ব্যাখ্যা করতে পারবেন কেন সরাসরি গণনা করা এগেনভ্যালুগুলি সেগুলি থেকে আলাদা? (ইগেনভেেক্টরগুলি একই রকম):

> eigen(cov(decathlon[1:10]))$values
 [1] 1.381775e+02 2.350895e+01 9.990945e+00 1.145146e+00 3.564647e-01
 [6] 1.359989e-01 6.363846e-02 5.061961e-02 2.566916e-02 5.031505e-03

এছাড়াও, বিকল্প prcompপদ্ধতিটি সরাসরি গণনার মতো একই জাতীয় মূল্য দেয়:

> prc <- prcomp(decathlon[1:10])
> prc$sd^2
 [1] 1.381775e+02 2.350895e+01 9.990945e+00 1.145146e+00 3.564647e-01
 [6] 1.359989e-01 6.363846e-02 5.061961e-02 2.566916e-02 5.031505e-03

কেন PCA/ princompএবং prcompবিভিন্ন eigenvalues ​​দেয়?


আপনি কোভারিয়েন্স ম্যাট্রিক্স বা পারস্পরিক সম্পর্ক ম্যাট্রিক্স ব্যবহার করেন কিনা তার উপর নির্ভর করে পিসিএ আপনাকে বিভিন্ন ফলাফল দেয়।
Charles.y.zheng

7
পার্থক্যগুলি অপেক্ষাকৃত ছোট বলে মনে হয়, যদিও সম্ভবত সাধারণ সংখ্যা হিসাবে খুব বড় be বা দ্বারা সাধারণকরণের মধ্যে কী পার্থক্য হতে পারে , উদাহরণস্বরূপ, এসভিডি বা ইগেনালিয়্যুস পচানোর আগে গণমাধ্যমের একটি অনুমান গণনা করার সময়? এন - 1এনএন-1
কার্ডিনাল

7
@ কার্ডিনালাল চমৎকার অনুমান! লক্ষ্য করুন যে ইগেনভ্যালুগুলির দুটি পৃথক ক্রমের একের পর এক অনুপাত রয়েছে। সুতরাং, একটি সেট অন্য একটি ধ্রুবক একাধিক। একাধিকটি 1.025 = 41/40 ( ঠিক )। এটি কোথা থেকে এসেছে তা আমার কাছে অস্পষ্ট। হয়তো ডেটাসেটে 41 টি উপাদান রয়েছে এবং ওপি প্রথম 10 টি প্রকাশ করছে?
whuber

7
@ কার্ডিনাল প্রকৃতপক্ষে: এর জন্য সহায়তা পৃষ্ঠা princomp: "নোট করুন যে ডিফল্ট গণনাটি কোভরিয়েন্স ম্যাট্রিক্সের জন্য ডিভাইডার এন ব্যবহার করে।" সহায়তা পৃষ্ঠাটির জন্য prcomp: "প্রিনম্পম্পের মতো নয়, বৈকল্পগুলি সাধারণ ডিভোজার এন -1 এর সাথে গণনা করা হয়।"
কারাকাল

2
@ কারাকাল, আপনার মন্তব্যটি একটি উত্তরে অনুলিপি করা উচিত (এবং সম্ভবত এটি সিডব্লিউ করুন) যাতে এটি গ্রহণ করা যায় এবং প্রশ্নের সমাধান হিসাবে চিহ্নিত করা যায়।
কার্ডিনাল

উত্তর:


16

মন্তব্য টি পয়েন্ট আউট, এটা কারণ princompব্যবহারসমূহ ভাজক জন্য, কিন্তু এবং সরাসরি হিসাব ব্যবহার উভয় ব্যবহার পরিবর্তে ।এন - 1 এনএনprcompcovএন-1এন

উভয়ের বিশদ বিভাগে এটি উল্লেখ করা হয়েছে help(princomp):

নোট করুন যে ডিফল্ট গণনাটি কোভরিয়েন্স ম্যাট্রিক্সের জন্য বিভাজক 'এন' ব্যবহার করে।

এবং এর বিশদ বিভাগ help(prcomp):

ভিন্ন princomp, বৈকল্পগুলি স্বাভাবিক বিভাজক N - 1 এর সাথে গণনা করা হয়।

আপনি উত্স এ এটি দেখতে পারেন। উদাহরণস্বরূপ, princompনীচের উত্সের স্নিপেট দেখায় যে গণনা করার সময় ( ) ডিনোমিনেটর হিসাবে ব্যবহৃত হয় ।এনn.obscv

else if (is.null(covmat)) {
    dn <- dim(z)
    if (dn[1L] < dn[2L]) 
        stop("'princomp' can only be used with more units than variables")
    covmat <- cov.wt(z)
    n.obs <- covmat$n.obs
    cv <- covmat$cov * (1 - 1/n.obs)
    cen <- covmat$center
}

আপনি covmatযুক্তির পরিবর্তে যুক্তি নির্দিষ্ট করে এই গুণটিকে এড়াতে পারবেন x

princomp(covmat = cov(iris[,1:4]))$sd^2

পিসিএ স্কোর সম্পর্কিত আপডেট:

cor = TRUEprincompprincompz- রএন

princomp(scale(data))$scoresprincomp(data, cor = TRUE)$scores(এন-1)/এন


1
আপনি "ইতিমধ্যে নিশ্চিত" দিয়ে "অনুমান" করা প্রতিস্থাপন বিবেচনা করতে পারেন (উপরে মন্তব্য স্ট্রিম দেখুন।) আপনি নিজের উত্তরটি সিডব্লু করার জন্য সম্পাদনা করার বিষয়টিও বিবেচনা করতে পারেন। চিয়ার্স।
কার্ডিনাল

@ কার্ডিনাল আমি এই মন্তব্যগুলি দেখিনি। আমি কেবল তাদেরই দেখেছি যে আপ-ভোট হয়েছে। ধন্যবাদ। এছাড়াও, আপনি উত্তর CW তৈরি করার পিছনে যুক্তি ব্যাখ্যা করতে পারেন? এর জন্য কী বিধি / নির্দেশিকা রয়েছে?
জোশুয়া উলিরিচ

কেউ কি অনুমান করতে পারেন যে কোডটি কেবল cv <- cov.wt(z, method="ML")2 ফোলউইং লাইনগুলি অপ্রয়োজনীয় করে তুলছে না ?
করাকাল

2
@ জোশুয়া: উত্তর সিডব্লিউ করার বিষয়ে আমার পরামর্শটি এই মন্তব্যের প্রবাহের মাধ্যমে উত্তরটি প্রকাশিত হয়েছিল এবং "সম্প্রদায়" আলোচনার দ্বারা উত্পন্ন হয়েছিল to যেহেতু এটি মন্তব্যে সমাধান করা হয়েছিল, আমার ধারণা হ'ল এ সহযোগিতা নির্দেশ করার জন্য সিডাব্লু হিসাবে চিহ্নিত হিসাবে একটি উত্তর হিসাবে এটি সংশোধন করার সর্বাধিক বোধ করা হয়েছে এবং এর ফলে উত্তরটি গৃহীত হতে পারে এবং প্রশ্নটিকে সমাধান হিসাবে চিহ্নিত করা যায়। (অন্যথায়, এটি একটি নির্দিষ্ট সময় পরে স্বয়ংক্রিয়ভাবে সফ্টওয়্যার দ্বারা ফিরে আসা হবে।)
কার্ডিনাল

2
@ আমেবা আপনার সম্পাদনা মন্তব্যে এটি উল্লেখ করা সহায়ক হত। Body 450 অক্ষরের উত্তরে "860 টি অক্ষর দেহে যুক্ত হয়েছে" সম্পাদনাটি যুক্তিসঙ্গত কিনা তা মূল্যায়ন করতে কাউকে সহায়তা করে না।
জোশুয়া উলরিচ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.