Форум врачей-аспирантов

Здравствуйте, гость ( Вход | Регистрация )

 
Добавить ответ в эту темуОткрыть тему
> Одни и те же пациенты в базе данных
nokh
сообщение 2.05.2016 - 12:06
Сообщение #1





Группа: Пользователи
Сообщений: 1202
Регистрация: 13.01.2008
Из: Челябинск
Пользователь №: 4704



Повезло заполучить для анализа достаточно большую базу данных. Но наряду с радостями надёжности получаемых выводов столкнулся с рядом трудностей впервые.
1) Многие из моих любимых пакетов начиная с PAST оказывается не в состоянии обсчитать даже 1% всех наблюдений. Пришлось сильно двинуться в сторону R.
2) Собственно о чём тема. Некоторые пациенты присутствуют в базе многократно: где-то от 2 до 30 раз, при среднем около 2,5. Получается, что 35% базы - уникальные пациенты, а 65% это они же, сдававшие анализы ещё раз, два, 3 ... 30 раз. Взять только первые посещения и удалить 65% - непозволительная роскошь для любого размера базы. Усреднить данные в пределах пациента - тоже неправильно, т.к. от посещения к посещению есть какая-то динамика - вероятно, связанная с параллельным лечением. Ситуация осложняется тем, что набор показателей раз от раза тоже не очень жёсткий: скажем первый раз - простенький анализ на 3 показателя, а далее - более развёрнутый или наоборот.
Мне нужно найти наиболее общие закономерности изменения показателей в зависимости от возраста, пола, сезона, беременности. Также поискать связи между показателями.
Получается, что проще всего работать с данными, как с уникальными пациентами, не обращая внимания на частично зависимый характер выборок в разных категориях анализа. Т.е. сделать единицей наблюдения не пациента, а строку базы данных. Но это неправильно со статистической точки зрения, по крайней мере я затрудняюсь в таком случае очертить генеральную совокупность.

Кто анализировал базы данных, поделитесь, пожалуйста, опытом: как вы выходили из этой ситуации с одними и теми же пациентами. Может у кого-то есть не опыт, но полезные замечания или идеи...
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ogurtsov
сообщение 2.05.2016 - 13:04
Сообщение #2





Группа: Пользователи
Сообщений: 127
Регистрация: 15.12.2015
Пользователь №: 27760



Цитата(nokh @ 2.05.2016 - 12:06) *
где-то от 2 до 30 раз, при среднем около 2,5.


Вот он, ключ к решению проблемы. Могу предположить, что почти все пациенты попадут в категорию сдававших анализы не больше 4 или 5 раз.
Тогда нужно будет отбросить пару процентов всех остальных и работать с оставшимися.

С другой стороны, такую же процедуру можно проделать с показателями. Те из них, которые измерялись в основном по одному разу, заведомо не нужны - по ним динамика отсутствует.

В итоге останется таблица, где пропусков будет значительно меньше, и можно уже даже попробовать их каким-то образом восполнить.

А вообще задача чем-то похожа на классическую задачу машинного обучения - построение рекомендательной системы для фильмов.


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
ogurtsov
сообщение 2.05.2016 - 13:11
Сообщение #3





Группа: Пользователи
Сообщений: 127
Регистрация: 15.12.2015
Пользователь №: 27760



Цитата(nokh @ 2.05.2016 - 12:06) *
Мне нужно найти наиболее общие закономерности изменения показателей в зависимости от возраста, пола, сезона, беременности. Также поискать связи между показателями.


Если акцентировать именно на закономерностях изменения показателей, то можно поступить следующим образом.
Для каждого показателя у каждого пациента в зависимости от числа повторных измерений:
1) Для 2 измерений - рассчитать дельту и поделить на интервал времени между измерениями.
2) Для >2 измерений - построить простейшую линейную модель вида y=ax+b, где y - показатель, а x - время (0, 1 мес., 1.5 мес., 2 мес. и т.д.). Тогда коэффициент при иксе можно интерпретировать как прирост (с соответствующим знаком) показателя за единицу времени.

В итоге перейдете к анализу этих самых приростов, то есть для каждого пациента и каждого показателя будет всего 1 значение (или 0 значений, если измерение было однократным).


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 2.05.2016 - 13:15
Сообщение #4





Группа: Пользователи
Сообщений: 1091
Регистрация: 26.08.2010
Пользователь №: 22699



Цитата(nokh @ 2.05.2016 - 12:06) *
Повезло заполучить для анализа достаточно большую базу данных. Но наряду с радостями надёжности получаемых выводов столкнулся с рядом трудностей впервые.
1) Многие из моих любимых пакетов начиная с PAST оказывается не в состоянии обсчитать даже 1% всех наблюдений. Пришлось сильно двинуться в сторону R.
2) Собственно о чём тема. Некоторые пациенты присутствуют в базе многократно: где-то от 2 до 30 раз, при среднем около 2,5. Получается, что 35% базы - уникальные пациенты, а 65% это они же, сдававшие анализы ещё раз, два, 3 ... 30 раз. Взять только первые посещения и удалить 65% - непозволительная роскошь для любого размера базы. Усреднить данные в пределах пациента - тоже неправильно, т.к. от посещения к посещению есть какая-то динамика - вероятно, связанная с параллельным лечением. Ситуация осложняется тем, что набор показателей раз от раза тоже не очень жёсткий: скажем первый раз - простенький анализ на 3 показателя, а далее - более развёрнутый или наоборот.
Мне нужно найти наиболее общие закономерности изменения показателей в зависимости от возраста, пола, сезона, беременности. Также поискать связи между показателями.
Получается, что проще всего работать с данными, как с уникальными пациентами, не обращая внимания на частично зависимый характер выборок в разных категориях анализа. Т.е. сделать единицей наблюдения не пациента, а строку базы данных. Но это неправильно со статистической точки зрения, по крайней мере я затрудняюсь в таком случае очертить генеральную совокупность.

Кто анализировал базы данных, поделитесь, пожалуйста, опытом: как вы выходили из этой ситуации с одними и теми же пациентами. Может у кого-то есть не опыт, но полезные замечания или идеи...


Ну вот "сходу":

1) id пациента это вполне себе полноценный параметр модели,

2) Na для некоторых моделей тоже (если нет, то иногда можно импутацией обеспечить видимость, что все у нас есть)

3) Есть модели по типу "мешок слов"

PS переработать всё во временные ряды! с интерполяцией! шикарно!

Сообщение отредактировал p2004r - 2.05.2016 - 13:16


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
DrgLena
сообщение 3.05.2016 - 11:22
Сообщение #5





Группа: Пользователи
Сообщений: 1325
Регистрация: 27.11.2007
Пользователь №: 4573



Программа может обработать 1% базы данных, на мой взгляд, это неверное представление.
Если это действительно база данных, то она определенным образом структурирована. Есть уникальный ключ к пациенту, даты и все остальное. Базы данных могут объединять результаты обследования пациентов в различных подразделениях медицинского центра. Например, оборудование к ОКТ позволяет создавать базу данных определенной структуры (пользователь может ее настроить, что именно ему нужно хранить). Эта база данных может быть объединена с другими базами данных, например иммунологии и биохимии, используя ID. Клиническая часть также заносится при каждом визите пациента. Все это хранится на сервере, к которому из статистической программы вы формируете запрос.

Даже программа Statistica умеет это делать (URL запрос). Вам не нужно тащить в рабочий лист программы все, что у вас есть. ВЫ всегда в запросе можете указать условия отбора данных, например, интересует изменение толщины сетчатки в фовеолярной зоне в трех точках наблюдения: начало наблюдения, через 6 мес. и через год. При этом вы хотите сравнить эту динамику в зависимости от вида диабета и двух методов лечения, учитывая еще и влияние возраста. Понятно, что не всегда программисты знают точно, что вам нужны будут именно эти точки. Можно и руками проставить номер визита, например через 5-7 мес будет пол года.

Такой подход возможен, если таки да есть база данных, спроектированная программистом совместно с исследователем. Но, как правило, экономят именно на программистах, а потому никаких баз данных нет, а есть электронная таблица, от забора до обеда с кучей пропусков, никак не структурированная. Аналитику нужно потратить много времени, чтобы создать руками нужные группирующие переменные, чтобы таблица приобрела признаки управления данными. Эта работа примерно как ?закат Солнца вручную?.

Но, если задача четко сформулирована, можно:
1. Проанализировать только по результатам первого обследования зависимость показателей и между собой и в зависимости от диагноза, возраста? Брать сюда повторных больных не следует.
2. Проследить динамику изменения показателей в зависимости от конкретных факторов. Тут как раз, одни и те же пациенты и нужны smile.gif. Для этого повторные визиты нужно структурировать, создать нужные диапазоны времени. В программе статистика есть удобные возможности работы с полями типа date.

Как правило, такие ?базы данных? и есть наша реальность.

Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
passant
сообщение 5.05.2016 - 10:36
Сообщение #6





Группа: Пользователи
Сообщений: 231
Регистрация: 27.04.2016
Пользователь №: 28223



Получив в руки такое богатство - грех его не использовать полностью или тем более что-то из него "вырезать". Да и зачем? Даже тривиальный EXCEL позволяет работать более чем миллионом строк. Если миллион записей - это 1% базы, то вся база - это около 100 млн. записей. Для анализа данных - это реально суперинформация в смысле семантики, но вполне тривиальная база в техническом аспекте (объем, скорость обработки и пр.). Можно попробовать данные погрузить в базу данных ( в смысле - хранить и обрабатывать с помощью одной из СУБД - тут выбор широк от MS Access до MS SQL, Oracle или HP Vertica - и, кстати, многие из них имеют шлюз к R). Ну, а если "в лоб" почему-то не не получиться - сейчас доступны облачные сервисы для "больших данных" - там за небольшие деньги можно хранить и обрабатывать данные объемом в десятки и сотни терабайт. Должно хватить.
Теперь по "начинке". Если имеется 30 записей об одном пациенте - это чудесно. Есть возможность анализировать временнОй ряд. Причем, если не ограничиться работой с разностями первого порядка (тем более, что для такого подхода есть очень жесткие ограничения), а применять немного более продвинутые методы, то получаете уникальную информацию для выделения - например - сезонной составляющей в таких рядах. А если немного поковыряться в данных - то и возможность анализа интересующего показателя не просто от "наличия беременности", но и от "месяца беременности", а если очень захочется - то и от "месяц беременности+сезон года". Или от "продолжительности лечения+сезон года". Кстати, есть направление в анализе временнЫх рядов, в котором допускаются к анализу ряды с пропусками и неравномерностями в точках отсчета, т.е. практически то, что имеется в выборке.
Для поиска зависимости от "возраста, пола, сезона, беременности" и поиска связей между показателями традиционно применяют разновидности корреляционного и дисперсионного анализа - а там данных много не бывает. Что-то выкинуть - заведомо получить смещение в результатах. Если попробовать подойти к поиску закономерностей со стороны теории классификации и построения решающих правил - становиться не важным, что для одного пациента был сделан анализ на три показателя, а для другого - на 10-12. Метод(ы) работает(ют) на любом наборе классификационных признаков. Наконец, в кластерном анализе есть направление Concept Drift, которое собственно и занимается выявлением закономерностей при условии, что данные изменяются во времени.
В общем, я думаю, разумнее не данные "подрезать" под имеющийся метод, а метод искать под имеющиеся данные и поставленную задачу анализа.

Сообщение отредактировал passant - 5.05.2016 - 10:59
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
DoctorStat
сообщение 10.05.2016 - 16:25
Сообщение #7





Группа: Пользователи
Сообщений: 377
Регистрация: 18.08.2008
Из: Москва Златоглавая
Пользователь №: 5224



Выше drgLena уже упоминала про запросы к базам данных. Эти запросы пишутся на языке SQL - structured query language - язык структурированных запросов. Он позволяет делать выборки из базы данных любой сложности. Можно выделить только первое посещение пациента, или только последнее, или взять все его посещения и усреднить их (по времени или как-то еще). SQL сделает выборку из базы и выдаст вам таблицу с уникальными (одна строка - один пациент) пациентами, которую затем можно обработать статистическими методами. Если ваша статистическая программа не поддерживает работу с SQL и базами данных, то таблицу придется вручную копировать в эту программу для дальнейшей обработки.


Signature
Просто включи мозги => http://doctorstat.narod.ru
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nokh
сообщение 6.06.2016 - 15:01
Сообщение #8





Группа: Пользователи
Сообщений: 1202
Регистрация: 13.01.2008
Из: Челябинск
Пользователь №: 4704



Благодарю всех за мнения и советы! Работа сделана и сдана. Хочу прокомментировать советы и саму работу.

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

Во-вторых, (>DrgLena) этот фрагмент для моих программ действительно оказался испытанием. У меня MS Office 2003, поскольку не приемлю вид меню из последних офисов + есть несколько аддонов, работающих только со старым Excel'ем. Но старый Excel не берёт более 65 тыс строк, а нужно было 114 тыс. Поэтому первичную обработку файла проводил в Calc. При этом и OpenOffice дома и LibreOffice на работе едва ворочались + LibreOffice Calc на команде "Найти - Заменить всё" постоянно пропускал значения, поэтому для одной колонки приходилось делать операцию раз по 15, чтобы убедиться, что на самом деле всё что нужно найдено и заменено. OpenOffice Calc для этого не использовал, но сомневаюсь, что у брата ситуация лучше. Про любимый мной (хотя отчасти и недоработанный) PAST при объёмах выборок в даже в 1,5-3 тыс значений можно забыть: результата не дождётесь. Приятно удивила Statisticа: пусть не очень шустро, но всё что в ней пробовал - сделала (описательная статистика, таблицы для качественных признаков, двухфакторный дисперсионный анализ, графики). Ещё больше удивила R: всё то же + многое другое + очень быстро.

В-третьих, по поводу собственно повторных пациентов. Эту проблему несмотря на все ваши советы для себя окончательно так и не решил. Видимо, в зависимости от целей нужно и решать. Если цели - медицинские, то, действительно, важен первый результат, а последующие - в зависимости от лечения и т.п. Тогда, вероятно, действительно нужно было брать только первые посещения, остальное отбросить. Ну или "пересчитать всё во временные ряды" и как-то интерпретировать результаты, сохранив при этом рассудок:) Специфика наших данных была в том, что это данные независимой лаборатории: там не столько "пациенты", сколько "клиенты" и про них совсем ничего не известно, за исключением возраста, пола и недели беременности для беременных. А нужны были закономерности. Поэтому я рассудил так: моя генеральная совокупность включает не только впервые обратившихся за анализом, но и тех, кто обращался неоднократно. Человек, пришедший впервые, скорее всего (как следует из анализа) придёт как минимум ещё один раз, а некоторые будут далее таскаться регулярно. И те кто уже есть в базе неоднократно, тоже имеют вероятность сдать анализ ещё. Поэтому, объединил при подсчётах и средних, и корреляций, и зависимостей всех в одну кучу. Таким образом, не потерял ни одной цифры, работа сделана, все довольны... но осадочек сомнений о корректности такого объединения остался.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Добавить ответ в эту темуОткрыть тему