#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
есть aZ > 100
, и до сих пор мне это не удавалось. Я полагаю, что это возможно. Я просто еще не смог сделать это со всемиX > 0
.2. Это сделает это:
X <- c(rep(1,100000000), 10000000000000000000000000) ; Z <- ((X - mean(X)) / sd(X)) ; max(Z)