![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
![]()
Сообщение
#1
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Провели анализ микробных ассоциаций в ожоговых ранах, выборка хорошая - более 400 проб. При оценке значимости ассоциаций с помощью индекса Жаккара в R-пакете jaccard выявилась такая штука: относительно большие индексы могли оказаться незначимыми (J=0.32; Р=0,504), а почти нулевые - значимыми (J=0.06; P=0.049). Если интересно - могу выложить данные, хотя я понял почему так происходит и сделал простой маленький пример. Стал искать другие пути, но не получается справиться самостоятельно. Буду очень признателен за помощь. Описание проблемы и вопросы в прикреплённом файле Help. Второй файл - статья, на которую есть надежда. Может ещё какие варианты подскажите...
Сообщение отредактировал nokh - 17.05.2019 - 00:49
Прикрепленные файлы
![]() ![]() |
|
![]() |
![]() |
![]()
Сообщение
#2
|
|
![]() Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 ![]() |
Провели анализ микробных ассоциаций в ожоговых ранах, выборка хорошая - более 400 проб. При оценке значимости ассоциаций с помощью индекса Жаккара в R-пакете jaccard выявилась такая штука: относительно большие индексы могли оказаться незначимыми (J=0.32; Р=0,504), а почти нулевые - значимыми (J=0.06; P=0.049). Если интересно - могу выложить данные, хотя я понял почему так происходит и сделал простой маленький пример. Стал искать другие пути, но не получается справиться самостоятельно. Буду очень признателен за помощь. Описание проблемы и вопросы в прикреплённом файле Help. Второй файл - статья, на которую есть надежда. Может ещё какие варианты подскажите... Единственно разумный подход это (как и написано в обзоре литературы статьи) рандомизационный тест (или он + бутстреп доверительный интервал на сами частоты, что тоже там есть). Причина -- прямой подсчет частот не дает оценки мощности исследования и размера эффекта, что делает весь этот индекс практически эквивалентным "достигнутому p". Это все о практически полезных конструктивных результатах которые можно извлечь из этой ситуации. (Ну а статью с "индексом своего имени" конечно не запрещено написать никому ![]() ![]() |
|
![]() |
![]() |
![]()
Сообщение
#3
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
Провели анализ микробных ассоциаций в ожоговых ранах, выборка хорошая - более 400 проб. При оценке значимости ассоциаций с помощью индекса Жаккара в R-пакете jaccard выявилась такая штука: относительно большие индексы могли оказаться незначимыми (J=0.32; Р=0,504), а почти нулевые - значимыми (J=0.06; P=0.049). Если интересно - могу выложить данные, хотя я понял почему так происходит и сделал простой маленький пример. Стал искать другие пути, но не получается справиться самостоятельно. Буду очень признателен за помощь. Описание проблемы и вопросы в прикреплённом файле Help. Второй файл - статья, на которую есть надежда. Может ещё какие варианты подскажите... По поводу формул (16) и (17) из статьи - да все правильно: VR3,N=3^N по ф-ле (14). Соответственно, VR2,N-x=2^(N-x). Оба этих коэффициента получены в предположении, что D=0, откуда делаем единственно возможный вывод, что применительно к нашему случаю N=A+B+C+0=A+B+C. Можете смело программировать. К слову, для рассматриваемой в качестве примера таблицы с(5,1,1,0) для J=,71428571 вычисления по формуле (17) дают p-value=.045267. При всем при том, что тест отношения правдоподобия для этой таблицы статистически не значим. Сообщение отредактировал 100$ - 17.05.2019 - 20:58 |
|
![]() |
![]() |
![]()
Сообщение
#4
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Благодарю откликнувшихся!
1) <p2004r. Индекс Жаккара неэквивалентен достигнутому Р - в этом вся тонкость ситуации. Эквивалентом р является индекс Раупа-Крика: он тасует методом Монте-Карло строки второго столбца и строит распределение J для нулевой гипотезы отсутствия ассоциации с отсечением площади Р для наблюдаемого исходного значения. Индекс Раупа-Крика=1-РМонте-Карло. Поскольку ноли из ячейки D тоже участвуют в перестановках, этот индекс кардинально отличаются от J (хотя этот результат - безусловно оценка значимости ассоциации). В принципе, то что делает пакет jaccard ещё круче, т.к. в варианте exact он реализует все возможные перестановки. Тогда (1-Рexact) будет являться точной версией индекса Раупа-Крика. То, как работает exact я показал в Help и мне это не понравилось (в контексте интерпретации такого P в качестве Р для индекса Жаккара). Бутстреп будет играться со строками выборки целиком (а не со значениями одного столбца) и т.о. полученные бутстреп-реплики J вероятно не будут подвержены влиянию ячейки D. По точке нижней границе доверительного интервала такого бутстрепированного индекса Жаккара ещё не включающего ноль можно вычислить Р. Это - хорошая идея, попробую на своих примерчиках и данных. 2) <100$. Получается, что формула рабочая, это я её неправильно читаю(( Буду разбираться и пытаться программировать, хотя скорее всего здесь у меня из R получится BASIC. 3) А что вы думаете по поводу такого подхода: удалить из набора данных строки двойных нулей (ячейка D) и считать Монте-Карло или exact только оставшиеся ячейки? |
|
![]() |
![]() |
![]()
Сообщение
#5
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
Цитата Буду разбираться и пытаться программировать, хотя скорее всего здесь у меня из R получится BASIC. Вряд ли R в этой истории будет предпочтительней VBA, поскольку в Экселе ф-ция =ЧИСЛКОМБ() работает, как минимум, не хуже. Если что, могу написать вам на VBA формулу для расчета и Жаккара и p-value к нему. Так сказать, мой подарок челябинским братьям по разуму. Если что, факториалы в R - это просто factorial(число). Факториалы вам понадобятся для комбинаторных расчетов. Цитата А что вы думаете по поводу такого подхода: удалить из набора данных строки двойных нулей (ячейка D) и считать Монте-Карло или exact только оставшиеся ячейки? Дума здесь на удивление проста: если есть возможность за обозримое время вычислить точное значение методом перебора всех перестановок - то предпочту ее (возможность). Тем более, что формулы (16) и (17) - ровно о том же. И все это только потому, что в идеале для монтекарловских p-value необходимо строить еще и доверительный интервал. Это в принципе несложно, но программисту возни немного больше. P.S. А пакет jaccard у меня не загрузился. Начал требовать наличия на компе компиляторов C/C++. P.P.S. А как работает этот пакет - вообще не понял, ибо не нашел в описании не только рабочих формул или вменяемых описаний алгоритмов, но даже ссылок на соответствующие источники. Сообщение отредактировал 100$ - 19.05.2019 - 14:20 |
|
![]() |
![]() |
![]()
Сообщение
#6
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Если что, могу написать вам на VBA формулу для расчета и Жаккара и p-value к нему. Так сказать, мой подарок челябинским братьям по разуму. Будем рады такому подарку! P.S. А пакет jaccard у меня не загрузился. Начал требовать наличия на компе компиляторов C/C++. P.P.S. А как работает этот пакет - вообще не понял, ибо не нашел в описании не только рабочих формул или вменяемых описаний алгоритмов, но даже ссылок на соответствующие источники. У меня тоже были проблемы, не помню точно что писали. Но точно не ставился требуемый пакет qvalue, т.к. он оказался не в основном репозитории, а в Bioconductor: https://www.bioconductor.org/packages/relea...tml/qvalue.html После его установки и обновления кучи пакетов jaccard встал. А то, что к нему сопровождение отвратительное - это да... |
|
![]() |
![]() |
![]()
Сообщение
#7
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
Будем рады такому подарку! Тогда ловите. С нашего стола вашему столу ). Файл с поддержкой макросов в формате .xlsm. Открывать Экселем не старше 2007-го. Если настройки безопасности заблокируют макросы, то надо через центр управления безопасностью разрешить их выполнение. Пользоваться очень просто: либо в затененном месте с пометкой "Исходная таблица сопряженности" заносите свои данные, либо для произвольной предварительно сделанной таблицы сопряженности выделяете на любом листе в рабочей книге строку о двух столбцах, вносите туда функцию "Jaccard" следующим образом: "=Jaccard()" (без кавычек) и указываете в качестве ее аргумента таблицу сопряженности 2х2. (Синтаксис можно увидеть, встав на ячейку Е10). Затем нажимаете комбинацию клавиш "Ctrl+Shift+Enter". Функция вернет массив, первым значением в котором будет индекс Жаккара, а вторым - p-value. И вся любовь. Сообщение отредактировал 100$ - 20.05.2019 - 16:52
Прикрепленные файлы
![]() ![]() |
|
![]() |
![]() |
![]()
Сообщение
#8
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Тогда ловите. С нашего стола вашему столу ). Файл с поддержкой макросов в формате .xlsm. Открывать Экселем не старше 2007-го. Если настройки безопасности заблокируют макросы, то надо через центр управления безопасностью разрешить их выполнение. Пользоваться очень просто: либо в затененном месте с пометкой "Исходная таблица сопряженности" заносите свои данные, либо для произвольной предварительно сделанной таблицы сопряженности выделяете на любом листе в рабочей книге строку о двух столбцах, вносите туда функцию "Jaccard" следующим образом: "=Jaccard()" (без кавычек) и указываете в качестве ее аргумента таблицу сопряженности 2х2. (Синтаксис можно увидеть, встав на ячейку Е10). Затем нажимаете комбинацию клавиш "Ctrl+Shift+Enter". Функция вернет массив, первым значением в котором будет индекс Жаккара, а вторым - p-value. И вся любовь. Огромное спасибо! Теперь мои студентки смогут сами посчитать значимость в Excel ![]() Вставил вашу формулу в R: Jaccard <- function (x, y) { C11 <- sum(x == 1 & y == 1) A10 <- sum(x == 1 & y == 0) B01 <- sum(x == 0 & y == 1) N<-(C11+A10+B01) mysum<-0 for(x in 0:(C11-1)) { mysum<-mysum+choose(N,x)*(2^(N-x)) } return(list(Jaccard.index=(C11/N), "p.value"=(1-mysum/(3^N)))) } #Пример > a<-c(1,1,1,1,1,0,1) > b<-c(1,1,1,1,1,1,0) > Jaccard(a,b) $`Jaccard.index` [1] 0.7142857 $p.value [1] 0.04526749 #Удвоим таблицу > a<-c(1,1,1,1,1,0,1,1,1,1,1,1,0,1) > b<-c(1,1,1,1,1,1,0,1,1,1,1,1,1,0) > Jaccard(a,b) $`Jaccard.index` [1] 0.7142857 $p.value [1] 0.004039541 В этом подходе всё логично: чем больше выборка, тем меньше р-значение. Задача решена, тему можно считать закрытой. С 95% ДИ для Жаккара и бутстреп-оценками р по ДИ повожусь когда будет больше времени. Сообщение отредактировал nokh - 20.05.2019 - 22:15 |
|
![]() |
![]() |
![]()
Сообщение
#9
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
Огромное спасибо! Теперь мои студентки смогут сами посчитать значимость в Excel ![]() Вставил вашу формулу в R: Jaccard <- function (x, y) { C11 <- sum(x == 1 & y == 1) A10 <- sum(x == 1 & y == 0) B01 <- sum(x == 0 & y == 1) N<-(C11+A10+B01) mysum<-0 for(x in 0:(C11-1)) { mysum<-mysum+choose(N,x)*(2^(N-x)) } return(list(Jaccard.index=(C11/N), "p.value"=(1-mysum/(3^N)))) } #Пример > a<-c(1,1,1,1,1,0,1) > b<-c(1,1,1,1,1,1,0) > Jaccard(a,b) $`Jaccard.index` [1] 0.7142857 $p.value [1] 0.04526749 Задача решена, тему можно считать закрытой. С 95% ДИ для Жаккара и бутстреп-оценками р по ДИ повожусь когда будет больше времени. Здорово, nokh. Не знал про choose(). Думал, что комбинаторику придется делать по старинке через факториалы. Ну, все к лучшему. |
|
![]() |
![]() |
![]()
Сообщение
#10
|
|
Группа: Пользователи Сообщений: 1325 Регистрация: 27.11.2007 Пользователь №: 4573 ![]() |
Если интересно - могу выложить данные, Да, интересно, но не ясно какая задача решается. Есть 400 проб (больных) и у каждого больного только два типа инфецирования? Или вы наборы инфекций у двух больных сравниваете. Т.е. просьба подробней про поставновку задачи. PAST считает много подобных индексов, в том числе и jaccard, с вашим тестовым примером сходится (0,714), но у меня старая версия, р нет. И, большое спасибо за готовое решение в R. |
|
![]() |
![]() |
![]()
Сообщение
#11
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
С 95% ДИ для Жаккара и бутстреп-оценками р по ДИ повожусь когда будет больше времени. А зачем? Индекс Жаккара идейно представляет собой просто долю объектов с одновременной совстречаемостью признаков в выборке, из которой предварительно исключены объекты с их (признаков) одновременным отсутствием. Почему бы просто не рассчитать ДИ для доли: Клоппера - Пирсона, Уилсона, Агрести - Коула, арксинуса, ... вот недавно открыл для себя ДИ по Жангу - Ли? Просто интересно. |
|
![]() |
![]() |
![]()
Сообщение
#12
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
Да, интересно, но не ясно какая задача решается. Есть 400 проб (больных) и у каждого больного только два типа инфецирования? Или вы наборы инфекций у двух больных сравниваете. Т.е. просьба подробней про поставновку задачи. PAST считает много подобных индексов, в том числе и jaccard, с вашим тестовым примером сходится (0,714), но у меня старая версия, р нет. И, большое спасибо за готовое решение в R. У каждого больного 2 и более микроорганизмов (МО), т.к. для анализа совстречаемости данные по монокультурам предварительно удаляли. Здесь решается задача именно поиска микробных ассоциаций, поскольку совместная встречаемость организмов может иметь поддающиеся интерпретации и проверке причины. Например, это может быть сходство источников поступления МО в рану, сходство по источникам питания МО, результатом лечения, когда например в результате антибиотикотерапии сначала выбывают какие-то МО, а затем собственная микрофлора сменяется на резистентные штаммы госпитальной и т.д. Т.е. всё это - микробная экология. Я прикрепил пару наших статей по этой тематике, а также исходные данные для статьи 2013 года - можете потренироваться. Жаккар будет таким же, Рауп-Крик - близким (т.к. Монте-Карло генерируются разные наборы всякий раз), многомерный анализ - таким же в версии PAST 2.17, но несколько отличным хотя и близким в версии 3.19 (может и выше). Для статьи 2013 я использовал готовую таблицу значений Р того же автора, что сейчас формулу рассматривали (есть в списке литературы и в сети). Но таблица до N=100 (к тому же вроде там не совсем наше N), и для большой выборки её не хватило. PS Для индексов и главных координат в PAST таблицу нужно транспонировать: Edit - Rearrange - Transpose Сообщение отредактировал nokh - 22.05.2019 - 09:39
Прикрепленные файлы
![]() ![]() ![]() |
|
![]() |
![]() |
![]()
Сообщение
#13
|
|
Группа: Пользователи Сообщений: 1202 Регистрация: 13.01.2008 Из: Челябинск Пользователь №: 4704 ![]() |
А зачем? Индекс Жаккара идейно представляет собой просто долю объектов с одновременной совстречаемостью признаков в выборке, из которой предварительно исключены объекты с их (признаков) одновременным отсутствием. Почему бы просто не рассчитать ДИ для доли: Клоппера - Пирсона, Уилсона, Агрести - Коула, арксинуса, ... вот недавно открыл для себя ДИ по Жангу - Ли? Просто интересно. Уже настроился с бутстрепом для Жаккара разбираться (т.к. с первого раза по аналогии с прописями не вышло), поэтому просто не догадался про ДИ для частот. Про Жанга - Ли ещё не слышал, использую в последнее время байесовский априорный интервал Джеффриса. Есть в онлайновом калькуляторе EpiTools (http://epitools.ausvet.com.au/content.php?page=CIProportion , здесь же ссылка на статью с формулами), также добавил его в экселевский калькулятор плава (Доверительный интервал для долей.xls в папке Программы к Практикуму: https://yadi.sk/d/g50i73pt3J6pAa). Сообщение отредактировал nokh - 21.05.2019 - 12:58 |
|
![]() |
![]() |
![]()
Сообщение
#14
|
|
Группа: Пользователи Сообщений: 902 Регистрация: 23.08.2010 Пользователь №: 22694 ![]() |
Уже настроился с бутстрепом для Жаккара разбираться (т.к. с первого раза по аналогии с прописями не вышло), поэтому просто не догадался про ДИ для частот. Про Жанга - Ли ещё не слышал, использую в последнее время байесовский априорный интервал Джеффриса. Есть в онлайновом калькуляторе EpiTools (http://epitools.ausvet.com.au/content.php?page=CIProportion , здесь же ссылка на статью с формулами), также добавил его в экселевский калькулятор плава (Доверительный интервал для долей.xls в папке Программы к Практикуму: https://yadi.sk/d/g50i73pt3J6pAa). Э-х-х, про Джеффриса-то я и забыл. Кстати, глянул на данные из Ассоциации_2012.xls и при виде кучи столбцов из нулей и единиц тотчас вспомнил про дискриминантный анализ в пространстве дихотомических переменных из статьи Гибба и Штриммера 2015 г. См. пакет {binDA} для R и сопроводиловку к нему. Там приятным для глаз бонусом идет способность метода ранжировать предикторы по важности с выдачей соответствующей гистограммки. Сообщение отредактировал 100$ - 21.05.2019 - 13:34 |
|
![]() |
![]() |
![]() ![]() |