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

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

4 страниц V  < 1 2 3 4 >  
Добавить ответ в эту темуОткрыть тему
> Логистическая регрессия в R
nastushka
сообщение 2.07.2017 - 15:21
Сообщение #16


Дух форума
*

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



p2004r
смотрите, у меня родилась мысль
вот результаты классификации random forest
Confusion matrix:
0 1 class.error
0 831 3 0.003597122302
1 103 528 0.163232963550
Как мне найти номера наблюдений единиц, которые попали в нули, 103 штучки?))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 2.07.2017 - 15:42
Сообщение #17


Дух форума
*

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



Цитата(nastushka @ 2.07.2017 - 15:21) *
p2004r
смотрите, у меня родилась мысль
вот результаты классификации random forest
Confusion matrix:
0 1 class.error
0 831 3 0.003597122302
1 103 528 0.163232963550
Как мне найти номера наблюдений единиц, которые попали в нули, 103 штучки?))


Два вектора v1 и v2 (обучение df$Y и решение_RF res.rf$predicted)

which(v1==1&v2==0)


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 2.07.2017 - 20:54
Сообщение #18


Дух форума
*

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



p2004r, у меня все получилось:)
Но возник такой вопрос.
Как можно по каждой КАТЕГОРИАЛЬНОЙ переменной сосчитать процент определенных значений для нуля и единицы?
На выходе это выглядит так:

df$X1 (посчитать нули для категорий "0 " и "1")
0 1
68% 89%
т.е. по переменной Х1 у нас 68% значений 0 и 32% соответственно единиц для выходной категории "0"
и по переменной Х1 у нас 89% значений 0 и 11% соответственно единиц для выходной категории "1"


Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 3.07.2017 - 17:25
Сообщение #19


Дух форума
*

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



Терпение и труд, все перетрут) Сделала, но вот гугль не помог по такому вопросу:
df=read.csv(mydata)
df=na.omit(df)
library("randomForest")

model=randomForest(y ~.

,df, sampsize=c("0"=300, "1"=300))





newdata=х.csv
newdata=data.frame(lapply(newdata, factor))

str(df)
xq=rbind(newdata,df)
str(xq)
xqtest=xq[1:17,]
str(xqtest)
View(xqtest)



pred <- predict(model, newdata = xqtest,type="class")

str(df)
str(newdata)
ошибка
Error in predict.randomForest(model, newdata = xqtest, type = "class") :
Type of predictors in new data do not match that of the training data.

подскажите ,как победить эту ошибку[attachment=1521:x.zip]
Прикрепленные файлы
Прикрепленный файл  mydata.zip ( 7,25 килобайт ) Кол-во скачиваний: 15
Прикрепленный файл  x.zip ( 263 байт ) Кол-во скачиваний: 15
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 3.07.2017 - 22:10
Сообщение #20


Дух форума
*

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



Цитата(nastushka @ 3.07.2017 - 17:25) *
Терпение и труд, все перетрут) Сделала, но вот гугль не помог по такому вопросу:
df=read.csv(mydata)
df=na.omit(df)
library("randomForest")

model=randomForest(y ~.

,df, sampsize=c("0"=300, "1"=300))





newdata=х.csv
newdata=data.frame(lapply(newdata, factor))

str(df)
xq=rbind(newdata,df)
str(xq)
xqtest=xq[1:17,]
str(xqtest)
View(xqtest)



pred <- predict(model, newdata = xqtest,type="class")

str(df)
str(newdata)
ошибка
Error in predict.randomForest(model, newdata = xqtest, type = "class") :
Type of predictors in new data do not match that of the training data.

подскажите ,как победить эту ошибку[attachment=1521:x.zip]



сравните str(df) и str(xqtest) и вопросов не будет


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


Дух форума
*

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



Цитата(nastushka @ 2.07.2017 - 20:54) *
p2004r, у меня все получилось:)
Но возник такой вопрос.
Как можно по каждой КАТЕГОРИАЛЬНОЙ переменной сосчитать процент определенных значений для нуля и единицы?
На выходе это выглядит так:

df$X1 (посчитать нули для категорий "0 " и "1")
0 1
68% 89%
т.е. по переменной Х1 у нас 68% значений 0 и 32% соответственно единиц для выходной категории "0"
и по переменной Х1 у нас 89% значений 0 и 11% соответственно единиц для выходной категории "1"



Код
> table(df$Y)

   0    1
1537  631
> table(df$Y)/nrow(df)

        0         1
0.7089483 0.2910517
> (table(df$Y)/nrow(df))*100

       0        1
70.89483 29.10517
>


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 4.07.2017 - 13:23
Сообщение #22


Дух форума
*

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



К сожалению вопросы есть sad.gif

Код
str(df)
'data.frame':    823 obs. of  17 variables:
$ isOneDay                         : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ sizeList                         : Factor w/ 4 levels "0","1","2","3": 1 1 1 2 1 1 1 1 1 1 ...
$ licensesList                     : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosWinnerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosWinnerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosPlacerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosPlacerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ inspectionsInFutureNumList       : Factor w/ 4 levels "0","1","2","8": 2 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsNumList  : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsNoViolationsNumList   : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsFailsList: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ courtPracticeList                : Factor w/ 2 levels "0","1": 2 2 2 1 2 2 2 1 2 1 ...
$ digestGreenList                  : Factor w/ 9 levels "1","2","3","4",..: 4 3 4 1 4 3 2 2 3 3 ...
$ linkedEntitiesByCeoNumList       : Factor w/ 2 levels "0","1": 2 2 1 2 1 2 2 1 2 2 ...
$ linkedEntitiesByFounderNumList   : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ...
$ linkedEntitiesChildrenNumList    : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ digestGreyList                   : Factor w/ 8 levels "0","1","2","3",..: 2 3 3 5 2 2 3 5 3 4 ...
- attr(*, "na.action")=Class 'omit'  Named int [1:1345] 12 14 17 26 29 42 43 49 50 57 ...
  .. ..- attr(*, "names")=8322456 [1:1345] "12" "14" "17" "26" ...



вот реальные данные
newdata=read.csv("x.csv") удалите из наборе x.csv переменную Y, я хочу ее предсказать
newdata=data.frame(lapply(newdata, factor))
там не должно быть Y

Код
'data.frame':    11 obs. of  16 variables:
$ sizeList                         : Factor w/ 4 levels "0","1","2","3": 2 1 2 4 2 4 1 1 4 3 ...
$ licensesList                     : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ...
$ gosWinnerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ...
$ gosWinnerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ...
$ gosPlacerNumList                 : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ gosPlacerSumList                 : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsInFutureNumList       : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsNumList  : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsNoViolationsNumList   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsFailsList: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ courtPracticeList                : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 1 2 1 2 ...
$ digestGreenList                  : Factor w/ 5 levels "4","5","6","7",..: 1 1 1 3 2 5 4 3 3 3 ...
$ linkedEntitiesByCeoNumList       : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ linkedEntitiesByFounderNumList   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 1 1 ...
$ linkedEntitiesChildrenNumList    : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 2 2 2 ...
$ digestGreyList                   : Factor w/ 3 levels "0","1","2": 1 3 2 2 2 2 3 3 2 2 ...


все переменные одинаковые у тип у них фактор!

Error in predict.randomForest(model, newdata = newdata, type = "class") :
Type of predictors in new data do not match that of the training data.

Кстати если в наборе х.csv есть переменная Y он дает предсказания.
Но смысл, мне нужно на новых данных это сделать, а на них заведомо нет игрика
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 4.07.2017 - 14:54
Сообщение #23


Дух форума
*

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



Y это isOneDay
поскольку мне сдавать нужно ,я переименовала обратно с иксов
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 4.07.2017 - 20:18
Сообщение #24


Дух форума
*

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



Цитата(nastushka @ 4.07.2017 - 13:23) *
К сожалению вопросы есть sad.gif

Код
str(df)
'data.frame':    823 obs. of  17 variables:
$ isOneDay                         : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ sizeList                         : Factor w/ 4 levels "0","1","2","3": 1 1 1 2 1 1 1 1 1 1 ...
$ licensesList                     : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosWinnerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosWinnerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosPlacerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ gosPlacerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ inspectionsInFutureNumList       : Factor w/ 4 levels "0","1","2","8": 2 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsNumList  : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsNoViolationsNumList   : Factor w/ 11 levels "0","1","2","3",..: 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsFailsList: Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ courtPracticeList                : Factor w/ 2 levels "0","1": 2 2 2 1 2 2 2 1 2 1 ...
$ digestGreenList                  : Factor w/ 9 levels "1","2","3","4",..: 4 3 4 1 4 3 2 2 3 3 ...
$ linkedEntitiesByCeoNumList       : Factor w/ 2 levels "0","1": 2 2 1 2 1 2 2 1 2 2 ...
$ linkedEntitiesByFounderNumList   : Factor w/ 2 levels "0","1": 1 1 2 1 1 1 1 1 1 1 ...
$ linkedEntitiesChildrenNumList    : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
$ digestGreyList                   : Factor w/ 8 levels "0","1","2","3",..: 2 3 3 5 2 2 3 5 3 4 ...
- attr(*, "na.action")=Class 'omit'  Named int [1:1345] 12 14 17 26 29 42 43 49 50 57 ...
  .. ..- attr(*, "names")=8322456 [1:1345] "12" "14" "17" "26" ...



вот реальные данные
newdata=read.csv("x.csv") удалите из наборе x.csv переменную Y, я хочу ее предсказать
newdata=data.frame(lapply(newdata, factor))
там не должно быть Y

Код
'data.frame':    11 obs. of  16 variables:
$ sizeList                         : Factor w/ 4 levels "0","1","2","3": 2 1 2 4 2 4 1 1 4 3 ...
$ licensesList                     : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ...
$ gosWinnerNumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ...
$ gosWinnerSumList                 : Factor w/ 2 levels "0","1": 2 2 2 2 1 1 1 2 1 2 ...
$ gosPlacerNumList                 : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ gosPlacerSumList                 : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsInFutureNumList       : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsNumList  : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsNoViolationsNumList   : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ inspectionsHasViolationsFailsList: Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ courtPracticeList                : Factor w/ 2 levels "0","1": 2 2 2 2 1 2 1 2 1 2 ...
$ digestGreenList                  : Factor w/ 5 levels "4","5","6","7",..: 1 1 1 3 2 5 4 3 3 3 ...
$ linkedEntitiesByCeoNumList       : Factor w/ 1 level "0": 1 1 1 1 1 1 1 1 1 1 ...
$ linkedEntitiesByFounderNumList   : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 1 1 ...
$ linkedEntitiesChildrenNumList    : Factor w/ 2 levels "0","1": 2 2 1 2 2 2 2 2 2 2 ...
$ digestGreyList                   : Factor w/ 3 levels "0","1","2": 1 3 2 2 2 2 3 3 2 2 ...


все переменные одинаковые у тип у них фактор!

Error in predict.randomForest(model, newdata = newdata, type = "class") :
Type of predictors in new data do not match that of the training data.

Кстати если в наборе х.csv есть переменная Y он дает предсказания.
Но смысл, мне нужно на новых данных это сделать, а на них заведомо нет игрика



ну так уровни факторов улетели, они могут быть только подмножеством от обучающего датасета

Код
levels(newdata$digestGreyList) <- levels(df$digestGreyList)


или автоматом для совпадающих

Код
for(n in intersect(names(df), names(newdata))) levels(newdata[,n]) <- levels(df[,n])



ЗЫ а вообще не надо этих групп плодить, все данные вместе должны быть и просто признак принадлежности (тогда и геморроя такого меньше)

Сообщение отредактировал p2004r - 4.07.2017 - 20:21


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 5.07.2017 - 17:51
Сообщение #25


Дух форума
*

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



Да, Вы правы! p2004r, последний вопрос, интерпретационного плана. Имею ли я право вероятности до 0.7 не принимать в расчет?
Например, у меня наблюдение класса "0", но предсказал вероятность 0,62(арифметически округлим - это единица будет). Есть и 0,76(тут я считаю за неверную классификацию). Я считаю, что меньше 0,7 вообще не стоит рассматривать вероятность. Скажите, права я или нет?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 5.07.2017 - 21:33
Сообщение #26


Дух форума
*

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



Цитата(nastushka @ 5.07.2017 - 17:51) *
Да, Вы правы! p2004r, последний вопрос, интерпретационного плана. Имею ли я право вероятности до 0.7 не принимать в расчет?
Например, у меня наблюдение класса "0", но предсказал вероятность 0,62(арифметически округлим - это единица будет). Есть и 0,76(тут я считаю за неверную классификацию). Я считаю, что меньше 0,7 вообще не стоит рассматривать вероятность. Скажите, права я или нет?



Это называется "точка принятия решения" -- thresholds. Вся ROC состоит по сути из этих точек. Выбрать наилучшую точку принятия решения можно зная частоты исходов в популяции и соотношение стоимости ошибок первого и второго рода.


Код
     In addition, weights can be supplied if false positive and false
     negative predictions are not equivalent: a numeric vector of
     length 2 to the ?best.weights? argument. The indices define

       1. the cost of of a false negative classification

       2. the prevalence, or the proportion of cases in the total
          population (n.cases/(n.controls+n.cases)).

     The optimality criteria are modified as proposed by Perkins and
     Schisterman:

     ?youden?

                   max(sensitivities + r \times specificities)          
          
     ?closest.topleft?

            min((1 - sensitivities)^2 + r \times (1- specificities)^2)  
          
     with

                 r = (1 - prevalence) / (cost * prevalence)            
    
     By default, prevalence is 0.5 and cost is 1 so that no weight is
     applied in effect.

     Note that several thresholds might be equally optimal.

References:

     Neil J. Perkins, Enrique F. Schisterman (2006) ``The Inconsistency
     of "Optimal" Cutpoints Obtained using Two Criteria based on the
     Receiver Operating Characteristic Curve''. _American Journal of
     Epidemiology_ *163*(7), 670-675. DOI: 10.1093/aje/kwj063.


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 6.07.2017 - 17:15
Сообщение #27


Дух форума
*

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



с RoC получилось разобраться. А как мне в отчете правильно писать.?
Например, предсказанное значение вероятности 0,86. А точность классификации модели 90%.
Я могу сказать, что с 90% точностью вероятность наступления события 0,86? Или как это корректно будет по-русски?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 8.07.2017 - 23:06
Сообщение #28


Дух форума
*

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



Цитата(nastushka @ 6.07.2017 - 17:15) *
с RoC получилось разобраться. А как мне в отчете правильно писать.?
Например, предсказанное значение вероятности 0,86. А точность классификации модели 90%.
Я могу сказать, что с 90% точностью вероятность наступления события 0,86? Или как это корректно будет по-русски?


Если в терминах ReOpCu, то для выбранной (оптимальной для условий применения модели) точки принятия решения указывается соответствующая "чувствительность" и "специфичность". В целом модель оценивается безотносительно конкретной точки принятия решения по величине ArUnCu


Signature
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 15:08
Сообщение #29


Дух форума
*

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



p2004r, подскажите
я рассчитала spec and sens
как на базе этих значений мне вручную высчитать AUC?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 15:12
Сообщение #30


Дух форума
*

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



spec=0,06,sens=0.94
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

4 страниц V  < 1 2 3 4 >
Добавить ответ в эту темуОткрыть тему