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

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

> Модель для прогнозирования.
Felix77
сообщение 12.06.2018 - 08:32
Сообщение #1





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



help.gif пожалуйста, можно ли из имеющихся данных создать модель для прогнозирования. В прилагаемой таблице представлены переменные пациентов, у которых в последствии развилась контраст индуцированная нефропатия (КИН), соответственно зависимая переменная - КИН (0-не развилась КИН, 1 - развилась). Пытался использовать логистическую регрессию, которая не показала значимого влияния предикторов. Пытался применить Random Forest, в R ничего не получилось. Может проблема в большом количестве пропущенных данных
Прикрепленные файлы
Прикрепленный файл  CIN.xlsx ( 27,58 килобайт ) Кол-во скачиваний: 277
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
 
Открыть тему
Ответов
100$
сообщение 13.06.2018 - 14:03
Сообщение #2





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



А вот интересно, почему при выращивании леса узлы расщепляются по Gini, а при селекции переменных используется Minimal Depth? И почему при таком раскладе метод не смог выдать относительную важность предикторов (vimp=NA)? До такой степени плохой датасет?

А чем обусловлен выбор PCA3 vs. PCA5? В первых двух ГК все совсем плохо?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 13.06.2018 - 15:34
Сообщение #3





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



Цитата(100$ @ 13.06.2018 - 14:03) *
А вот интересно, почему при выращивании леса узлы расщепляются по Gini, а при селекции переменных используется Minimal Depth? И почему при таком раскладе метод не смог выдать относительную важность предикторов (vimp=NA)? До такой степени плохой датасет?

А чем обусловлен выбор PCA3 vs. PCA5? В первых двух ГК все совсем плохо?


Да просто не включил, в принципе результаты одинаковые всегда по обоим критериям (а время расчета существенно отличается, но тут размер позволяет считать все). Тут модель слишком слаба, скорее даже ничтожна.

Код
> res.pca.rfsrc
                         Sample size: 118
           Frequency of class labels: 102, 16
                     Number of trees: 5000
           Forest terminal node size: 1
       Average no. of terminal nodes: 8.3986
No. of variables tried at each split: 3
              Total no. of variables: 5
                            Analysis: RF-C
                              Family: class
                      Splitting rule: gini
              Normalized Brier score: 85.2
                          Error rate: 0.32, 0.27, 0.62

Confusion matrix:

          predicted
  observed  0  1 class.error
         0 74 28      0.2745
         1 10  6      0.6250

    Overall error rate: 32.2%
> randomForestSRC::var.select(res.pca.rfsrc, nrep = 40)
minimal depth variable selection ...


-----------------------------------------------------------
family             : class
var. selection     : Minimal Depth
conservativeness   : medium
x-weighting used?  : TRUE
dimension          : 5
sample size        : 118
ntree              : 5000
nsplit             : 0
mtry               : 3
nodesize           : 1
refitted forest    : FALSE
model size         : 2
depth threshold    : 2.0305
PE (true OOB)      : 0.322 0.2745 0.625


Top variables:
    depth vimp
PC5 1.476   NA
PC3 1.833   NA


Ну и сама модель (чистого vimp отбора нет в randomForestSRC, только случайный поиск)

Код
> res.rfsrc <- rfsrc(КИН~.,
+                    data=na.omit(df.cin[,-1]),
+                    case.wt = randomForestSRC:::make.wt(na.omit(df.cin)$КИН),
+                    sampsize = randomForestSRC:::make.size(na.omit(df.cin)$КИН),
+                    ntree = 5000,
+                    importance=TRUE)
> res.rfsrc
                         Sample size: 116
           Frequency of class labels: 100, 16
                     Number of trees: 5000
           Forest terminal node size: 1
       Average no. of terminal nodes: 8.6186
No. of variables tried at each split: 3
              Total no. of variables: 9
                            Analysis: RF-C
                              Family: class
                      Splitting rule: gini
              Normalized Brier score: 80.85
                          Error rate: 0.28, 0.23, 0.56

Confusion matrix:

          predicted
  observed  0  1 class.error
         0 77 23      0.2300
         1  9  7      0.5625

    Overall error rate: 27.59%
> randomForestSRC::var.select(res.rfsrc, nrep = 40)
minimal depth variable selection ...


-----------------------------------------------------------
family             : class
var. selection     : Minimal Depth
conservativeness   : medium
x-weighting used?  : TRUE
dimension          : 9
sample size        : 116
ntree              : 5000
nsplit             : 0
mtry               : 3
nodesize           : 1
refitted forest    : FALSE
model size         : 5
depth threshold    : 2.969
PE (true OOB)      : 0.2759 0.23 0.5625


Top variables:
          depth vimp.all vimp.0 vimp.1
возраст   2.651    0.007  0.016  0.033
тропонин  2.790    0.001  0.006  0.012
КФК2      2.856    0.002  0.008 -0.001
креатинин 2.912    0.002  0.009 -0.001
калий     2.927    0.003  0.008  0.008
-----------------------------------------------------------
> randomForestSRC::var.select(res.rfsrc, nrep = 40, method = "vh.vimp")
---------------------  Iteration: 1   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.087      dim: 2
---------------------  Iteration: 2   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 1
---------------------  Iteration: 3   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2609      dim: 1
---------------------  Iteration: 4   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 5   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 6   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.3333      dim: 2
---------------------  Iteration: 7   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1667      dim: 1
---------------------  Iteration: 8   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2083      dim: 2
---------------------  Iteration: 9   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2609      dim: 1
---------------------  Iteration: 10   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 11   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 12   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 13   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.0833      dim: 1
---------------------  Iteration: 14   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 1
---------------------  Iteration: 15   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2174      dim: 2
---------------------  Iteration: 16   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2174      dim: 2
---------------------  Iteration: 17   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2174      dim: 2
---------------------  Iteration: 18   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 1
---------------------  Iteration: 19   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 20   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 21   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2174      dim: 2
---------------------  Iteration: 22   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.375      dim: 1
---------------------  Iteration: 23   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 24   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 25   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.0435      dim: 2
---------------------  Iteration: 26   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.3043      dim: 2
---------------------  Iteration: 27   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 28   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 29   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 30   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.087      dim: 2
---------------------  Iteration: 31   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2083      dim: 2
---------------------  Iteration: 32   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 33   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
---------------------  Iteration: 34   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 35   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1667      dim: 2
---------------------  Iteration: 36   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.25      dim: 1
---------------------  Iteration: 37   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 1
---------------------  Iteration: 38   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.2174      dim: 2
---------------------  Iteration: 39   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1304      dim: 2
---------------------  Iteration: 40   ---------------------
     selecting variables using Variable Hunting (VIMP) ...
     PE: 0.1739      dim: 2
fitting forests to final selected variables ...


-----------------------------------------------------------
family             : class
var. selection     : Variable Hunting (VIMP)
conservativeness   : medium
dimension          : 9
sample size        : 116
K-fold             : 5
no. reps           : 40
nstep              : 1
ntree              : 500
nsplit             : 10
mvars              : 2
nodesize           : 2
refitted forest    : TRUE
model size         : 1.75 +/- 0.4385
PE (K-fold)        : 0.1763 +/- 0.0677


Top variables:
         rel.freq
калий        27.5
тропонин     25.0
-----------------------------------------------------------
>


Но собственно качество модели об этом и говорит

Код
> roc(na.omit(df.cin[,-1])$КИН, predict(res.rfsrc)$predicted.oob[,2])

Call:
roc.default(response = na.omit(df.cin[, -1])$КИН, predictor = predict(res.rfsrc)$predicted.oob[,     2])

Data: predict(res.rfsrc)$predicted.oob[, 2] in 100 controls (na.omit(df.cin[, -1])$КИН 0) < 16 cases (na.omit(df.cin[, -1])$КИН 1).
Area under the curve: 0.5419


Эскизы прикрепленных изображений
Прикрепленное изображение
 


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

Сообщений в этой теме


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