Определение чувствительности и специфичности комбинации маркеров |
Здравствуйте, гость ( Вход | Регистрация )
Определение чувствительности и специфичности комбинации маркеров |
16.08.2012 - 20:10
Сообщение
#31
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
В бесплатном доступе SPSS нет, есть в пиратском. Логистическая регрессия как линейный параметрический классификатор очень плохо справляется с задачами, где наблюдается большое количество предикторов (больше 10, у Вас их больше 20), поскольку наблюдается "curse of dimentionality" - проклятие размерности, особенно при таких небольших выборках (относительно к количеству независимых переменных). Все это выливается в biased (искаженные) коэффициенты регрессии, большие стандартный ошибки и огромные ДИ. Расчет необходимой выборки для логит-регрессии - задача оч. непростая. Peduzzi et al. (1996) предложили упрощенный вариант: N = 10 k / p k - количество предикторов р - наименьшая пропорция негативных/позитивных случаев У Вас к равняется 23, допустим р равняется 0.3 (то есть 30% людей в выборке больных, а 70% здоровых), следовательно: N = 10 * 23 / 0,3 = 766 человек. Это минимальное количество людей, если Вы хотите анализировать 23 предиктора. Если это значение получилось бы меньше 100, его следует увеличить до 100, как советует Long (1997). Выходов несколько: 1) увеличивать выборку 2) уменьшать количество предикторов 3) применять соответствующие методы (а лучше их совокупность), которые лишены проблем логит-регрессии. P.S. p-value в логит-регрессии - это не стат. значимость отношения шансов. Спасибо, уже для меня начало что то проясняться. но, к сожалению, не смогу увеличить объем выборки, тогда мне остается уменьшить количество предикторов, только не знаю как- либо отсеять логически или может нужно их как то проанализировать стат.методом. Расскажите , пожалуйста, подробней про 3 вывод |
|
16.08.2012 - 21:53
Сообщение
#32
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Спасибо, уже для меня начало что то проясняться. но, к сожалению, не смогу увеличить объем выборки, тогда мне остается уменьшить количество предикторов, только не знаю как- либо отсеять логически или может нужно их как то проанализировать стат.методом. Расскажите , пожалуйста, подробней про 3 вывод так а где сами данные? |
|
16.08.2012 - 22:34
Сообщение
#33
|
|
Группа: Пользователи Сообщений: 116 Регистрация: 20.02.2011 Пользователь №: 23251 |
Спасибо, уже для меня начало что то проясняться. но, к сожалению, не смогу увеличить объем выборки, тогда мне остается уменьшить количество предикторов, только не знаю как- либо отсеять логически или может нужно их как то проанализировать стат.методом. Расскажите , пожалуйста, подробней про 3 вывод Выводов у меня не было, были возможные выХоды из ситуации Данные действительно бы пригодились.. |
|
17.08.2012 - 09:02
Сообщение
#34
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
КФР-контролируемый фактор риска, НФР-неконтролируемый ФР, ЗАДАЧА- выявить наиболее вероятные факторы риска для прогнозирования развития кардиальных осложнений в послеоперационном периоде
Сообщение отредактировал Диана - 31.08.2012 - 09:46 |
|
17.08.2012 - 15:28
Сообщение
#35
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
КФР-контролируемый фактор риска, НФР-неконтролируемый ФР, ЗАДАЧА- выявить наиболее вероятные факторы риска для прогнозирования развития кардиальных осложнений в послеоперационном периоде много пропущенных данных... будет интересно у меня после импорта данных (там иногда попадаются точки в ячейках, нельзя ли сохранить таблицу с простым заголовком в старом эксель формате? а то я не уверен в корректности импорта) получились вот такие переменные: Код > names(read.csv2("mp3gl.csv")) [1] "ФИО.шифр" "пол" [3] "возраст" "ИМТ..кг.м2" [5] "ИМТ" "S.тела.по.Дюб" [7] "к.во.дней.до.опер" "к.во.дней.после.опер" [9] "время.уст..я.д.за.анев" "кардио.жалобы" [11] "длит.кардиожалоб" "хирург.жалобы" [13] "группы.по.лечению" "п.о.кард.осложн" [15] "Кард.осл.я" "летальность" [17] "стресс.ЭхоКГ" "к.во.зон.гипо.и.акинезии" [19] "X" "X.1" [21] "ГБ" "X.2" [23] "ГБ.ГЛЖ" "ИБС..стенокардия" [25] "постинф.кардиоскл" "НК..фк" [27] "ДЛП" "размер.АБА" [29] "синдромность" "прех.ишем.послеопер" [31] "СД" "доступ" [33] "курение" "диаст..Дисфункция00" [35] "САД1" "ДАД1" [37] "ЧСС1" "САД5" [39] "ДАД5" "ЧСС5" [41] "САД.д.о" "ДАД.д.о" [43] "ЧСС.д.о" "САД.п.о" [45] "ДАД.п.о" "ЧСС.п.о" [47] "бета.блокеры" "ББдоза" [49] "ББкол.во.суток.назн" "антаг.кальция" [51] "АКдоза.суточная" "АКкол.во.сут.назн" [53] "антиагреганты" "инг.АПФ" [55] "ИАПФсут.доза" "ИАПФкол.во.сут.назн" [57] "нитраты" "дигоксин" [59] "диуретики" "кордарон" [61] "гепарин" "трад.тер" [63] "операция1" "доступ1" [65] "время.операции1" "Время.опер.11" [67] "Время.опер.21" "Время.опер.31" [69] "время.переж.аорты1" "Вр.переж.аорты11" [71] "Вр.переж.аорты21" "кровопотеря1" [73] "кровопотеря11" "наруш.ритма00" [75] "рубц.измен00" "ЧСС00" [77] "ритм00" "наруш.пров00" [79] "PQ" "QRS" [81] "QT" "ST" [83] "з.Т" "Соколов.Лайон" [85] "корн..Индекс" "корн..Произв.е" [87] "минЧСС" "максЧСС" [89] "средЧСС" "ЖЭС" [91] "ЖЭС..к.во" "ЖТ" [93] "НЖЭС..к.во" "НЖТ..к.во" [95] "депрессия.ST" "АВ.блокады" [97] "пароксизмы.ФП" "ГЛЖ00" [99] "X.3" "зоны.гипо.и.акин00" [101] "КДР..см00" "КСР..см00" [103] "КДО..мл00" "индекс.КДО..00" [105] "КСО00" "инд.КСО00" [107] "ФВ00" "УО00" [109] "ТМЖП00" "ТЗСТ.ЛЖ00" [111] "X.4" "ММ.ЛЖ.формула.Devereux" [113] "ИММ.ЛЖ" "ПЗРВТ.00" [115] "КДР.ПЖ00" "ЛП00" [117] "d.аорты00" "ГДС.СДЛА00" [119] "диаст..Дисфункция00.1" "кальциноз.аорты00" [121] "наруш.ритма11" "ЧСС11" [123] "PQ11" "QRS11" [125] "QT11" "депрессия.ST11" [127] "з.Т11" "длит.ть.прех.ишемии11" [129] "очаг.измен11" "мин.ЧСС11" [131] "макс.ЧСС11" "средняя.ЧСС11" [133] "ЖЭС.по.Лауну11" "ЖЭС..к.во11" [135] "парные.ЖЭС11" "ЖТ11" [137] "НЖЭС.к.во11" "НЖТ.к.во11" [139] "депрессия.SТ11" "нар.е.пров11" [141] "пароксизмы.ФП11" "п.о.гипокинезия11" [143] "КДР11" "КСР11" [145] "КДО11" "инд.КДО11" [147] "КСО11" "инд.КСО11" [149] "ФВ11" "УО11" [151] "ТМЖП11" "ТЗСТ.ЛЖ11" [153] "ММ.ЛЖ.формула.Devereux.1" "ИММ.ЛЖ.1" [155] "ПЗРВТ.11" "КДР.ПЖ11" [157] "ЛП11" "d.аорты11" [159] "ГДС.СДЛА11" "бета.блокеры11" [161] "доза11ББ" "ББкол.во.суток.назначения.пре11" [163] "антагонисты.кальция11" "АГдоза.суточная11" [165] "АГкол.во.суток.назн11" "антиагреганты11" [167] "инг.АПФ11" "ИАПФсуточная.доза11" [169] "ИАПФкол.во.суток.назн11" "нитраты11" [171] "дигоксин11" "диуретики11" [173] "кордарон11" "гепарин11" [175] "трад.терапия11" какие номера являются осложнениями? или какие являются предикторами? вот например я предполагаю что осложнение это: Код > (read.csv2("mp3gl.csv")$"постинф.кардиоскл") [1] 1 1 1 1 0 1 1 1 0 0 0 1 1 0 1 0 1 0 0 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 [39] 1 0 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 1 1 0 0 0 0 0 0 0 1 [77] 0 0 0 0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 а предикторы это со 2 по 18ю Код > names(data[,2:18]) [1] "пол" "возраст" [3] "ИМТ..кг.м2" "ИМТ" [5] "S.тела.по.Дюб" "к.во.дней.до.опер" [7] "к.во.дней.после.опер" "время.уст..я.д.за.анев" [9] "кардио.жалобы" "длит.кардиожалоб" [11] "хирург.жалобы" "группы.по.лечению" [13] "п.о.кард.осложн" "Кард.осл.я" [15] "летальность" "стресс.ЭхоКГ" [17] "к.во.зон.гипо.и.акинезии" поскольку среди предикторов много пропусков перед нами два пути: 1) исключить случаи в которых есть пропуски Код > data.na<-na.omit(data[,c(2:18,25)]) > table(data.na$постинф.кардиоскл) 0 1 8 18 > rf<-randomForest(data.na[,-18],factor(data.na$"постинф.кардиоскл"), proximity=TRUE) > rf Call: randomForest(x = data.na[, -18], y = factor(data.na$постинф.кардиоскл), proximity = TRUE) Type of random forest: classification Number of trees: 500 No. of variables tried at each split: 4 OOB estimate of error rate: 38.46% Confusion matrix: 0 1 class.error 0 0 8 1.0000000 1 2 16 0.1111111 > MDSplot(rf, factor(data.na$"постинф.кардиоскл"), k=3) > varImpPlot(rf) как видим ничего в таком варианте модель не разделяет ничего. 2) заполним пропущенные случаи прибегнув к множественной импутации Код > data.2.18.impute<-rfImpute(data[,2:18],factor(data$"постинф.кардиоскл"), iter=5) ntree OOB 1 2 300: 26.32% 10.94% 58.06% ntree OOB 1 2 300: 27.37% 14.06% 54.84% ntree OOB 1 2 300: 27.37% 15.62% 51.61% ntree OOB 1 2 300: 26.32% 14.06% 51.61% ntree OOB 1 2 300: 29.47% 17.19% 54.84% > rf.impute<-randomForest(data.2.18.impute[,-1],data.2.18.impute[,1], proximity=TRUE) > rf.impute Call: randomForest(x = data.2.18.impute[, -1], y = data.2.18.impute[, 1], proximity = TRUE) Type of random forest: classification Number of trees: 500 No. of variables tried at each split: 4 OOB estimate of error rate: 29.47% Confusion matrix: 0 1 class.error 0 54 10 0.1562500 1 18 13 0.5806452 > MDSplot(rf.impute, data.2.18.impute[,1], k=3) > varImpPlot(rf.impute) > plot(importance(rf.impute),varUsed(rf.impute)) > text(importance(rf.impute),varUsed(rf.impute), labels= names(data.2.18.impute[,-1])) получается имеют влияние предикторы: "ИМТ..кг.м2", "к.во.зон.гипо.и.акинезии", "длит.кардиожалоб", "возраст", "к.во.дней.после.опер". меньше влияет "к.во.дней.до.опер". и совсем слабо (но еще влияет) "S.тела.по.Дюб", "кардио.жалобы", "стресс.ЭхоКГ", "хирург.жалобы", "группы.по.лечению". Естественно эту информацию можно накопить относительно различных осложнений и построить общую картину. Так какие показатели являются осложнениями? или какие являются предикторами к осложнениям? Скорее всего "группы.по.лечению" я зря в предикторы включал? |
|
17.08.2012 - 18:05
Сообщение
#36
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
я немножко сократила таблицу, убрала малоинтересующие данные. желтым цветом выделила неконтролируемые факторы риска, синим- контролируемые. красный цвет- осложнений. цель- узнать как влияет кардиопротекторная терапия- то есть группы лечения-серый цвет.[ в группе 1 и 2 под влиянием терапии происходит урежение ЧсС(ЧСС д/о) и меньше случаев тахикардии (чсс больше 100) в послеоперационном периоде( считается, что тахикардия индуцирует ишемию миокарда и, в свою очередь, инфаркт миокарда)] на развитие кардиальных осложнений
Сообщение отредактировал Диана - 31.08.2012 - 09:47 |
|
17.08.2012 - 22:26
Сообщение
#37
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
я немножко сократила таблицу, убрала малоинтересующие данные. желтым цветом выделила неконтролируемые факторы риска, синим- контролируемые. красный цвет- осложнений. цель- узнать как влияет кардиопротекторная терапия- то есть группы лечения-серый цвет.[ в группе 1 и 2 под влиянием терапии происходит урежение ЧсС(ЧСС д/о) и меньше случаев тахикардии (чсс больше 100) в послеоперационном периоде( считается, что тахикардия индуцирует ишемию миокарда и, в свою очередь, инфаркт миокарда)] на развитие кардиальных осложнений я попробую сказать конкретнее я вижу Ваш эксель файл (кстати Вы так и не соблаговолили его сохранить в старом формате екселя) как показано на присоединенном скриншоте. в файле сохраняются какие то точки в отдельных полях. давайте обсуждать список переменных датасета который я уже один раз почистил. мне нужно знать какие номера переменных являются предикторами, а какие "факторами риска". это всего два списка |
|
18.08.2012 - 08:58
Сообщение
#38
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
Факторы риска:
2 3 5 17 20 22 - 34 64 68 70 73 колонки 44-46 закодировала 0/1(44А, 45А,46А) предикторы 44А 45А 46А 118 извините, что не сохранила файл в старом формате Заранее спасибо Сообщение отредактировал Диана - 9.09.2012 - 22:26 |
|
18.08.2012 - 13:18
Сообщение
#39
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
Факторы риска: 2 3 5 17 20 22 - 34 64 68 70 73 колонки 44-46 закодировала 0/1(44А, 45А,46А) предикторы 44А 45А 46А 118 извините, что не сохранила файл в старом формате Заранее спасибо вот это --- "колонки 44-46 закодировала 0/1(44А, 45А,46А)" было сделано зря. В таком виде никакого разделения практически нет. надо вернуть прежнюю шкалу и тогда (как мне кажется) удастся построить с помощью случайного леса регрессию. 118 дал разделение Код > data2.varset1.impute.X118<-rfImpute(data2.varset1,factor(data2$X118), iter=5) ntree OOB 1 2 300: 16.84% 10.91% 25.00% ntree OOB 1 2 300: 22.11% 14.55% 32.50% ntree OOB 1 2 300: 21.05% 12.73% 32.50% ntree OOB 1 2 300: 20.00% 12.73% 30.00% ntree OOB 1 2 300: 20.00% 12.73% 30.00% > rf.data2.varset1.impute.X118.best<-tuneRF(data2.varset1.impute.X118[,-1],factor(data2$X118), proximity=TRUE, doBest=TRUE) mtry = 4 OOB error = 24.21% Searching left ... mtry = 2 OOB error = 23.16% 0.04347826 0.05 Searching right ... mtry = 8 OOB error = 22.11% 0.08695652 0.05 mtry = 16 OOB error = 20% 0.0952381 0.05 mtry = 22 OOB error = 23.16% -0.1578947 0.05 > rf.data2.varset1.impute.X118.best Call: randomForest(x = x, y = y, mtry = res[which.min(res[, 2]), 1], proximity = TRUE) Type of random forest: classification Number of trees: 500 No. of variables tried at each split: 16 OOB estimate of error rate: 20% Confusion matrix: 0 1 class.error 0 46 9 0.1636364 1 10 30 0.2500000 > MDSplot(rf.data2.varset1.impute.X118.best, factor(data2$X118), k=3) > varImpPlot(rf.data2.varset1.impute.X118.best) > plot(importance(rf.data2.varset1.impute.X118.best),varUsed(rf.data2.varset1.impute.X118.best)) > text(importance(rf.data2.varset1.impute.X118.best),varUsed(rf.data2.varset1.impute.X118.best), labels= names(data2.varset1.impute.X118[,-1]), pos=4) имеет значение только [30,] "X30" "прех.ишем.послеопер" [3,] "X3" "возраст" что вполне подтверждается графиком > mosaicplot(table(data2$X30, cut(data2$X3, hist(data2$X3, plot=FALSE)$breaks), data2$X118)) Оценим пригодность модели для диагностики с помощью ROC. Код > plot(roc(data2$X118, rf.data2.varset1.impute.X118.best$votes[,2]), print.auc=TRUE) Call: roc.default(response = data2$X118, predictor = rf.data2.varset1.impute.X118.best$votes[, 2]) Data: rf.data2.varset1.impute.X118.best$votes[, 2] in 55 controls (data2$X118 0) < 40 cases (data2$X118 1). Area under the curve: 0.8111 Судя по области решения, которую надо вырезать в пространстве сформированном mds по восстановленным случайным лесом расстояниям между экспериментальными случаями, лучше с разделением справится svm. Случайный лес похоже не дотягивается до случаев со средним возрастом из основной группы. Сообщение отредактировал p2004r - 18.08.2012 - 13:35 |
|
18.08.2012 - 20:57
Сообщение
#40
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
спасибо за помощь. колонки 44-46 не имеют влияние? посоветуйте мне, пожалуйста, литературу, чтоб я поняла все это, поскольку я все еще плохо дружу со статистикой. по моим расчетам вид лечения(группы по лечению) до операции не влияет на осложнения, а мне желательно доказать обратное. я сокращала все осложнения до фатальные и нефатальные-тоже нет желаемого результата, только отмечено снижение летальности в 1 группе по сравнению с 3й.
|
|
18.08.2012 - 22:37
Сообщение
#41
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
спасибо за помощь. колонки 44-46 не имеют влияние? посоветуйте мне, пожалуйста, литературу, чтоб я поняла все это, поскольку я все еще плохо дружу со статистикой. по моим расчетам вид лечения(группы по лечению) до операции не влияет на осложнения, а мне желательно доказать обратное. я сокращала все осложнения до фатальные и нефатальные-тоже нет желаемого результата, только отмечено снижение летальности в 1 группе по сравнению с 3й. 0. Прочитать любую книгу про методы многомерного анализа данных. 1. Анализ показывает только то, что колонки 44А, 45А, 46А (в виде 0-1) невозможно разделить с помощью 2 3 5 17 20 22 - 34 64 68 70 73. Колонки 44, 45, 46 в набор тех с помощью которых пытаемся разделять я не включал, поскольку это не следовало из Вашего описания. Увы, но за Вас я не могу придумать какой набор переменных какую переменную должен попытаться оценить. 2. (еще раз) То что 44А, 45А, 46А перекодировали в 0-1 плохо, это потеря информации. Случайным лесом можно строить не только модель классифицирующую, но и регрессионную. возможно что тогда зависимость станет очевидной. 3. Группы лечения это переменная 13? или какая? |
|
19.08.2012 - 09:21
Сообщение
#42
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
колонки 44А 45А 46А были перекодированные колонки 44 45 46 соответственно, группа лечения- колонка 13
|
|
26.08.2012 - 08:57
Сообщение
#43
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
Подскажите кто знает: возможно ли удалить выложенные данные
|
|
26.08.2012 - 08:59
Сообщение
#44
|
|
Группа: Пользователи Сообщений: 39 Регистрация: 30.06.2012 Пользователь №: 23898 |
ничего не получается, от проводимого лечения нет достоверного влияния на снижение осложнений
|
|
27.08.2012 - 15:12
Сообщение
#45
|
|
Группа: Пользователи Сообщений: 1091 Регистрация: 26.08.2010 Пользователь №: 22699 |
ничего не получается, от проводимого лечения нет достоверного влияния на снижение осложнений Немного был занят. 1) "группы.по.лечению" это что за переменная? это она описывает проводимое лечение? 2) в конце первого файла данных были всякие "дигоксины", они имеют отношение к проводимому лечению? |
|