фильтр с низкой дисперсией для нормализованных данных

#r #variance #dimensionality-reduction

Вопрос:

У меня есть набор данных примерно из 76000 столбцов. Поскольку я не могу проверить каждую колонку вручную, я пытаюсь удалить ненужные. Один из выбранных мной способов — использовать фильтр с низкой дисперсией. Тем не менее, поскольку дисперсия зависит от диапазона данных, мне нужно будет ее нормализовать (я замечаю, что некоторые столбцы возвращают высокую дисперсию, так как значение выражено в миллионах, в то время как другие столбцы, выраженные десятичными точками, возвращают небольшую дисперсию).

Тем не менее, после использования scale функции в R во всех моих столбцах я заметил, что все мои столбцы теперь имеют отклонение 1. Я буквально так запутался в том, как сейчас реализовать фильтр с низкой дисперсией. Я использую этот веб-сайт для фильтрации с низкой дисперсией (но мне нужно перевести код Python на R).

P.S. Мне нужно уменьшить размер данных, так как мои данные содержат около 76 тысяч столбцов, и я не могу запустить линейную регрессию или какой-либо тест на них.

Комментарии:

1. Ознакомьтесь со страницей ?scale справки. По умолчанию каждый столбец центрируется, а затем значения делятся на их стандартное отклонение. Не уверен, чего вы ожидали после бега scale .

Ответ №1:

Вам нужно удалить масштабирование из scale() функции, т. е.

 df <- iris[1:50, -5]

sapply(data.frame(scale(df)), var)
#Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
#           1            1            1            1 

sapply(data.frame(scale(df, scale = FALSE)), var)
#Sepal.Length  Sepal.Width Petal.Length  Petal.Width 
#  0.12424898   0.14368980   0.03015918   0.01110612