Преобразование данных с повторяющимися значениями

У меня много фреймов данных, похожих на

times = c("2015-12-30 20:00:00", "2016-01-06 20:00:00", 
          "2016-01-08 20:00:00", "2016-01-11 20:00:00",
          "2016-01-13 20:00:00", "2016-01-14 20:00:00", 
          "2016-01-15 20:00:00", "2016-01-18 20:00:00",
          "2016-01-20 20:00:00", "2016-01-21 20:00:00", 
          "2016-01-25 20:00:00")
counts = c(7, 14, 61, 1, 2, 66, 10, 35, 1, 304, 2)
df <- data.frame(timestamp = as.POSIXct(times, format="%Y-%m-%d %H:%M:%S",
                                  tz="Pacific/Auckland"),
           count = counts)

Я пытаюсь определить выбросы в наборах данных, аналогичных приведенному выше. Глядя на нормальный график QQ и гистограмму, очевидно, что эта выборка не из нормального распределения.

hist(df$count)

Гистограмма счета df

qqnorm(df$count)
qqline(df$count)

Q-Q график df $ count

Затем я использую преобразование мощности Бокса-Кокса и пытаюсь приблизить данные к нормально распределенным данным.

lambda <- geoR::boxcoxfit(df$count)$lambda
df$transformed <- car::bcPower(df$count, lambda=lambda)

Примечание. Мне известны другие способы поиска параметра преобразования Бокса-Кокса, например использование forecast, или же car пакеты. Существуют также методы, использующие расширенное семейство функций преобразования Бокса-Кокса и оптимизирующие переменные, как в /questions/18238329/kak-prochitat-znachenie-iz-reestra-windows/18238335#18238335. Одна из причин, по которой я не пользуюсь forecast является то, что в большинстве случаев мои данные не равноудалены и не несут типичные свойства временных рядов. Другое дело, что мне нужно автоматизировать процесс. Любой метод, который подходит для GLM или LM вслепую, просто не возвращает ничего полезного.

После преобразования данных и вычисления z-показателей по преобразованным данным мы получаем

             timestamp count transformed      zscore
1  2015-12-30 20:00:00     7   1.7922836 -0.14446864
2  2016-01-06 20:00:00    14   2.3618561  0.22598616
3  2016-01-08 20:00:00    61   3.4646761  0.94326978
4  2016-01-11 20:00:00     1   0.0000000 -1.31018523
5  2016-01-13 20:00:00     2   0.6729577 -0.87248782
6  2016-01-14 20:00:00    66   3.5198741  0.97917102
7  2016-01-15 20:00:00    10   2.0895953  0.04890541
8  2016-01-18 20:00:00    35   3.0646823  0.68311037
9  2016-01-20 20:00:00     1   0.0000000 -1.31018523
10 2016-01-21 20:00:00   304   4.5195550  1.62937200
11 2016-01-25 20:00:00     2   0.6729577 -0.87248782

Хотя после преобразования данные становятся ближе к нормально распределенным данным, наличие точек данных, равных 1 с, искажает процесс стандартизации. Итак, явного выброса вообще не обнаружено. Большинство статей, постов в блогах или аналогичных СМИ по стандартизации данных никогда не говорят об этих крайних случаях.

Когда я начал набирать этот вопрос, я собирался спросить, есть ли другие методы преобразования, которые могут обрабатывать 1, но я понял, что это не имеет значения.

Как бы вы справились с наличием множества одинаковых значений в наборе данных? Особенно, если они находятся на двух крайностях, как минимум или максимум набора данных.

0 ответов

Другие вопросы по тегам