Есть ли способ применить PCA на два растровых стека (с одной и той же переменной) - PullRequest
0 голосов
/ 07 апреля 2019

Я пытаюсь запустить PCA для некоторых биоклиматических переменных в R, в частности, текущих и будущих проекций биоклиматических переменных из worldclim.org.

Проблема заключается в том, что prcomp может работать только с одним растровым стеком.Я хотел, чтобы prcomp работал над двумя растровыми стеками одновременно.Растровые стеки, которые имеют точно такой же набор переменных (имен и экстентов), но имеют разные значения ячеек.

У меня есть обходной метод для решения этой проблемы, который заключается в смещении экстента будущих растровых слоев иобъединить их с текущими в один обширный набор растровых слоев.Но это дает мне много проблем проекции с другими данными, которые я хотел бы использовать вместе с этим.

Я понимаю, что это не совсем понятно, но в основном: два растровых стека PCA с одинаковыми переменными, с одинаковыми координатами,без необходимости сдвигать экстент.

Спасибо!

Изменения: я не мог понять, как получить данные или создать пример данных, поэтому изначально не включал пример кода.Постараюсь быть более понятным здесь.

filesC # location of bioclimate files for current
[1] "bio01.asc" "bio02.asc" "bio03.asc" "bio04.asc" "bio05.asc"
filesF # location of bioclimate files for the future
[1] "bio01.asc" "bio02.asc" "bio03.asc" "bio04.asc" "bio05.asc"
# note they have the exact same variables.

rasC <- stack(filesC)
rasF <- stack(filesF)
rasC@extent
#class       : Extent 
#xmin        : 116.95 
#xmax        : 126.6 
#ymin        : 4.65 
#ymax        : 21.11667 
rasF@extent
#class       : Extent 
#xmin        : 116.95 
#xmax        : 126.6 
#ymin        : 4.65 
#ymax        : 21.11667 
# and exact same extent

Так что в настоящее время я делаю это.

pcaC <- prcomp(rasC, scale = T)
FutPCs <- predict(rasF, pcaC) 
# creating PCs of rasF based on the pca from rasC

Однако я хотел бы применить PCA на оба растровых стека одновременно.Построение «формулы PCA» на основе переменных из текущих и будущих биоклиматических переменных.вот так ...

pca <- prcomp(rasC, rasF, scale = T)
CurPCs <- predict(rasC, pca)
FutPCs <- predict(rasF, pca)

Надеюсь, это понятнее!

1 Ответ

0 голосов
/ 14 апреля 2019

Для людей, которые сталкиваются с этим постом с похожими проблемами. Я нашел простой ответ на эту проблему.

prcomp

Не работает непосредственно с самими растрами, а скорее с матрицей (обычно случайной) точек из растра. Чтобы объединить анализ PCA для двух растровых стеков, я просто включил равные части точек из каждого стека растров и связал их вместе.

rasC <- stack(rasC)
rasF <- stack(rasF)

srC <- sampleRandom(rasC, 10000)
srF <- sampleRandom(rasF, 10000)

srCF <- rbind(srC,srF)
pcaCF <- prcomp(srCF,scale=T)

Оттуда я могу предсказать новые ПК на основе объединенного pca двух наборов данных. Не осознавал, что должен был быть такой шаг, но, по крайней мере, я думаю, что он решен!

...