मैं एक अशक्त मॉडल तुलना के उपयोग के माध्यम से आपके प्रश्न का अधिक दृश्य उत्तर जोड़ूंगा। प्रक्रिया बेतरतीब ढंग से समग्र स्तंभ को संरक्षित करने के लिए प्रत्येक स्तंभ में डेटा फेरबदल करता है, जबकि चर (कॉलम) के बीच सहसंयोजक खो जाता है। यह कई बार किया जाता है और यादृच्छिक मैट्रिक्स में विलक्षण मानों के परिणामस्वरूप वितरण की तुलना मूल मूल्यों से की जाती है।
मैं मैट्रिक्स अपघटन 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)
यहाँ, 1 विलक्षण मान महत्वपूर्ण है, और कुल विचलन का 92% से अधिक समझाता है:
P <- prcomp(m, center = TRUE)
P$sdev^2 / sum(P$sdev^2)
# [1] 0.924618723 0.053066483 0.017102610 0.005212184