নাল মডেল তুলনা ব্যবহারের মাধ্যমে আমি আপনার প্রশ্নের আরও ভিজ্যুয়াল উত্তর যুক্ত করব। প্রক্রিয়াটি এলোমেলোভাবে প্রতিটি কলামে ডেটা পরিবর্তন করে সামগ্রিক বৈকল্পিকতা সংরক্ষণের জন্য যখন ভেরিয়েবলের (কলাম) মধ্যে স্বীয়তা হারিয়ে যায়। এটি বেশ কয়েকবার সম্পাদিত হয় এবং এলোমেলোভাবে ম্যাট্রিক্সের একক মানগুলির ফলাফল বিতরণকে মূল মানগুলির সাথে তুলনা করা হয়।
আমি ম্যাট্রিক্স পচানোর prcomp
পরিবর্তে ব্যবহার করি svd
, তবে ফলাফলগুলি একই রকম:
set.seed(1)
m <- matrix(runif(10000,min=0,max=25), nrow=100,ncol=100)
S <- svd(scale(m, center = TRUE, scale=FALSE))
P <- prcomp(m, center = TRUE, scale=FALSE)
plot(S$d, P$sdev) # linearly related
নাল মডেল তুলনা নীচে কেন্দ্রিক ম্যাট্রিক্সে সঞ্চালিত হয়:
library(sinkr) # https://github.com/marchtaylor/sinkr
# centred data
Pnull <- prcompNull(m, center = TRUE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda[,1:20], ylim=range(Pnull$Lambda[,1:20], Pnull$Lambda.orig[1:20]), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=FALSE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)
নীচে স্থির রেখাযুক্ত ম্যাট্রিক্সের একটি বক্সপ্লট রয়েছে যেখানে প্রতিটি রেখাযুক্ত মানের 95% কোয়ান্টাইলকে শক্ত রেখা হিসাবে দেখানো হয়। এর পিসিএর মূল মানগুলি m
বিন্দু। এর সবগুলি 95% লাইনের নীচে রয়েছে - সুতরাং তাদের প্রশস্ততা এলোমেলো গোলমাল থেকে আলাদা নয়।
m
একই ফলাফলের কেন্দ্র-কেন্দ্রিক সংস্করণে একই পদ্ধতিটি করা যেতে পারে - কোনও উল্লেখযোগ্য একক মান নেই:
# centred data
Pnull <- prcompNull(m, center = FALSE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda[,1:20], ylim=range(Pnull$Lambda[,1:20], Pnull$Lambda.orig[1:20]), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=TRUE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)
তুলনা করার জন্য, আসুন একটি এলোমেলো ডেটাসেট সহ একটি ডেটাसेट দেখুন: iris
# iris dataset example
m <- iris[,1:4]
Pnull <- prcompNull(m, center = TRUE, scale=FALSE, nperm = 100)
Pnull$n.sig
boxplot(Pnull$Lambda, ylim=range(Pnull$Lambda, Pnull$Lambda.orig), outline=FALSE, col=8, border="grey50", log="y", main=paste("m (center=FALSE); n sig. =", Pnull$n.sig))
lines(apply(Pnull$Lambda, 2, FUN=quantile, probs=0.95))
points(Pnull$Lambda.orig[1:20], pch=16)
এখানে, প্রথম একক মানটি উল্লেখযোগ্য এবং মোট ভেরিয়েন্সের 92% এর বেশি ব্যাখ্যা করেছে:
P <- prcomp(m, center = TRUE)
P$sdev^2 / sum(P$sdev^2)
# [1] 0.924618723 0.053066483 0.017102610 0.005212184