У меня есть набор данных из 9 образцов (строк) с 51608 переменными (столбцами), и я все время получаю ошибку, когда пытаюсь ее масштабировать:
Это прекрасно работает
pca = prcomp(pca_data)
Однако
pca = prcomp(pca_data, scale = T)
дает
> Error in prcomp.default(pca_data, center = T, scale = T) :
cannot rescale a constant/zero column to unit variance
Очевидно, немного сложно опубликовать воспроизводимый пример. Любые идеи, какова сделка?
Поиск постоянных столбцов:
sapply(1:ncol(pca_data), function(x){
length = unique(pca_data[, x]) %>% length
}) %>% table
Вывод:
.
2 3 4 5 6 7 8 9
3892 4189 2124 1783 1622 2078 5179 30741
Так нет постоянных столбцов. То же самое с NA -
is.na(pca_data) %>% sum
>[1] 0
Это отлично работает:
pca_data = scale(pca_data)
Но потом оба по-прежнему дают ту же самую ошибку:
pca = prcomp(pca_data)
pca = prcomp(pca_data, center = F, scale = F)
Итак, почему я не могу получить масштабированную информацию об этих данных? Хорошо, давайте сделаем 100% уверенным, что он не постоянный.
pca_data = pca_data + rnorm(nrow(pca_data) * ncol(pca_data))
Те же ошибки. Данные Numierc?
sapply( 1:nrow(pca_data), function(row){
sapply(1:ncol(pca_data), function(column){
!is.numeric(pca_data[row, column])
})
} ) %>% sum
Все те же ошибки. У меня нет идей.
Изменить: больше и взломать хотя бы его.
Позже, все еще нелегко класть эти данные, например:
Error in hclust(d, method = "ward.D") :
NaN dissimilarity value in intermediate results.
Значение обрезки под определенным вырезом, например, 1 до нуля не влияло. Что в конечном итоге работало, было обрезка всех столбцов, в столбце которых было больше нуля. Работал для # нулей <= 6, но 7+ дал ошибки. Не знаю, означает ли это, что это проблема вообще или если это только что произошло, чтобы поймать проблемный столбец. Тем не менее, было бы приятно услышать, есть ли у кого-нибудь идеи, потому что это должно работать нормально, если никакая переменная не является всеми нулями (или постоянными по-другому).