Понимание `scale` в R

Я пытаюсь понять определение scale, которое дает R. У меня есть данные (mydata), с которыми я хочу составить тепловую карту, и есть ОЧЕНЬ сильный положительный перекос. Я создал тепловую карту с дендрограммой для scale(mydata) и log(my data), и дендрограммы для обоих разные. Почему? Что означает масштабирование моих данных по сравнению с преобразованием моих данных в журнал? И что было бы более подходящим, если бы я хотел посмотреть на дендрограмму, иллюстрирующую взаимосвязь между столбцами моих данных?

Спасибо за любую помощь! Я читал определения, но они кричат ​​мне над головой.


person Jen    schedule 28.11.2013    source источник


Ответы (4)


log просто берет логарифм (основание e, по умолчанию) каждого элемента вектора.
scale, с настройками по умолчанию, вычисляет среднее и стандартное отклонение всего вектора, затем "масштабирует" каждый элемент по этим значениям на вычитание среднего и деление на SD. (Если вы используете scale(x, scale=FALSE), вычитается только среднее значение, но не делится на стандартное отклонение.)

Обратите внимание, что это даст вам те же значения

   set.seed(1)
   x <- runif(7)

   # Manually scaling
   (x - mean(x)) / sd(x)

   scale(x)
person Ricardo Saporta    schedule 28.11.2013
comment
Спасибо за ответ! Но каково значение scale ()? Какие у меня причины для его использования (это улучшает внешний вид данных и т. Д.). Я просто пытаюсь понять «точку» шкалы (). Спасибо! - person Jen; 28.11.2013
comment
scale имеет больше смысла, когда у вас есть несколько переменных, которые вы рассматриваете в разных масштабах. например, одна переменная имеет порядок величины 100, а другая - порядка 1000000. - person Ricardo Saporta; 28.11.2013
comment
@Jen: Другой (очень неудачный) способ подумать об этом: при использовании scale вы не меняете данные, а меняете масштаб (значения оси при построении). Подумайте о том, чтобы схватить ось за два конца и растянуть или сжать ее. Это масштаб. Напротив, log фактически изменяет данные. Влияние журнала сильнее для больших значений и более минимально для меньших значений. - person Ricardo Saporta; 28.11.2013
comment
@@ Ricardo Saporta, ладно, спасибо, это имеет смысл! Особенно мне понравилась идея смотреть на несколько переменных с разными масштабами! Большое спасибо! - person Jen; 29.11.2013
comment
@RicardoSaporta, эти формулы не совпадают! Я просто проверяю их - person sherek_66; 09.08.2019

Он не обеспечивает ничего, кроме стандартизации данных. Создаваемые им значения известны под несколькими разными именами, одно из которых - z-score («Z», потому что нормальное распределение также известно как «Z-распределение»).

Больше можно найти здесь:

http://en.wikipedia.org/wiki/Standard_score

person vonjd    schedule 28.10.2014

Это последнее добавление, но я сам искал информацию о функции масштабирования, и хотя это может помочь кому-то еще.

Чтобы немного изменить ответ от Рикардо Сапорта.
Масштабирование не сделано с использованием стандартного отклонения, по крайней мере, не в версии 3.6.1 R, я основываю это на "Becker, R. (2018). Новый язык S. CRC Press." и мои собственные эксперименты.

X.man.scaled <- X/sqrt(sum(X^2)/(length(X)-1))
X.aut.scaled <- scale(X, center = F)

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

Я бы ответил в комментарии, но репутации не хватило.

person oflyt    schedule 12.11.2019
comment
Из документации scale: значение масштаба определяет, как выполняется масштабирование столбца (после центрирования). Если scale - это числовой вектор с длиной, равной количеству столбцов x, то каждый столбец x делится на соответствующее значение из scale. Если scale имеет значение TRUE, то масштабирование выполняется путем деления (центрированных) столбцов x на их стандартные отклонения, если center имеет значение TRUE, и среднеквадратичное значение в противном случае. Если масштаб равен FALSE, масштабирование не выполняется. Это означает, что ваша формула верна потому что вы не центрировали сначала - person digestivee; 05.03.2020

Я подумал, что внесу свой вклад, предоставив конкретный пример практического использования функции масштабирования. Предположим, у вас есть 3 результата тестов (по математике, естествознанию и английскому языку), которые вы хотите сравнить. Возможно, вы даже захотите создать сводную оценку на основе каждого из 3 тестов для каждого наблюдения. Ваши данные могут выглядеть так:

student_id <- seq(1,10)
math <- c(502,600,412,358,495,512,410,625,573,522)
science <- c(95,99,80,82,75,85,80,95,89,86)
english <- c(25,22,18,15,20,28,15,30,27,18)
df <- data.frame(student_id,math,science,english)

Очевидно, не имеет смысла сравнивать средние значения этих трех оценок, поскольку шкала оценок сильно различается. Однако, масштабируя их, вы получаете более сопоставимые единицы оценки:

z <- scale(df[,2:4],center=TRUE,scale=TRUE)

Затем вы можете использовать эти масштабированные результаты для создания составной оценки. Например, усредните значения и присвойте оценку на основе процентилей этого среднего. Надеюсь, это помогло!

Примечание: я позаимствовал этот пример из книги «R в действии». Отличная книга! Определенно рекомендую.

person jclifto8    schedule 02.06.2020