Почему я все еще получаю число больше 1 при нормализации данных в R?

#r

#r

Вопрос:

Я хочу стандартно нормализовать свои данные в R (со средним нулем и стандартным отклонением 1.0 ), и я использую scale() функцию. Все мои числа больше нуля. Но когда я их нормализую, у меня все еще есть такие числа, как; 100, …. и что еще более странно, когда я строю плотность, у меня также есть плотность для отрицательных значений !!.

Вот подмножество моих данных:

 Tr[1:10,]
 [1] 1.287161e 01 1.300534e 00 1.140467e 00 7.958636e-01 4.886365e-01

data<-scale(Tr)
  

Кто-нибудь поможет мне решить эту проблему?

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

1. Рассмотрите возможность публикации подмножества ваших данных и кода, который вы используете, чтобы люди могли воспроизвести ваш результат.

2. Что у вас mean для вектора Tr и что у вас sd для вектора Tr и каково максимальное значение, max , в векторе Tr ?

Ответ №1:

Слишком долго для комментария:

Я не понимаю, почему вы удивлены. То, как вы его используете, scale(...) вычитает среднее значение из каждого значения и делит результат на стандартное отклонение. Таким образом, любые значения, меньшие среднего, будут масштабироваться до отрицательных чисел, а любые значения, превышающие 100 стандартных отклонений от среднего, будут масштабироваться до> 100 (или <-100). Вероятно, у вас есть некоторые выбросы, которые очень велики по сравнению со средним значением / sd.

 set.seed(1)
X <- rpois(1000,5)
Z <- scale(X)
par(mfrow=c(1,2))
hist(X)
hist(Z)
  

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

1. Из любопытства я пытался создать набор данных, в котором X есть a Z > 100 , и до сих пор мне это не удавалось. Я полагаю, что это возможно. Я просто еще не смог сделать это со всеми X > 0 .

2. Это сделает это: X <- c(rep(1,100000000), 10000000000000000000000000) ; Z <- ((X - mean(X)) / sd(X)) ; max(Z)