Как найти выбросы в R для MDS? - PullRequest
1 голос
/ 02 мая 2020

Я строю сюжет MDS с данными о зарплате и WAR от бейсболистов. Я приложил это здесь. Поскольку точек данных так много, я просто хочу пометить имена бейсболистов для точек данных выбросов. Есть идеи как это сделать?

enter image description here

1 Ответ

0 голосов
/ 02 мая 2020

Ну, во-первых, это зависит от метода, который вы хотите обнаружить выбросы. Я создаю воспроизводимый пример, так как вы не предоставили набор данных. Я использую набор данных mtcars, который является обычным набором данных, уже реализованным в R.

Для обнаружения выбросов я использую расстояние поваров (вы можете проверить это в сообщении здесь )

Сначала я настроил данные и вычислил расстояние повара (cooksd) с помощью cooks.distance из статистики между переменными hp и sec

df<-cbind( mtcars[,c("hp", "qsec")], cooks.distance(lm(mtcars$hp~mtcars$qsec)))
names(df)[3]<-"cooksd"


plot(cooks.distance(lm(mtcars$hp~mtcars$qsec)))

cookds

Мы видим, что у нас есть два выброса. Я использую порог 4*mean(cooksd) и помечаю их в наборе данных следующим l oop. Они считаются выбросами.

for (i in 1:nrow(df)){
if (df$cooksd[i] > 4* mean(df$cooksd)){
  df$outlier[i] =1
}else {df$outlier[i]=0}
}

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

plot(df$hp, df$qsec,
     text(df[df$outlier==1,"hp"], df[df$outlier==1,"qsec"], row.names(df[df$outlier == 1,]), cex=0.6, pos=4, col="red") )

plot with outlier labels

Огромная проблема с обнаружением выбросов состоит в том, что существуют разные методы, и для каждого случая интерпретация должна быть скорректирована. Какой метод вы хотите использовать или какой порог, здесь не будет ответа, так как это больше обсуждение для stackexchange. Вы можете использовать cooksd, stdev или все, что вам кажется наиболее полезным. Но решение остается прежним:

  1. используйте ваш метод, чтобы найти выбросы
  2. пометьте их в вашем наборе данных
  3. просто внедрите текст в свой график, который вы маркированный.

Для ваших трех кластеров, вам просто нужно сделать lm моделирование для каждого кластера, маркировать выбросы и затем объединить все три результата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...