R эквивалентно выражению SAS "BY" в процедуре PRINCOMP - PullRequest
0 голосов
/ 13 февраля 2020

Я использую R princomp для PCA, однако у меня есть набор данных с переменной фактора, и я хотел бы запустить princomp для каждого фактора.

Это можно сделать в SAS с помощью "BY" утверждение, что « выполняет групповую обработку BY, что позволяет получать отдельные анализы сгруппированных наблюдений» (из https://support.sas.com/rnd/app/stat/procedures/princomp.html)

Может ли это быть выполнено princomp в R или мне нужно разделить мои данные на несколько наборов данных и запустить princomp на каждом?

Всего наилучшего,

1 Ответ

0 голосов
/ 13 февраля 2020

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

data(iris)
str(iris)
# 'data.frame': 150 obs. of  5 variables:
#  $ Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ...
#  $ Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ...
#  $ Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ...
#  $ Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ...
#  $ Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1 1 1 1 1 ...

Сначала разбейте фрейм данных на 3 отдельных фрейма данных, по одному для каждого вида, и сохраните их в списке. Мы пропустим метку вида, поскольку она не будет использоваться в основных компонентах, а затем запустим анализ для каждой группы:

iris.spl <- split(iris[, 1:4], iris$Species)
iris.spl.pca <- lapply(iris.spl, prcomp, scale.=TRUE)

Чтобы сохранить Species в каждом фрейме данных в списке, вы будет использовать следующий код:

iris.spl <- split(iris, iris$Species)
iris.spl.pca <- lapply(iris.spl, function(x) prcomp(x[, 1:4], scale.=TRUE))

Для получения базовых c результатов:

iris.spl.pca

Для получения конкретного результата используйте:

iris.spl.pca[[1]] # or iris.spl.pca[["setosa"]]

I используется prcomp на основании рекомендаций, приведенных в разделе «Сведения» на странице руководства для princomp. Использование scale.=TRUE анализирует матрицу корреляции, удаление ее приведет к анализу ковариационной матрицы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...