Анализ результатов тестирования студентов с условными вероятностями в R - PullRequest
0 голосов
/ 04 января 2019

У меня есть следующий фрейм данных, в котором хранятся правильные попытки учащихся по каждому вопросу, где «1» обозначает правильную попытку и «0» обозначает неверную попытку, как показано ниже:

structure(list(X1 = c(1, 1), X2 = c(0, 0), X3 = c(1, 1), X4 = c(1, 
0), X5 = c(1, 1), X6 = c(1, 1), X7 = c(1, 1), X8 = c(0, 0), X9 = c(0, 
0), X10 = c(1, 1), X11 = c(1, 1), X12 = c(0, 0), X13 = c(0, 1
), X14 = c(0, 0), X15 = c(0, 0), X16 = c(1, 1), X17 = c(1, 1), 
X18 = c(0, 0), X19 = c(1, 1), X20 = c(0, 0), X21 = c(1, 1
), X22 = c(1, 1), X23 = c(1, 1), X24 = c(1, 1), X25 = c(1, 
1), X26 = c(1, 1), X27 = c(1, 1), X28 = c(0, 0), X29 = c(1, 
1), X30 = c(1, 1), X31 = c(1, 1), X32 = c(0, 0), X33 = c(1, 
1)), row.names = c(NA, -2L), class = c("tbl_df", "tbl", "data.frame"
))

Меня интересует этот вопрос: «учитывая, что учащийся ответил на вопрос 1 неправильно, какова вероятность того, что он тоже ответит неправильно на вопрос Q2?». Или, в более общем смысле, какова вероятность того, что он тоже ответит на Ци неправильно?

Было бы лучше, если бы эти условные вероятности могли быть представлены в матрице, где ij entry - это вероятность того, что он ответит на j-вопрос неправильно, учитывая, что он ответил на i-вопрос неправильно.

Моя основная идея об алгоритме для достижения этой цели заключается в следующем (для i-го вопроса): 1. Подмножество всех строк, где i-я запись равна 0 2. Вычислите пропорции «0» для каждого j-вопроса в подмножественной матрице. 3. Вернуть результат как вектор 4. Повторите 1-3 для всех i и свяжите эти векторы в матрицу.

Но есть ли более быстрый способ достичь того, чего я хочу?

1 Ответ

0 голосов
/ 04 января 2019

Ваш алгоритм имеет смысл; Я не вижу лучшего способа сделать это. Вот реализация, использующая пакет dplyr, который упрощает функцию checkit.

set.seed(34342)
# simulate some data--100 students across 33 questions
x <- data.frame(matrix(sample(c(0,1),3300,replace=T),nrow=100))
# invert x to show incorrect as 1--can then use simple sums
x <- (-x + 1)
checkit <- function(x,n) {
    # filter out students with incorrect for question n and calculate probs
    return(x %>% filter(.,.[,n]==1) %>% {colSums(.)/nrow(.)})
}
# set up destination matrix
probs <- matrix(numeric(33*33), nrow=ncol(x))
# fill it line by line
for (i in 1:33) {
    probs[i,] <- checkit(x,i)
}

На MacBookAir6,2 (середина 2013 г.) было выполнено моделирование 10000 студентов в среднем за 157 мс.

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