Превращение бинарных dummy variables — обратно в номинативную в R

Давненько сюда ничего не писал, но видимо, снова начну.

В R порой довольно часто встречающиеся задачи не имеют готовой функции. Ну или я так плохо гуглю, что мне её не удаётся найти. Довольно часто для технических задач необходимо превратить номинативную шкалу в набор «dummy variables».

Как вы провели это лето?
Хорошо
Хорошо
Хорошо
Нормально
Плохо

превращается в

Провёл.лето.хорошо Провел.лето.нормально Провел.лето.плохо
1 0 0
1 0 0
1 0 0
0 1 0
0 0 1

Однако иногда возникает задача обратная — вернуть всё как было. Например, в моём случае, люди ставили галочки в полях анкеты в Excel, что кодировалось в итоге именно в такие переменные. Но при этом галочку они ставили только одну, в одно поле.

Я не нашёл такой готовой функции, так что пришлось писать своё. Функция использует команду melt из пакета reshape

undummy <-function(data) { data$q287328j<-seq(1:nrow(data)) data2<-melt(data,id=c("q287328j")) data3<-data2[which(data2$value==1),] data4<-aggregate(variable~q287328j,data=data3,paste) data5<-merge(data,data4,by="q287328j",all.x=TRUE) as.character(data5$variable) }

На вход подаётся data.frame, состоящий из dummy variables.
На выходе переменная типа character, содержащая перекодированные данные (имена dummy variables, которые были отмечены единичками).
Замечание 1: если не было ни одной единички в строке, то значение ячейки будет NA
Замечание 2: если было больше одной единички в строке, то значение ячейки будет вектором из имён отмеченных переменных

FAQ: Как правильно выполнить перевод из интервальной шкалы в номинативную? Как разделить на «высокий», «средний» и «низкий?

Часто спрашивают — а как правильно разделить шкалу на отрезки, чтобы назвать одну группу — с высокой выраженностью признака, вторую — средней, третью — низкой?

Дело в том, что какого-то необходимого обоснования, в данном вопросе принципиально не может быть, потому что это сугубо оценочная реальность — нет никаких таких математических причин ставить какие-то границы в распределении, кроме как имея какие-то задачи, которые можно верифицировать. Есть просто некоторые способы разбиения шкалы, которые что-то для нас обозначают или являются полезными по каким-то причинам. Например, можно разбивать шкалу на три группы так, чтобы они составляли 25%-50%-25%, если нам надо зачем-то сравнивать крайние группы. А если у нас много участников исследования, то мы можем разбить участников так, чтобы они составляли 10%-80%-10%, и нет решительно никаких причин, которые бы помешали нам поступить подобным образом.

Впрочем, если вы желаете внешне умного и научного решения, то вам следует попробовать (в случае, если имеете дело с нормальным распределением) разделить выборку на части следующим образом — в среднюю попадают все те, чьи результаты окажутся в диапазоне плюс минус половина стандартного отклонения от среднего, а остальные, соответственно, окажутся низкими или высокими. В качестве примера подобного подхода можно привести решение, которым руководствовалась государственная экзаменационная комиссия на психфаке МГУ, только задача её состояла в том, чтобы разделить оценки на четыре категории, соответствующие традиционным оценкам:

Утвердить следующий подход к переводу тестовых баллов в оценки для тестов по специальностям (кафедрам): «отлично» — баллы на шкале выше точки «среднее плюс стандартное отклонение», «неудовлетворительно» — ниже точки «среднее минус стандартное отклонение», «хорошо» — верхняя половина интервала «среднее плюс-минус сигма», «удовлетворительно» — нижняя половина интервала «среднее плюс-минус сигма».

http://psy.msu.ru/educat/dnevn/gos/2008/protokol_test2008.html

Бывают ситуации, когда подобное разделение основано на каком-то интуитивном или же эмприрически подтвержденном принципе. Например, можно установить, что ниже определенного уровня промилле алкоголя в крови в экспериментальных тестах не обнаруживается значимого на уровне p<0.05 отклонения в способности к концентрации внимания и управления автомобилем. Однако, если мы, например, увеличим выборку контрольного исследования с 100 человек до 2000 или наоборот — ужесточим требования по уровню значимости до p<0.01, то мы можем получить другой уровень промилле… В общем, мы можем использовать для разделения группы на какие-то подвыборки сведения, которые лежат за пределами конкретных данных по шкале. Эта проблема в целом известна как проблема понятия нормы в психологии. Норма может быть аксиологической (ценностной), а может быть статистической. Это решение москвичей по поводу системы оценивания является таким крайним проявлением статистической нормы. Иначе говоря, для того, чтобы получить оценку «отлично» можно постараться подготовиться получше, а можно запереть в подвале и не пускать на экзамен всех тех, кто подготовился лучше, потому что оценка твоих знаний зависит не только от знаний, но и от того, кто сдаёт вместе с тобой. И, опять-таки, вне зависимости от того, как подготовилась группа в целом, всё равно каждый шестой уйдёт с двойкой… Завершая эту тему, надо сказать, что делать такое преобразование можно любым удобным вам способом. А удобность определяется целью перевода. Например, если вы собираетесь в дальнейшем сравнивать между собой все группы, то для достижения максимальной мощности проверки лучше делить на группы равной численности. Хочу только предупредить, что игра с принципами такого разделения ради поиска тех точек, при которых анализ даст желаемый результат — сомнительный трюк. Вы можете закончить тем, что разделите выборки на три группы вида 10%-60%-30% и ничем не сможете редактору (или комиссии) объяснить, как вам пришла в голову идея поделить их таким образом. Не объяснять же, в самом деле, что только так получались желанные p<0.05 для очень важной гипотезы?

Круговая диаграмма в R c помощью ggplot: красные, зелёные, золотопогонные

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

Рисование круговой диаграммы в ggplot представляет собой слегка нетривиальную задачу, ибо, как мы увидим дальше, она представляет собой… закрученную столбиковую диаграмму!

library(ggplot2)

Начнём однако, с данных, которые имеет смысл отображать подобным образом. Речь идёт о необходимости отразить на графике данные долей, в сумме дающих 100%. Нашим набором данных станут шесть населённых пунктов. Три из них заняты красными, два зелёными и один — золотопогонными.

vlast<-c("красные","красные", "красные", "зелёные", "зелёные", "золотопогонные")

А впрочем, нет, пусть лучше наши данные будут не вектором а переменной в наборе данных, это более частый случай:

data<-data.frame(vlast=vlast)

Нарисуем для начала простой столбик:

ggplot(data=data, aes(x="", fill=vlast)) + geom_bar(stat="bin")

Выглядит это так:


Read more

Экспорт данных из R в SPSS: проблема меток (VARIABLE & VALUE LABELS) и частичное решение

Странно, что никто до сих пор не озадачился и не сделал нормально работающий импорт-экспорт файлов SPSS в R.

Что я имею в виду? Представим себе файл в SPSS, содержащий единственную переменную «yes», с VARIABLE LABEL «Yes or no», VALUE LABELS {1=»Yes», 0=»No»}. В переменной всего четыре значения.

При использовании функции read.spss из пакета foreign, мы имеем два варианта действий.

require('foreign')
require('Hmisc')
yesT < - read.spss("yes.sav", use.value.labels = TRUE, to.data.frame = TRUE) yesF <- read.spss("yes.sav", use.value.labels = FALSE, to.data.frame = TRUE)

Read more

Как построить гистограмму частот

Конечно, все сейчас строят гистограммы с помощью различных компьютерных средств. Однако в ходе обучения, для лучшего понимания сути происходящего, от студентов порой требуют построить гистограмму вручную. Пять лет назад я постарался сделать хотя и несколько занудное, но предельно доходчивое видео о том, как это делается.

R-language.ru

Наткнулся вот на новый сайт, посвящённый языку R. Хотя сайту всего пара месяцев, там уже довольно много информации, которая может быть полезной интересующимся.

Рецензия: «Партизанские маркетинговые исследования»

Поскольку многие компании хотят маркетинговые исследования «быстро, качественно, дёшево», решил купить и почитать, что советует по этому поводу продвинутый западных эксперт Роберт Дж. Каден в книге «Guerrilla Marketing Research».

Партизанские маркетинговые исследования | Роберт Дж. Каден | Guerrilla Marketing Research | Партизанский маркетинг ISBN 978-5-699-30272-7 Партизанские маркетинговые исследования | Роберт Дж. Каден | Guerrilla Marketing Research | Партизанский маркетинг ISBN 978-5-699-30272-7

Анонс обещал следующее:

Если ваша компания не может позволить себе большие затраты на маркетинговые исследования, а задача развития бизнеса все равно стоит, то эта книга для вас незаменима! Read more