Molbiol.ru | О проекте | Справочник | Методы | Растворы | Расчёты | Литература | Орг.вопросы Web | Фирмы | Coffee break | Картинки | Работы и услуги | Биржа труда | Zbio-wiki NG SEQUENCING · ЖИЗНЬ РАСТЕНИЙ · БИОХИМИЯ · ГОРОДСКИЕ КОМАРЫ · А.А.ЛЮБИЩЕВ · ЗООМУЗЕЙ Темы за 24 часа [ Вход* | Регистрация* ] Форум: | |
Boreal |
Работаем в R Изучаем микроэлементный состав почв в зависимости от свойств последних. Есть массив данных из 56 переменных(м/эл, свойства..) по 14 наблюдений каждая. Нужно сделать факторный анализ или что-то типа того, чтобы выделить группы переменных коррелирующих между собой. PCA был бы идеален, но программа выдаёт ошибку. Error in princomp.default(Ep) : 'princomp' может быть использовано только если наблюдений больше чем переменных. Подскажите что делать в моём случае когда переменных много а повторностей - мало? |
bf109xxl Участник |
:) |
Den-N Постоянный участник |
(Boreal @ 13.11.2017 15:13) Здравствуйте, Работаем в R ... Подскажите что делать в моём случае когда переменных много а повторностей - мало? Что-то должно сработать: 1) Использовать не princomp(), а prcomp(). Или PCA() из пакета FactoMineR. Возможно есть ещё пакеты с собственной реализацией алгоритма. Возможно даже лучше будут нелинейные главные компоненты из пакета homals 2) PCA считается не по индивидуальным значениям, а по матрице корреляций. Для матрицы корреляций не важно по скольки наблюдениям получено значение: по 14 или по 14000. Попробуйте подать на вход не сырые данные, а матрицу корреляций (вроде такое можно). 3) Обычно PCA используется в качестве эксплораторной техники, без статпроверки. Поэтому можно просто продублировать свои исходные данные многократно, чтобы обойти формальность превышения числа переменных над числом наблюдений. На числовых результатах нагрузок и графиках осыпи и биплотов это никак не скажется (кроме того, что одни точки будут многократно продублированы). В любом из 3х случаев к результатам следует относиться как к самым общим тенденциям. 14 - даже не малая выборка (n=30). Устойчивость любого решения будет очень низкой. Концентрации микроэлементов распределены не нормально, а асимметрично. Желательно сделать перед анализом преобразование Бокса - Кокса, ну или попробовать прологарифмировать. Иначе корреляции будут натягивать не все данные, а лишь хвосты распределений - получится ерунда. Ну или homals - там ранги можно задать вместо исходных. |
Boreal |
Вы как всегда заменяете многочасовое изучение литературы, теперь можно двигаться в правильном направлении. Матрицу корреляций сделали (см. приложение). Конечно общие тенденции можно посмотреть и здесь. Однако PCA легче интерпретировать. За Бокса-Кокса спасибо, думаю после трансформации картина изменится. Удачи всем и преодоления препятствий! Картинки: Rplot103.jpeg — (5.06мб) |
Boreal |
(bf109xxl @ 13.11.2017 19:51) Наверное, продолжать накапливать данные, пока число наблюдений не превзойдет число переменных. (с) К-н Очевидность. Да, это самый правильный путь, согласен! Так и поступим в будущем.... |
pApA2017 |
|
Boreal |
(pApA2017 @ 14.11.2017 23:21) Код построения корреляционной матрицы(если Вы это имели ввиду): library(corrplot) Mcor=cor(Ept) corrplot(Mcor, method = "color", addCoef.col = "black", order = "AOE", addgrid.col = "gray33", tl.col = "black") |
PS2004R Постоянный участник |
(Boreal @ 13.11.2017 12:13) Здравствуйте, Работаем в R Изучаем микроэлементный состав почв в зависимости от свойств последних. Есть массив данных из 56 переменных(м/эл, свойства..) по 14 наблюдений каждая. Нужно сделать факторный анализ или что-то типа того, чтобы выделить группы переменных коррелирующих между собой. PCA был бы идеален, но программа выдаёт ошибку. Error in princomp.default(Ep) : 'princomp' может быть использовано только если наблюдений больше чем переменных. Подскажите что делать в моём случае когда переменных много а повторностей - мало? просто поверните "на бок" входные данные вместо prcomp(data) напишите prcomp(t(data), center=F) |
Den-N Постоянный участник |
|
Boreal |
|
Boreal |
(Den-N @ 19.11.2017 12:11) Тут ещё в голову пришло: раз у вас 2 разнокачественных блока данных (элементы и свойства почвы), можно попробовать не корреляционную технику (PCA), а регрессионную. Для этого используется анализ избыточности (Redundancy analysis) - есть в пакте vegan или его модификация, "заточенная" на прогноз: PLS (Partial Least Squares = Projection on Latent Structures) - есть в chemometrics и др. Они хороши, если стоит задача спрогнозировать свойства по химии, или химию по свойствам. В хемометрии плоские данные - норма, там вообще не будет проблем с малым числом образцов. Ещё раз благодарю за совет. PLS нам бы подошёл я думаю. Начал изучать, но литературы на русском крайне мало. Как это реализуется в R, не нашёл вообще, кроме самих инструкций к пакету chemometrics. На английском смотрю видео, читаю, но пока понимается с трудом(и дело тут не в языке). Может подскажете где доходчиво про PLS и по возможности с примерами из био/экологии. Буду очень признателен. Сообщение было отредактировано Boreal - 21.11.2017 08:54 |
Den-N Постоянный участник |
Пример брал какой-то известный набор данных о 16 химических показателях 6 соков и их вкусовых оценках 96 судьями: матрица 6 х (16+96) !!! Записи сохранил, воспроизвести смогу, но к сожалению практики и опыта - никакого. Из пакетов под R пробовал только pls() и он мне решительно не понравился (обсуждалось частично здесь: На этом форуме есть уверенный пользователь PLS из области экологии - elenag1999, может поделится опытом? Сообщение было отредактировано Den-N - 21.11.2017 20:27 |
Guest IP-штамп: frmrnFbN2RFq. гость |
|
Guest IP-штамп: frsMoUrr6hEUk гость |
Никакой разницы между рассматривать (или использовать для проведения кластерного анализа) prcomp(data, center=F)$x и prcomp(t(data), center=F)$rotation нет. |
Guest IP-штамп: frsMoUrr6hEUk гость |
CODE > (replicate(10,(runif(3)))) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [1,] 0.4320640 0.3545240 0.03002239 0.91802507 0.1823844 0.87899911 0.9559072 [2,] 0.4054141 0.5985633 0.12557930 0.05490739 0.1867989 0.29367130 0.4412311 [3,] 0.5147542 0.6579623 0.45617345 0.26344359 0.3235306 0.01495959 0.5873251 [,8] [,9] [,10] [1,] 0.2267658 0.1312234 0.3621873 [2,] 0.3515767 0.9822658 0.8614734 [3,] 0.2565720 0.9272156 0.4088809 > prcomp(replicate(10,(runif(3)))) Standard deviations (1, .., p=3): [1] 5.145826e-01 3.791127e-01 5.891253e-17 Rotation (n x k) = (10 x 3): PC1 PC2 PC3 [1,] 0.29189670 -0.12477372 -0.54680004 [2,] 0.27829072 0.36654513 -0.01973844 [3,] -0.20965476 0.19880671 0.28569688 [4,] 0.36987497 0.18800831 0.51753448 [5,] -0.44460445 0.52685999 -0.37726807 [6,] -0.06923176 -0.22199913 0.02599552 [7,] 0.15438000 0.64425800 -0.05546027 [8,] -0.01846328 0.15924325 0.01060299 [9,] 0.62258803 0.06610686 -0.04982373 [10,] 0.20574717 -0.05952305 -0.44997537 > prcomp(replicate(10,(runif(3))))$x PC1 PC2 PC3 [1,] -0.4390122 -0.30402966 -5.551115e-17 [2,] 0.7157794 -0.04969772 -2.081668e-17 [3,] -0.2767672 0.35372738 2.636780e-16 > |
Boreal |
Сообщение было отредактировано Boreal - 29.11.2017 08:11 |
nikonevv |
|
guest: 123 IP-штамп: frJhOCvSv9ICE гость |
|
guest: 123 IP-штамп: fr4iy3.kHUw02 гость |
|
guest: 123 IP-штамп: frAWeMdOsBSXM гость |
|
« Предыдущая тема · Биофизика и матметоды в биологии · Следующая тема » |