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

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

> Определение чувствительности и специфичности комбинации маркеров
Zaycho
сообщение 2.08.2012 - 14:20
Сообщение #1





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



Здравствуйте!

Есть задача определить диагностическую ценность ряда маркеров (допустим, А, В и С) и их комбинаций в диагностике некоторого заболевания.
Я расчитал все параметры (чувствительность, специфичность, PPV, NPV, LR) и построил в SPSS ROC-кривые отдельно для А, В и С.
Как теперь сделать то же самое для комбинаций этих маркеров, допустим, А+В и В+С? Где копать?

Заранее огромное спасибо!
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
 
Открыть тему
Ответов
DrgLena
сообщение 3.08.2012 - 23:56
Сообщение #2





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



А если не лес строить, а одно дерево, то при одном ветвлении, на двух конечных узлах при условии С<=16,64 классификация произойдет с точностью 65,7%
Переменная С разделяет пациентов реальной выборки, а вот В не разделяет и вообще не имеет различий в группах выживших и нет ни по каким парным критериям. И не удивительно, такие разбросы данных (скорее всего ошибки ввода) например, у умерших больных есть значение 237 и 0,14. Вряд ли В может называться маркером. Но в сгенерированных выборках значения могут повторяться или вообще не попасть.
ПО приведенным исходным данным точки разделения, и соответственно чувствительность и специфичность с моими расчетами не сходятся, но площадь ROC сходится, это очень странно. Автор должен верифицировать данные, иначе никакие многомерные методы на таких данных применять нельзя.
Автор поста проделал часть работы и задал конкретный вопрос, как объединить результаты трех тестов. Это не задача классификации. Есть понятие положительного и отрицательного теста (найдены значения для разделения на положительный и отрицательный результат теста) и нужно узнать вероятность исхода при различных сочетаниях положительных или отрицательных тестов.
Если не придираться к конкретным данным, то решить эту задачу можно следующим образом. Создать три бинарных переменных по результатам ROC, для этого использовать оптимальные точки разделения, фактор риска имеется, код 1 и нет ? 0. Эти переменные использовать в логистической регрессии. По полученным коэффициентам посчитать вероятности наступления интересующего события. При этом возможны 8 комбинаций наличия и отсутствия трех факторов риска, от отсутствия всех трех (000) до присутствия всех трех (111). Каждая из 8 групп риска будет иметь свою расчетную вероятность наступления события. При этом экспоненциальные коэффициенты уравнения регрессии для каждого предиктора будут иметь ясную интерпретацию и показывать независимый вклад каждого фактора.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 4.08.2012 - 10:42
Сообщение #3





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



Цитата(DrgLena @ 3.08.2012 - 23:56) *
А если не лес строить, а одно дерево, то при одном ветвлении, на двух конечных узлах при условии С<=16,64 классификация произойдет с точностью 65,7%
Переменная С разделяет пациентов реальной выборки, а вот В не разделяет и вообще не имеет различий в группах выживших и нет ни по каким парным критериям. И не удивительно, такие разбросы данных (скорее всего ошибки ввода) например, у умерших больных есть значение 237 и 0,14. Вряд ли В может называться маркером. Но в сгенерированных выборках значения могут повторяться или вообще не попасть.
ПО приведенным исходным данным точки разделения, и соответственно чувствительность и специфичность с моими расчетами не сходятся, но площадь ROC сходится, это очень странно. Автор должен верифицировать данные, иначе никакие многомерные методы на таких данных применять нельзя.


1 по мимо того что B надо логарифмировать, имеются корреляции между предикторами

Код
> cor(cbind(data.na[,c(2,4)], log(data.na[,3])))                          A         C log(data.na[, 3])
A                 1.0000000 0.2813438         0.1289035
C                 0.2813438 1.0000000         0.2625643
log(data.na[, 3]) 0.1289035 0.2625643         1.0000000

> cor.test(data.na[,4], data.na[,2])

    Pearson's product-moment correlation

data:  data.na[, 4] and data.na[, 2]
t = 2.4177, df = 68, p-value = 0.01831
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.04965218 0.48430137
sample estimates:
      cor
0.2813438

> cor.test(data.na[,4], log(data.na[,3]))

    Pearson's product-moment correlation

data:  data.na[, 4] and log(data.na[, 3])
t = 2.2439, df = 68, p-value = 0.0281
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
0.02940446 0.46862610
sample estimates:
      cor
0.2625643

> cor.test(data.na[,2], log(data.na[,3]))

    Pearson's product-moment correlation

data:  data.na[, 2] and log(data.na[, 3])
t = 1.0719, df = 68, p-value = 0.2876
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.1093837  0.3531800
sample estimates:
      cor
0.1289035



Группа выделена и имеет отличный состав

Код
> table(factor(cmdscale(dist(rf1$proximity), k=2)[,2]>0.2), factor(data.na$выжил.умер))
      
         0  1
  FALSE 24 21
  TRUE   9 16


во 2й группе исходы 9 к 16, в первой 24 к 21

вклад в разделение групп оказывает не один единственный предиктор, (B и С вместе)

Кружки первая группа, треугольники вторая. (На сечении С|log(B) вообще летальные исходы сгруппировались в центре и вверху. Может отработать эту нелинейность не может при разделении групп рандомфорест. Нужен какой нибудь svm или явная трансформация данных.)

Код
> pairs(cbind(data.na[,c(2,4)],
              log(data.na[,3])),
        pch=c(1,2)[factor(cmdscale(dist(rf1$proximity), k=2)[,2]>0.2)],
        col=c("red","green")[factor(data.na$выжил.умер)])


второй вариант наоборот цветом группы, значками исходы.
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
 


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





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



собственно да, svm получше выделяет

Код
> model <- svm( выжил.умер ~ A+B+C, data = data.na, type= "C-classification")
> table(model$decision.values<=0,data.na$выжил.умер)
      
         0  1
  FALSE 25 12
  TRUE   8 25
> table(model$decision.values<=-0.1,data.na$выжил.умер)
      
         0  1
  FALSE 27 13
  TRUE   6 24

## логарифмирование имеет значение!!
> model <- svm( выжил.умер ~ A+log(B)+C, data = data.na, type= "C-classification")
> table(model$decision.values<=-0.1,data.na$выжил.умер)
      
         0  1
  FALSE 27  9
  TRUE   6 28


вот собственно он их сумел обвести

Код
> pairs(cbind(data.na[,c(2,4)],
              log(data.na[,3])),
        pch=c(1,2)[factor(model$decision.values<=-0.1)],
        col=c("red","green")[factor(data.na$выжил.умер)])


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

PS пробабилити

Код
> cbind(model$decision.values,data.na$выжил.умер)
           0/1  
1   0.98331246 0
2   0.61530576 1
3   1.00012653 0
4  -0.21684733 0
5   0.99955666 0
6   0.16078293 1
7  -1.00012726 1
8   1.14854667 1
9  -0.99985686 1
10  0.99966273 0
11  0.37811021 0
12 -0.42755238 1
13  1.00021827 0
14  1.00007588 0
15  0.76925049 0
16  0.88688175 0
17  1.01823453 0
18  0.86095764 0
19  1.01908459 0
20  1.18428922 1
21  0.45588013 1
22 -0.73663584 1
23  0.89897670 0
24  1.00026140 0
25  1.00020960 0
26  1.12620025 0
27 -0.71744634 1
28 -0.93837583 1
29 -0.99987350 1
31 -1.20454616 0
33  0.62211341 0
34 -1.37866569 1
35 -1.07486185 1
36 -1.09031422 1
37 -1.06053528 1
38 -0.50515338 1
39 -0.75995557 1
40  0.16392607 0
41 -1.00022084 1
42  0.34876086 0
43 -0.64127520 1
44 -1.15716373 1
45  0.11486255 0
46 -0.13282404 0
47 -1.04569130 0
48  0.37514348 0
49  0.56057748 0
50  0.49439228 1
51 -1.11937289 1
52 -0.89372931 1
53 -0.49529302 0
54 -0.65597539 1
55 -0.92934884 1
56  0.62306627 0
57 -1.15534228 1
58 -1.02889926 1
59 -1.00000111 1
60  0.11401070 0
61  0.68242740 1
62 -1.00003176 1
63 -0.65191720 1
64  0.74228345 1
65 -0.04860989 1
66 -1.13318704 1
67 -0.73920762 1
68  0.73537165 0
69 -1.04658105 0
70  0.16253365 0
71 -0.44523330 1
72  0.41346047 0


Сообщение отредактировал p2004r - 4.08.2012 - 11:29
Эскизы прикрепленных изображений
Прикрепленное изображение
 


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





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



линеаризирующее преобразование (!после отрезания всех явно тяжелых!):

1) берем точку среднее log(B) -- среднее C (или лучше среднее по шкалам mds) для летальных исходов

2) строим вектора с началом в этой точке и концом в точках наблюдений

3) новое пространство --- угол вектора vs его длинна

в таком пространстве должны работать линейные методы

Код
> data.leit<- data.na[data.na$C<25,]
> nrow(data.leit)
[1] 62
> model1 <- svm( выжил.умер ~ A+log(B)+C, data = data.leit, type= "C-classification")
> table(model1$decision.values<=0,data.leit$выжил.умер)
      
         0  1
  FALSE 19  5
  TRUE   6 32


вот по группе без явно безнадежных (критерий C>25) svm вырезает выживших до 32.

вот так решение графически выглядит

Код
> plot(cmdscale(dist(cbind(data.leit[,c(2,4)],
                                 log(data.leit[,3]))),
                      k=2),
             col=c("red","green")[factor(data.leit$выжил.умер)],
             pch=c(1,2)[factor(model1$decision.values<=0)])


Трансформация

Код
> tapply(data.leit[,3], data.leit$выжил.умер, mean)
       0        1
12.67121 20.19569
> tapply(data.leit[,4], data.leit$выжил.умер, mean)
       0        1
13.48000 11.40541
> tapply(log(data.leit[,3]), data.leit$выжил.умер, mean)
       0        1
1.775605 1.189165
> ((data.leit$C-12.67121)^2+(log(data.leit$B)-1.775605)^2)^0.5
[1]  5.3311377  5.1087745  2.1709325  6.0049577  6.3416986  2.5971127
[7]  7.6488885  9.4283268  2.9613371  7.3290071  2.0874944  2.6590571
[13]  0.7077666  1.7968509  1.6400452  4.3481172  1.3288040  5.5428207
[19]  2.6856595  9.7595860  3.7072333  4.6724333  4.3954970  7.6958694
[25]  7.8144577  5.1120372  3.4003874  6.7942236  0.7232215  2.2810260
[31]  0.6200533  3.0480755  5.3432953  1.8203928 12.6712147  7.3712229
[37]  2.4614863  6.8202322  4.3332743  0.6811193 10.3318129  7.2930514
[43]  9.8974529  4.0868944  2.6899526  6.9645308  2.7174036  3.7413277
[49]  2.2007804 12.0539703  3.0041289 11.3308822  8.6715569  3.7608580
[55]  7.3350855  3.3930430  4.4240841  7.5608856  6.8246717  4.3312637
[61] 10.4496927  6.0334436
> l<-((data.leit$C-12.67121)^2+(log(data.leit$B)-1.775605)^2)^0.5
> atan2(data.leit$C-12.67121, log(data.leit$B)-1.775605)
[1]  1.60047511  1.01092706 -0.87854661 -1.90576287  1.63461177  2.02937132
[7] -2.08195084  1.42536019 -2.91294791  1.57849395 -2.21332718  2.61831456
[13] -1.24799125  0.18401803  0.20184394  1.66511774  1.56620199  1.29199482
[19] -1.67457571 -1.43611893  0.08880546 -1.54791341 -0.65318030 -1.65087067
[25] -1.37902877 -1.98913076 -2.23799124 -1.76137710 -1.95235967 -2.31937471
[31]  2.58268440  2.69050581  1.49709553 -1.16313148 -1.57165444  1.67814707
[37]  1.90064623 -1.78022440  1.52529843  0.50375801  1.54660568 -1.98674087
[43] -1.78502201 -2.02573395 -1.68891279 -1.27953913  1.02940171 -2.34643526
[49]  2.99163425 -1.82347545 -1.09554895  1.55157912 -1.56185158 -1.78957673
[55]  1.52936211  1.76571555 -2.16280092  1.81921224 -1.78326322  1.60459531
[61]  1.72306160  1.08266063
>  a<-atan2(data.leit$C-12.67121, log(data.leit$B)-1.775605)
> plot(a,
       l,
       col=c("red","green")[factor(data.leit$выжил.умер)],
       pch=c(1,2)[factor(model1$decision.values<=0)])


и в пространстве трансформированных шкал mds

Код
> data.mds<-cmdscale(dist(cbind(data.leit[,c(2,4)],log(data.leit[,3]))))
> tapply(data.mds[,1], data.leit$выжил.умер, mean)
         0          1
-1.2605935  0.8517523
> tapply(data.mds[,2], data.leit$выжил.умер, mean)
         0          1
-0.2579902  0.1743177
> l.mds<-((data.mds[,1]+1.2605935)^2+(data.mds[,2]+0.2579902)^2)^0.5
> a.mds<-atan2(data.leit$C-12.67121, log(data.leit$B)-1.775605)
> plot(a.mds,
       l.mds,
       col=c("red","green")[factor(data.leit$выжил.умер)],
       pch=c(1,2)[factor(model1$decision.values<=0)])


похожую трансформацию, судя по внешнему сходству, рандом_форест и пытался сделать.

PS забыл отнормировать данные прежде чем считать длину вектора и угол frown.gif

Код
> data.mds.scale<-scale(data.mds, center=c(-1.2605935, -0.2579902))
> l.mds.scale<-((data.mds.scale[,1])^2+(data.mds.scale[,2])^2)^0.5
> a.mds.scale<-atan2(data.mds.scale[,1], data.mds.scale[,2])
> plot(a.mds.scale,l.mds.scale, col=c("red","green")[factor(data.leit$выжил.умер)], , pch=c(1,2)[factor(model1$decision.values<=0)])


на картинке я зону svm приблизительно обвел, горизонтальная ось замкнута (это радианы угла вектора)

поскольку все читать утомительно я резюмирую:

решатель состоящий из правила -- все кто тяжелее 25 считать безнадежными и svm-решателя для остальных случаев дает
11 ошибок на 70 ~ 0.16


Сообщение отредактировал p2004r - 5.08.2012 - 12:47
Эскизы прикрепленных изображений
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение
Прикрепленное изображение

 


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

Сообщений в этой теме
- Zaycho   Определение чувствительности и специфичности комбинации маркеров   2.08.2012 - 14:20
- - p2004r   Цитата(Zaycho @ 2.08.2012 - 14:20) З...   2.08.2012 - 14:24
|- - Zaycho   Цитата(p2004r @ 2.08.2012 - 15:24) м...   2.08.2012 - 14:37
|- - p2004r   Цитата(Zaycho @ 2.08.2012 - 14:37) B...   2.08.2012 - 19:38
|- - Zaycho   А можно я все-таки покажу исходные данные? А, В и ...   2.08.2012 - 21:55
|- - p2004r   Цитата(Zaycho @ 2.08.2012 - 21:55) А...   3.08.2012 - 12:04
|- - Zaycho   Огромное спасибо за разъяснения! А можете тепе...   3.08.2012 - 14:27
|- - p2004r   Цитата(Zaycho @ 3.08.2012 - 14:27) О...   3.08.2012 - 14:59
|- - Zaycho   Глубокоуважаемый p2004r, правильно ли я понял, что...   3.08.2012 - 16:05
|- - p2004r   Цитата(Zaycho @ 3.08.2012 - 16:05) Г...   3.08.2012 - 16:30
|- - Zaycho   Я вконец запутался. А,В и С - это параметры, не вл...   3.08.2012 - 16:38
|- - p2004r   Цитата(Zaycho @ 3.08.2012 - 16:38) Я...   3.08.2012 - 19:29
- - TheThing   Цитата(Zaycho @ 2.08.2012 - 14:20) З...   3.08.2012 - 08:55
- - TheThing   Согласно моим расчетам лишь фактор С (тяжесть сост...   3.08.2012 - 20:07
|- - p2004r   Цитата(TheThing @ 3.08.2012 - 20:07)...   3.08.2012 - 21:12
- - TheThing   значит логистическая регрессия и рэндом форест даю...   3.08.2012 - 21:22
|- - p2004r   Цитата(TheThing @ 3.08.2012 - 21:22)...   3.08.2012 - 21:48
- - DrgLena   А если не лес строить, а одно дерево, то при одном...   3.08.2012 - 23:56
|- - p2004r   Цитата(DrgLena @ 3.08.2012 - 23:56) ...   4.08.2012 - 10:42
|- - p2004r   собственно да, svm получше выделяет Код> mode...   4.08.2012 - 11:18
|- - p2004r   линеаризирующее преобразование (!после отрезан...   4.08.2012 - 11:41
|- - Zaycho   Коллеги, а если вернуться к посту #14, то как опре...   5.08.2012 - 11:23
|- - p2004r   Цитата(Zaycho @ 5.08.2012 - 11:23) К...   5.08.2012 - 12:55
- - Zaycho   Да, я и не предполагал, что задача окажется не так...   4.08.2012 - 09:39
- - TheThing   Решил сделать рэндом форест, а также построить про...   5.08.2012 - 15:37
|- - p2004r   и все таки, после применения правила С>25, оста...   5.08.2012 - 15:56
|- - TheThing   Кстати, вот хорошая статья, где проводился сравнит...   5.08.2012 - 16:40
|- - p2004r   Цитата(TheThing @ 5.08.2012 - 16:40)...   5.08.2012 - 19:05
- - Диана   Раз зашла речь про ROC-анализ в программе SPSS под...   16.08.2012 - 09:25
|- - TheThing   Цитата(Диана @ 16.08.2012 - 09:25) Р...   16.08.2012 - 15:38
|- - Диана   Цитата(TheThing @ 16.08.2012 - 16:38...   16.08.2012 - 20:10
|- - p2004r   Цитата(Диана @ 16.08.2012 - 20:10) С...   16.08.2012 - 21:53
|- - TheThing   Цитата(Диана @ 16.08.2012 - 20:10) С...   16.08.2012 - 22:34
- - Диана   КФР-контролируемый фактор риска, НФР-неконтролируе...   17.08.2012 - 09:02
|- - p2004r   Цитата(Диана @ 17.08.2012 - 09:02) К...   17.08.2012 - 15:28
- - Диана   я немножко сократила таблицу, убрала малоинтересую...   17.08.2012 - 18:05
|- - p2004r   Цитата(Диана @ 17.08.2012 - 18:05) я...   17.08.2012 - 22:26
- - Диана   Факторы риска: 2 3 5 ...   18.08.2012 - 08:58
|- - p2004r   Цитата(Диана @ 18.08.2012 - 08:58) Ф...   18.08.2012 - 13:18
- - Диана   спасибо за помощь. колонки 44-46 не имеют влияние...   18.08.2012 - 20:57
|- - p2004r   Цитата(Диана @ 18.08.2012 - 20:57) с...   18.08.2012 - 22:37
- - Диана   колонки 44А 45А 46А были перекодированные колонки ...   19.08.2012 - 09:21
- - Диана   Подскажите кто знает: возможно ли удалить выложенн...   26.08.2012 - 08:57
- - Диана   ничего не получается, от проводимого лечения нет д...   26.08.2012 - 08:59
|- - p2004r   Цитата(Диана @ 26.08.2012 - 08:59) н...   27.08.2012 - 15:12
|- - Диана   Цитата(p2004r @ 27.08.2012 - 16:12) ...   27.08.2012 - 16:58
|- - p2004r   Цитата(Диана @ 27.08.2012 - 16:58) з...   27.08.2012 - 17:14
|- - Диана   2) "влияет ли тип операции на снижение частот...   27.08.2012 - 17:42
- - Диана   Хорошо, 13 колонка делит пациентов на 3 группы. Ле...   27.08.2012 - 17:25
- - Диана   1) влияет ли снижение ЧСС до операции на снижение ...   27.08.2012 - 17:29
|- - p2004r   Цитата(Диана @ 27.08.2012 - 17:29) 1...   27.08.2012 - 22:24
- - Диана   супер, в мозаичных графиках данные очень наглядно ...   28.08.2012 - 09:02
|- - p2004r   Цитата(Диана @ 28.08.2012 - 09:02) с...   28.08.2012 - 12:07
- - Диана   у меня есть данные факторного анализа, но, как сей...   28.08.2012 - 13:46
|- - p2004r   Цитата(Диана @ 28.08.2012 - 13:46) у...   28.08.2012 - 19:54
- - Диана   RE: Определение чувствительности и специфичности комбинации маркеров   28.08.2012 - 21:10
|- - p2004r   Цитата(Диана @ 28.08.2012 - 21:10) ...   31.08.2012 - 16:49
|- - Диана   фактически группы две - 1 и 3, вторая размазана ме...   1.09.2012 - 22:22
- - Диана   не могу разобраться с 3 графиком, какой то он слож...   1.09.2012 - 22:26
|- - p2004r   Цитата(Диана @ 1.09.2012 - 22:26) н...   3.09.2012 - 18:18
- - p2004r   Для новых данных надо заново номера переменных соб...   7.09.2012 - 20:00
|- - p2004r   Цитата(p2004r @ 7.09.2012 - 20:00) Д...   10.09.2012 - 11:33
- - Диана   ГБ : int 3 3 3 3 3 3 3 3 3 3 ....   10.09.2012 - 21:47


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