Удалите выброс в наборе данных перед запуском факторного анализа в R - PullRequest
0 голосов
/ 17 апреля 2019

Введение о моем наборе данных: это данные анкеты, в которых упоминаются различные причины антисоциального поведения студентов.И я хочу провести факторный анализ, чтобы организовать причины, аналогичные фактору.

Например, есть одна причина, по которой учащиеся ведут антисоциальное поведение из-за образования их родителей, а другая причина в том, что это происходит из-за образования их родителей.Между этими двумя причинами есть некоторое сходство, поэтому мне интересно, можно ли объединить эти две причины в один фактор, поэтому я хочу провести факторный анализ, чтобы увидеть, могу ли я объединить разные причины в одном факторе.

Для проведения факторного анализа, удаление моего значения (те, которые меньше, чем среднее значение минус 3 стандартных отклонения, и больше, чем среднее значение, добавляют 3 стандартных отклонения) очень важно из моего понимания.Однако я не уверен, необходимы ли они для данных вопросника, и если они необходимы или, по крайней мере, они не являются полностью избыточными, то с помощью какого кода R я смогу достичь этой цели?

Я провел некоторое исследование по методу медианного абсолютного отклонения (MAD), которое могло бы частично выделить выбросы.И я также написал код R следующим образом:

mad.mean.D.O <- as.numeric(D.O.Mean.data$D.O_Mean)

median(mad.mean.D.O)

mad(mad.mean.D.O, center = median(mad.mean.D.O), constant = 1.4826,
    na.rm = FALSE, low = FALSE, high = FALSE)

print(Upper.MAD <- (median(mad.mean.D.O)+3*(mad(mad.mean.D.O, center = median(mad.mean.D.O), constant = 1.4826,
                                                na.rm = FALSE, low = FALSE, high = FALSE))))

print(Lower.MAD <- (median(mad.mean.D.O)-3*(mad(mad.mean.D.O, center = median(mad.mean.D.O), constant = 1.4826,
                                                na.rm = FALSE, low = FALSE, high = FALSE))))

D.O.clean.mean.data <- D.O.Mean.data %>%
  select(ID_t,
         anonymity,
         fail_exm,
         pregnant,
         deg_job,
         new_job,
         crowded,
         stu_req,
         int_sub,
         no_org,
         child,
         exm_cont,
         lec_sup,
         fals_exp,
         fin_prob,
         int_pro,
         family,
         illness,
         perf_req,
         abroad,
         relevanc,
         quickcash,
         deg_per,
         lack_opp,
         prac_work,
         D.O_Mean) %>%
  filter(D.O_Mean < 4.197032 & D.O_Mean > 0.282968)

Этот код R работает.Однако мне просто интересно, есть ли другие методы, которые могли бы достичь той же цели, но в более простом подходе.

Кроме того, мой набор данных выглядит следующим образом: enter image description here

Все переменные являются данными вопросника, которые измеряются по шкале Ликерта.И все это причины антисоциального поведения.Например, первые участники, она / он дает 1 анонимности, что означает, что не совсем точно, он / она думает, что анонимность не совсем способствует его антисоциальному поведению.

Я был бы очень благодарен за ваш вклад здесь.

1 Ответ

0 голосов
/ 17 апреля 2019

Вы можете попробовать эту функцию, чтобы удалить выбросы.Он будет прочесывать все столбцы для выявления выбросов, поэтому убедитесь, что для временного удаления столбцов не нужно удалять выбросы, и вы можете cbind() вернуть его позже.

#identify outliers
idoutlier<- function(data, cutoff = 3) {
  # Calculate the sd
  sds <- apply(data, 2, sd, na.rm = TRUE)
  # Identify the cells with value greater than cutoff * sd (column wise)
  result <- mapply(function(d, s) {
    which(d > cutoff * s)
  }, data, sds)
  result
}


#remove outliers
rmoutlier<- function(data, outliers) {
  result <- mapply(function(d, o) {
    res <- d
    res[o] <- NA
    return(res)
  }, data, outliers)
  return(as.data.frame(result))
}


cbind() при необходимости, а затем na.omit(), чтобы убрать свои выбросы

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