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

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

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





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



И такой вопросик
data(ROCR.simple)
threshold1 <- function(predict, response) {
perf <- ROCR::performance(ROCR::prediction(predict, response), "sens", "spec")
df <- data.frame(cut = perf@alpha.values[[1]], sens = perf@x.values[[1]], spec = perf@y.values[[1]])
df[which.max(df$sens + df$spec), "cut"]
}

threshold1(ROCR.simple$predictions, ROCR.simple$labels)
[1] 0.5014893
я правильно поняла, выше 0.5014893 мы принимаем решение, что наступит событие?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nokh
сообщение 12.07.2017 - 18:35
Сообщение #32





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



Похоже мой ответ на письмо в личку не дошёл, дублирую его здесь.

Здравствуйте, nastushka.
Вы не ответили на мой уточняющий вопрос, а когда мне не понятно - то и не интересно. Я перестал отслеживать вашу тему.

Если в общем, то ROC-анализ более полезен для одного количественного показателя, а не для набора, т.к. позволяет выбрать пороговое значение диагностического показателя с наивысшими чувствительностью и специфичностью.
В случае множественной логистической регрессии, когда показателей много, анализ и описание его результатов логично проводить в два этапа.
1) Сокращение набора предикторов. Можно сделать полную модель, и отобрать значимые. Можно сделать полную полную с пошаговым отбором (stepwise). Можно отобрать наиболее сильные предикторы случайным лесом - как вы. Можно как-то ещё.
2) В окончательную модель дать только отобранные предикторы. Привести в результатах:
2.1. константу и коэффициенты регрессии - чтобы по формуле с этими показателями можно было считать риск (прогноз) для каждого конкретного случая в области применения результатов
2.2. соответствующие этим коэффициентам отношения шансов (т.е. пересчитать логиты в OR, пакеты это делают, хотя можно и вручную)
2.3. статистическую значимость для каждого члена модели.
2.1-2.3. удобно дать таблицей.
2.4. показатели диагностической эффективности: чувствительность (с 95% доверительным интервалом), специфичность (с 95% ДИ)
2.4. можно диагностическую эффективность дополнить интегральными мерами: и долей верно классифицированных случаев, и площадью под ROC-кривой. Т.е. последняя не несёт в случае множ. логистической регресии какой-то конкретики: это просто интегральная мера качества диагностики.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 18:36
Сообщение #33





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



не-не он дошел, только что прочла:)))
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
p2004r
сообщение 12.07.2017 - 18:41
Сообщение #34





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



Цитата(nokh @ 12.07.2017 - 18:35) *
Похоже мой ответ на письмо в личку не дошёл, дублирую его здесь.

Здравствуйте, nastushka.
Вы не ответили на мой уточняющий вопрос, а когда мне не понятно - то и не интересно. Я перестал отслеживать вашу тему.

Если в общем, то ROC-анализ более полезен для одного количественного показателя, а не для набора, т.к. позволяет выбрать пороговое значение диагностического показателя с наивысшими чувствительностью и специфичностью.
В случае множественной логистической регрессии, когда показателей много, анализ и описание его результатов логично проводить в два этапа.
1) Сокращение набора предикторов. Можно сделать полную модель, и отобрать значимые. Можно сделать полную полную с пошаговым отбором (stepwise). Можно отобрать наиболее сильные предикторы случайным лесом - как вы. Можно как-то ещё.
2) В окончательную модель дать только отобранные предикторы. Привести в результатах:
2.1. константу и коэффициенты регрессии - чтобы по формуле с этими показателями можно было считать риск (прогноз) для каждого конкретного случая в области применения результатов
2.2. соответствующие этим коэффициентам отношения шансов (т.е. пересчитать логиты в OR, пакеты это делают, хотя можно и вручную)
2.3. статистическую значимость для каждого члена модели.
2.1-2.3. удобно дать таблицей.
2.4. показатели диагностической эффективности: чувствительность (с 95% доверительным интервалом), специфичность (с 95% ДИ)
2.4. можно диагностическую эффективность дополнить интегральными мерами: и долей верно классифицированных случаев, и площадью под ROC-кривой. Т.е. последняя не несёт в случае множ. логистической регресии какой-то конкретики: это просто интегральная мера качества диагностики.


ROC для оценки модели в целом вполне себе пригоден (в том числе и для оценки модели с переменным числом предикторов). Есть методы поиска моделей основанные именно на таком критери качества. Не очень удобен он если исходов детектируемых моделью больше двух.


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





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



Цитата(nastushka @ 12.07.2017 - 18:34) *
И такой вопросик
data(ROCR.simple)
threshold1 <- function(predict, response) {
perf <- ROCR::performance(ROCR::prediction(predict, response), "sens", "spec")
df <- data.frame(cut = perf@alpha.values[[1]], sens = perf@x.values[[1]], spec = perf@y.values[[1]])
df[which.max(df$sens + df$spec), "cut"]
}

threshold1(ROCR.simple$predictions, ROCR.simple$labels)
[1] 0.5014893
я правильно поняла, выше 0.5014893 мы принимаем решение, что наступит событие?


Смотря что мы считаем событием. В любом разе выше границы один класс, ниже второй.

Что по коду, то ч использую library(pROC)


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





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



Цитата(nastushka @ 12.07.2017 - 15:12) *
spec=0,06,sens=0.94


Такая модель имеет нулевую ценность. Она "срабатывает" во всех нужных случаях, но среди "срабатываний" практически все ложные.

ЗЫ Если этот трешоилд отобрал критерий по весам и частотам, то наверное всё.

можно конечно еще их попробовать свернуть PCA и пройтись по компонентам в поисках значимой, но это уже от безысходности sad.gif.



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





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



поняла

Сообщение отредактировал nastushka - 12.07.2017 - 18:56
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 18:59
Сообщение #38





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



я просто так считала


Сообщение отредактировал nastushka - 12.07.2017 - 20:47
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 19:00
Сообщение #39





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



sensetivity=tp/(tp+fn) доля верных предсказаний плохих прибавить хороших попавшим к плохим
Специфичность
specifity (доля верных хороших+ плохие попавших в хорошие)
tn/(tn+fp)

может я неверно посчитала?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
DrgLena
сообщение 12.07.2017 - 19:24
Сообщение #40





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



spe=1-0,06=0,94
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 19:46
Сообщение #41





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



вы имеете ввиду, что 0,06 это чувствительность?
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
100$
сообщение 12.07.2017 - 20:35
Сообщение #42





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



Цитата(nastushka @ 12.07.2017 - 19:46) *
вы имеете ввиду, что 0,06 это чувствительность?


Имеется виду то, что вы неправильно считаете специфичность. 1-специфичность - это значение, откладываемое на оси абсцисс исключительно для удобства.
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
DrgLena
сообщение 12.07.2017 - 20:37
Сообщение #43





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



Нет, вы привели таблицу из которой можно посчитать чувствительность 134/(134+8), а также специфичность 74/(74+5). По оси Х в ROC кривой не специфичность, а 1-спец, а вы написали спец=1-74/(74+5)
100$ уже пояснил smile.gif


Сообщение отредактировал DrgLena - 12.07.2017 - 20:39
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 12.07.2017 - 20:45
Сообщение #44





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



все поняла ошибку.smile.gif
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 
nastushka
сообщение 5.08.2017 - 17:10
Сообщение #45





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



p2004r, здравствуйте, решила написать в своем же топике, но теперь тут другой скоринг (Раньше плохой, хороший), а сейчас купит-не купит услугу(id is dep var) smile.gif

Логистическая регрессия здесь, показала ужасные результаты, почти все нули(те, кто не купили) были правильно к своему классу отнесены, а единицы(те кто купили) также к нулям.
Все что смогла сама сделать, это Дискриминантный анализ в SPSS, вроде показал точность 60%, но это ни о чем. Сильная перемешка кейсов. Можете подсказать, как мне модель выровнять?
С регрессией что спсс, что статистика также ,как и R показывали такой результат. Тут нужно только через ДА.

acc=read.csv("C:/Users/Admin/Desktop/buyning.csv", sep=";",dec=",")

getwd()

> acc$profitValueList=as.numeric(acc$profitValueList)
> acc$revenueValueList=as.numeric(acc$revenueValueList)
> acc$courtPracticeList=as.numeric(acc$courtPracticeList)
> acc$digestRedList=as.numeric(acc$digestRedList)
> acc$digestGreyList=as.numeric(acc$digestGreyList)
> acc$digestGreenList=as.numeric(acc$digestGreenList)
> acc$linkedEntitiesByCeoNumList=as.numeric(acc$linkedEntitiesByCeoNumList)
> acc$linkedEntitiesByFounderNumList=as.numeric(acc$linkedEntitiesByFounderNumList)
> acc$linkedEntitiesChildrenNumList=as.numeric(acc$linkedEntitiesChildrenNumList)
> acc$capitalList=as.numeric(acc$capitalList)
> acc$gosWinnerNumList=as.numeric(acc$gosWinnerNumList)
> acc$gosWinnerSumList=as.numeric(acc$gosWinnerSumList)
> acc$gosPlacerNumList=as.numeric(acc$gosPlacerNumList)
> acc$gosPlacerSumList=as.numeric(acc$gosPlacerSumList)
> acc$inspectionsInFutureNumList=as.numeric(acc$inspectionsInFutureNumList)
> acc$inspectionsHasViolationsNumList=as.numeric(acc$inspectionsHasViolationsNumList)
> acc$inspectionsNoViolationsNumList=as.numeric(acc$inspectionsNoViolationsNumList)
> acc$inspectionsHasViolationsFailsList=as.numeric(acc$inspectionsHasViolationsFailsList)
> acc$Выручка=as.numeric(acc$Выручка)
> acc$Прибыль=as.numeric(acc$Прибыль)
> acc$Убыток=as.numeric(acc$Убыток)
> acc$Баланс=as.numeric(acc$Баланс)
> acc$Директор.Учредитель=as.numeric(acc$Директор.Учредитель)
> acc$Директор.отдельно=as.numeric(acc$Директор.отдельно)
> acc$Учредитель.отдельно=as.numeric(acc$Учредитель.отдельно)


> index <- sample(1:nrow(acc),round(0.75*nrow(acc)))
> train <- acc[index,]
> test <- acc[-index,]

> library("MASS")


> fitTrn =lda(id~.,data=train)
Error in lda.default(x, grouping, ...) :

ошибка была
variables 15 16 appear to be constant within groups


Как мне хотя бы маломальски точную классификацию получить?
Прикрепленные файлы
Прикрепленный файл  buyning.zip ( 221,87 килобайт ) Кол-во скачиваний: 224
 
Вернуться в начало страницы
 
+Ответить с цитированием данного сообщения
 

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