Здравствуйте, гость ( Вход | Регистрация )
19.10.2014 - 20:36
Сообщение
#1
|
|
|
Группа: Пользователи Сообщений: 1 Регистрация: 19.10.2014 Пользователь №: 26750 |
Здравствуйте, коллеги. Проблема такая: в конце работы возникла потребность выделить наиболее частые сочетания поражений. Имеется девять видов поражений, которые выявлены у определенного процента обследованных пациентов. И было бы неплохо как-то обозначить, какие именно сочетания этих поражений встречаются чаще.
|
|
|
![]() |
![]() |
![]() |
19.10.2014 - 21:54
Сообщение
#2
|
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Здравствуйте, коллеги. Проблема такая: в конце работы возникла потребность выделить наиболее частые сочетания поражений. Имеется девять видов поражений, которые выявлены у определенного процента обследованных пациентов. И было бы неплохо как-то обозначить, какие именно сочетания этих поражений встречаются чаще. ну так посчитайте сочетания, что тут трудного? поскольку данных как всегда нет, эмулируем нашего пациента: Код > x<-sample(c(1,0), 9, replace=TRUE) > x [1] 0 0 1 0 0 1 0 0 1 все сочетания осложнений у него получаем вот так: Код > outer(x, x, FUN=paste0) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [1,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [2,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [3,] "10" "10" "11" "10" "10" "11" "10" "10" "11" [4,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [5,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [6,] "10" "10" "11" "10" "10" "11" "10" "10" "11" [7,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [8,] "00" "00" "01" "00" "00" "01" "00" "00" "01" [9,] "10" "10" "11" "10" "10" "11" "10" "10" "11" но нас интересуют только уникальные "над или под диагональю": Код > outer(x, x, FUN=paste0)[upper.tri(matrix(nrow=9, ncol=9))] [1] "00" "01" "01" "00" "00" "10" "00" "00" "10" "00" "01" "01" "11" "01" "01" [16] "00" "00" "10" "00" "00" "10" "00" "00" "10" "00" "00" "10" "00" "01" "01" [31] "11" "01" "01" "11" "01" "01" объединяем все в функцию позволяющую получить данные одного пациента: Код > get.probe <- function(n=9) {x<-sample(c(1,0), n, replace=TRUE); outer(x, x, FUN=paste0)[upper.tri(matrix(nrow=n, ncol=n))]} > get.probe() [1] "10" "11" "01" "10" "00" "10" "10" "00" "10" "00" "10" "00" "10" "00" "00" [16] "10" "00" "10" "00" "00" "00" "11" "01" "11" "01" "01" "01" "01" "11" "01" [31] "11" "01" "01" "01" "01" "11" получаем группу пациентов теперь (для компактности вывода они в "столбцах" Код > replicate(10, get.probe()) [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [1,] "01" "10" "11" "11" "01" "10" "00" "10" "00" "10" [2,] "00" "10" "11" "11" "01" "10" "00" "10" "01" "11" [3,] "10" "00" "11" "11" "11" "00" "00" "00" "01" "01" [4,] "01" "11" "10" "10" "00" "10" "01" "10" "00" "10" [5,] "11" "01" "10" "10" "10" "00" "01" "00" "00" "00" [6,] "01" "01" "10" "10" "10" "00" "01" "00" "10" "10" [7,] "01" "10" "11" "10" "00" "11" "00" "10" "01" "11" [8,] "11" "00" "11" "10" "10" "01" "00" "00" "01" "01" [9,] "01" "00" "11" "10" "10" "01" "00" "00" "11" "11" [10,] "11" "10" "01" "00" "00" "01" "10" "00" "01" "01" [11,] "00" "10" "10" "11" "00" "11" "00" "11" "01" "10" [12,] "10" "00" "10" "11" "10" "01" "00" "01" "01" "00" [13,] "00" "00" "10" "11" "10" "01" "00" "01" "11" "10" [14,] "10" "10" "00" "01" "00" "01" "10" "01" "01" "00" [15,] "10" "00" "10" "01" "00" "11" "00" "01" "11" "10" [16,] "01" "11" "11" "10" "01" "10" "00" "11" "00" "10" [17,] "11" "01" "11" "10" "11" "00" "00" "01" "00" "00" [18,] "01" "01" "11" "10" "11" "00" "00" "01" "10" "10" [19,] "11" "11" "01" "00" "01" "00" "10" "01" "00" "00" [20,] "11" "01" "11" "00" "01" "10" "00" "01" "10" "10" [21,] "01" "01" "01" "10" "01" "10" "00" "11" "10" "00" [22,] "01" "10" "11" "10" "01" "10" "01" "10" "00" "10" [23,] "11" "00" "11" "10" "11" "00" "01" "00" "00" "00" [24,] "01" "00" "11" "10" "11" "00" "01" "00" "10" "10" [25,] "11" "10" "01" "00" "01" "00" "11" "00" "00" "00" [26,] "11" "00" "11" "00" "01" "10" "01" "00" "10" "10" [27,] "01" "00" "01" "10" "01" "10" "01" "10" "10" "00" [28,] "11" "10" "11" "00" "11" "00" "01" "10" "00" "00" [29,] "01" "11" "10" "11" "01" "10" "01" "11" "01" "10" [30,] "11" "01" "10" "11" "11" "00" "01" "01" "01" "00" [31,] "01" "01" "10" "11" "11" "00" "01" "01" "11" "10" [32,] "11" "11" "00" "01" "01" "00" "11" "01" "01" "00" [33,] "11" "01" "10" "01" "01" "10" "01" "01" "11" "10" [34,] "01" "01" "00" "11" "01" "10" "01" "11" "11" "00" [35,] "11" "11" "10" "01" "11" "00" "01" "11" "01" "00" [36,] "11" "01" "10" "01" "11" "00" "11" "01" "01" "00" любое сочетание можно оценить применив table(): Код > table(replicate(100, get.probe())[1,]) 00 01 10 11 27 23 29 21 ну или все сочетания одновременно: Код > d <- replicate(100, get.probe()) > t(sapply(1:nrow(d), function(i) table(d[i,]))) 00 01 10 11 [1,] 28 22 22 28 [2,] 18 32 21 29 [3,] 22 28 17 33 [4,] 26 24 29 21 [5,] 27 23 28 22 [6,] 23 16 32 29 [7,] 25 25 24 26 [8,] 26 24 23 27 [9,] 18 21 31 30 [10,] 28 27 21 24 [11,] 24 26 25 25 [12,] 23 27 26 24 [13,] 21 18 28 33 [14,] 25 30 24 21 [15,] 24 25 25 26 [16,] 23 27 29 21 [17,] 20 30 32 18 [18,] 18 21 34 27 [19,] 26 29 26 19 [20,] 22 27 30 21 [21,] 27 22 25 26 [22,] 25 25 27 23 [23,] 27 23 25 25 [24,] 20 19 32 29 [25,] 31 24 21 24 [26,] 31 18 21 30 [27,] 28 21 24 27 [28,] 25 27 27 21 [29,] 22 28 24 26 [30,] 22 28 24 26 [31,] 17 22 29 32 [32,] 24 31 22 23 [33,] 25 24 21 30 [34,] 26 23 20 31 [35,] 26 26 20 28 [36,] 25 27 21 27 когда не все уровни в таблице населены, то понадобится их "прибить" гвоздями Код > d <- replicate(10, get.probe()) > t(sapply(1:nrow(d), function(i) table(factor(d[i,], levels=c("00","01","10","11")))) ) 00 01 10 11 [1,] 2 2 5 1 [2,] 1 3 5 1 [3,] 5 2 1 2 [4,] 0 4 3 3 [5,] 2 5 1 2 [6,] 3 3 0 4 [7,] 3 1 4 2 [8,] 6 1 1 2 [9,] 4 2 3 1 [10,] 2 1 5 2 [11,] 2 2 6 0 [12,] 6 1 2 1 [13,] 6 0 2 2 [14,] 3 0 5 2 [15,] 6 1 2 1 [16,] 2 2 1 5 [17,] 1 6 2 1 [18,] 2 4 1 3 [19,] 1 2 2 5 [20,] 2 5 1 2 [21,] 3 5 0 2 [22,] 2 2 4 2 [23,] 5 2 1 2 [24,] 3 3 3 1 [25,] 1 2 5 2 [26,] 5 2 1 2 [27,] 5 3 1 1 [28,] 1 2 5 2 [29,] 2 2 2 4 [30,] 4 3 0 3 [31,] 2 4 2 2 [32,] 0 3 4 3 [33,] 3 4 1 2 [34,] 3 5 1 1 [35,] 1 2 3 4 [36,] 3 3 1 3 как то так ![]() |
|
|
![]() |
![]() |
Листопадничек Как выделить сочетания признаков? 19.10.2014 - 20:36
anserovtv Такие задачи можно решать с помощью TURF-анализа. ... 19.10.2014 - 21:50
p2004r Цитата(anserovtv @ 19.10.2014 - 21:5... 19.10.2014 - 22:31
nokh Цитата(Листопадничек @ 19.10.2014 - 23... 20.10.2014 - 18:46![]() ![]() |