Posts

кириллица и R

долго не мог понять, почему в Rgui под Windows выполнение строки вида

матрица <- matrix(1:15, nrow = 5)

при нажатии сочетания клавиш Ctrl+R из скрипта иногда проходит без проблем, а иногда вызывает такое сообщение об ошибке:

> ??????? <- matrix(1:15, nrow = 5)
Error: unexpected assignment in "??????? <-"

Ларчик просто открывался: нужно перейти на русскую раскладку клавиатуры перед запуском строки на исполнение. Что интересно, выполнение выделенного блока команд или всего скрипта не вызывает проблем

метод категориальной сортировки в R

Image
С помощью R очень просто реализуется метод категориальной сортировки, буквально в одну строку. Например, пусть трое испытуемых классифицируют шесть стимулов на группы:
x <- read.table(text="
  e1 e2 e3
A 1 1 1
B 1 1 2
C 1 2 1
D 2 2 2
E 2 3 1
F 2 3 2
", header = TRUE)

m <- Reduce("+", lapply(x, function(e) ifelse(dist(e, "manhattan"), 1, 0)))
attr(m, 'Labels') <- row.names(x)
plot(hclust(m))

  1 2 3 4 5
2 1       
3 1 2     
4 3 2 2   
5 2 3 2 2 
6 3 2 3 1 1



Да, поскольку это мое собственное оригинальное решение, ссылка на автора обязательна

Вопросы множественного выбора в R

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

library(haven)

filename <- "http://sociology.in.ua/examples/multvar.sav"
x <- read_sav(filename, user_na = FALSE)

attr(x, "multiple.response.sets") <- list(
  V1 = list(
    variables = sprintf("V1_%d", 1:5),
    variable_coding = "dichotomies",
    counted_value = 1,
    label = "Какие из проблем Вас заботят больше всего?"
  )
)

mrtable <- function(data, set_name, weight = rep(1, dim(data)[1]),
  counts = TRUE, validn_pct = TRUE, totaln_pct =…

сохранение названий размерностей

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

require(xlsx)

write_xlsx <- function (x, file, sheetName = "Sheet1", col.names = TRUE, row.names = TRUE,
          append = FALSE, ...)
{
  if (append && file.exists(file)) {
    wb <- loadWorkbook(file)
  } else {
    ext <- gsub(".*\\.(.*)$", "\\1", basename(file))
    wb <- createWorkbook(type = ext)
  }
  sheet <- createSheet(wb, sheetName)
  rows  <- createRow(sheet, rowIndex=1:2)
  cells <- createCell(rows, colIndex=1:2)
  addDataFrame(x, sheet, col.names = col.names, row.names = row.names,
               startRow = 2, star…

Преподаватель как родитель

Выгорая от преподавательской работы и снова восстанавливаясь, я в конце концов понял некоторую важную вещь про себя. Это понимание возникло после разговора с одним умным человеком об отношениях между родителями и детьми. Вполне возможно, что причиной моего выгорания является аналогичное родительскому желание причинить добро во что бы то ни стало. Мне хочется, чтобы студент совершенствовался именно в том, в чем преуспел я, но достиг бы большего жизненного успеха. Бывшие студенты становятся клерками, менеджерами по продажам, заштатными программистами. А тебе хочется, чтобы они достигали гораздо большего — создавали новое, руководили собственными компаниями, были бы известными учеными. Именно этого добивается неразумный родитель, пытаясь побороть собственный комплекс неполноценности. Он нетерпеливо задает жизненные цели ребенку вместо того, чтобы помочь ему выработать свои, оценивает достижения с высоты своих притязаний и прошлого опыта. Так что, просто отступить в сторону и помогать те…