индуцировано обсуждением вопроса в r-statistics
В СССР в 80-х сборники "братские могилы" по анализу данных буквально пронизывали две идеи статистиков:
- Как сделать критерии для нелинейных задач.
- Как сделать критерии для многомерного анализа данных.
Попробуем применить бутстреп в многомерном анализе данных. Для анализа наличия простой структуры и её объема воспользуемся набором данных "массив Ревелле" из исходной дискуссии.
data(bfi) # чистим данные от неполных случаев data <- na.omit(bfi)
# получаем коррелированные перевыборки из исходной
data.boot<- replicate(1000,
prcomp(data[sample(1:nrow(data),
size=nrow(data),
replace=T),],
center=T,
scale.=T)$sdev)
# получаем некоррелированные перевыборки из исходнойdata.boot.random <- replicate(1000,
prcomp(apply(data,2,
function(x) x[sample(1:length(x),
size=length(x),
replace=T)]),
center=T,
scale.=T)$sdev)
# объединяем оба набора собственных значений принципиальных компонентdata.boot<- cbind(data.boot, data.boot.random) # преобразуем в "длинный" формат, для построения графика
library(reshape)
dimnames(data.boot)<-list(1:length(data.boot[,1]),
paste("v", 1:length(data.boot[1,]), sep=""))
data.melt<- melt.matrix(data.boot,
varnames=names(dimnames(data.boot)))
# строим график всех перевыборок собственных значенийlibrary(ggplot2)
pcp<- ggplot(data.melt,
aes(X1,
value,
group=X2))
pcp+geom_line(colour=alpha("black",1/2))
Как видно 6-ю компоненту выделять уже нельзя.
TODO: провести рефакторинг кода; заменить prcomp() на gmodels::fast.prcomp если это актуально; replicate() на snow версию
![[Image]](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEikg-2vJFpibFNty_FwqyO_0pIRrGiJVSWrPSGj3_e2Y05wgER_Fwjpj1J8itIBOpol3oyB-cKCT1gZ46yzy8FxuaA34sdOBdhlIUEKQZN9dGwKhOtg9INbs2DUebxs_o8kKddAbg1_ySw/s1600/screenshot84.png)