Вкратце о маленьком пакете cir
Есть два основных применения данного вида регрессии в реальных задачах:
[IMG alt="Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and
Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256"]https://habrastorage.org/r/w1560/ge...37/d007513373f8f40edf735108c2fbfa2e.png[/IMG]
Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in
Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256
Недавно алгоритм был модифицирован. Две работы позволили немного модифицировать алгоритм:
Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256
Собственно, на всем этом и основан пакет CIR, с которым мы будем знакомиться
В качестве независимой переменной выступает логарифм дозы носителей инфекции, в качестве зависимой переменной - вероятность заболеть.
База данных и все сопутствующие материалы есть на https://github.com/acheremuhin/Isotonic_regression
col_names = FALSE)
nam<-t(Data[,1])
Base<-as.data.frame(t(Data[,2:24]))
colnames(Base)<-nam
ggplot(data=Base, aes(x=Base$log_dose, y=Base$Probability_of_infection_1)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования")
Если посмотреть на точечный график, то это будет что-то типа
Очень похоже на логистическую регрессию
В пакете представлены три алгоритма регрессии - их реализуют функции cirPAVA() - это новый алгоритм, oldPAVA - старый алгоритм и iterCIR() - итеративная версия нового алгоритма. Но мы воспользуемся другой функцией для построения регрессии и доверительных интервалов
x1<-Base[,2]
names(x1)<-c()
x2<-Base[,1]
names(x2)<-c()
dat<-doseResponse(y=x1,x=x2)
quick1<-quickIsotone(dat) # Быстрая регрессия - получение доверительных интервалов для значений у
ggplot(data=quick1, aes(x=x, y=y)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования") +
geom_line(data=quick1,aes(x=x, y=lower90conf))+
geom_line(data=quick1,aes(x=x, y=upper90conf))
Вот и доверительные интервалы
При этом расчет доверительных интервалов может осуществляться тремя способами, выбрать которые можно при использовании функции isotInterval. Все вместе будет выглядеть так:
slow1<-cirPAVA(dat,full=TRUE) # Построение регрессии по алгоритму CIR
slow1$output # Предсказанные значения
slow1$input # Исходные данные
slow1$shrinkage # Сокращенные данные для построения графика зависимости
int1_0<-isotInterval(slow1,narrower=FALSE) # Расчет доверительных интервалов по готовой модели
int1_0
ggplot(data=quick1, aes(x=x, y=y)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования") +
geom_line(data=slow1$shrinkage,aes(x=x, y=y), color = "green") +
geom_line(data=int1_0,aes(x=quick1$x, y=ciLow))+
geom_line(data=int1_0,aes(x=quick1$x, y=ciHigh))
Доверительные интервалы чуть-чуть, но другие
Функция quickIsotone() может также осуществлять и прогнозирование. Для этого есть параметр outx
quickIsotone(dat, outx = c(2.15,7.75)) # Предсказание с доверительными интервалами для значения
Результат предсказания
habr.com
Минутка теории
Изотоническая регрессия - это крайне специфический вид регрессии, который применяется при жестком требовании неубывания значения зависимой переменной при возрастании значения независимой переменнойЕсть два основных применения данного вида регрессии в реальных задачах:
- В фармакологических задачах, где нужно найти взаимосвязь типа "отклик - доза" (например, "концентрация препарата - доля умерших")
- При моделировании распределений, когда в качестве зависимой переменной выступает квантиль функции распределения
[IMG alt="Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and
Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256"]https://habrastorage.org/r/w1560/ge...37/d007513373f8f40edf735108c2fbfa2e.png[/IMG]
Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in
Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256
Недавно алгоритм был модифицирован. Две работы позволили немного модифицировать алгоритм:
- Oron A. P., Flournoy N. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. 2017. № 3 (9) DOI:10.1080/19466315.2017.1286256 - был представлен новый, сглаживающий алгоритм
- Oron A. P., Flournoy N. Bias induced by adaptive dose-finding designs // Journal of Applied Statistics. 2019. DOI: 10.1080/02664763.2019.1649375 - была представлена методика расчета доверительных интервалов при предсказании значений зависимых переменных
![Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256 Цитируется по: Assaf P. Oron, Nancy Flournoy. Centered Isotonic Regression: Point and Interval Estimation for Dose-Response Studies / Statistics in Biopharmaceutical Research. № 3 (9) DOI:10.1080/19466315.2017.1286256](https://habrastorage.org/r/w1560/getpro/habr/upload_files/cbd/70f/fbe/cbd70ffbe1cb53fc0f42fbff1d00d995.png)
Собственно, на всем этом и основан пакет CIR, с которым мы будем знакомиться
Методология
Основа для данной статьи - база данных из исследования https://www.researchgate.net/public..._monocytogenes_infection_in_human_populations (что-то связано с инфекциями в человеческой популяции), которая отдельно доступна по ссылке https://zenodo.org/record/4970865#.YTXqBKAmzIUВ качестве независимой переменной выступает логарифм дозы носителей инфекции, в качестве зависимой переменной - вероятность заболеть.
База данных и все сопутствующие материалы есть на https://github.com/acheremuhin/Isotonic_regression
Расчеты
Data <- read_csv(".../Dataforfigure8.csv",col_names = FALSE)
nam<-t(Data[,1])
Base<-as.data.frame(t(Data[,2:24]))
colnames(Base)<-nam
ggplot(data=Base, aes(x=Base$log_dose, y=Base$Probability_of_infection_1)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования")
Если посмотреть на точечный график, то это будет что-то типа
![Очень похоже на логистическую регрессию Очень похоже на логистическую регрессию](https://habrastorage.org/r/w1560/getpro/habr/upload_files/616/733/de1/616733de1fd223e61f974479653a3fb3.png)
Очень похоже на логистическую регрессию
В пакете представлены три алгоритма регрессии - их реализуют функции cirPAVA() - это новый алгоритм, oldPAVA - старый алгоритм и iterCIR() - итеративная версия нового алгоритма. Но мы воспользуемся другой функцией для построения регрессии и доверительных интервалов
x1<-Base[,2]
names(x1)<-c()
x2<-Base[,1]
names(x2)<-c()
dat<-doseResponse(y=x1,x=x2)
quick1<-quickIsotone(dat) # Быстрая регрессия - получение доверительных интервалов для значений у
ggplot(data=quick1, aes(x=x, y=y)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования") +
geom_line(data=quick1,aes(x=x, y=lower90conf))+
geom_line(data=quick1,aes(x=x, y=upper90conf))
![Вот и доверительные интервалы Вот и доверительные интервалы](https://habrastorage.org/r/w1560/getpro/habr/upload_files/e1f/67f/6a6/e1f67f6a667f33618018e6e47441ea74.png)
Вот и доверительные интервалы
При этом расчет доверительных интервалов может осуществляться тремя способами, выбрать которые можно при использовании функции isotInterval. Все вместе будет выглядеть так:
slow1<-cirPAVA(dat,full=TRUE) # Построение регрессии по алгоритму CIR
slow1$output # Предсказанные значения
slow1$input # Исходные данные
slow1$shrinkage # Сокращенные данные для построения графика зависимости
int1_0<-isotInterval(slow1,narrower=FALSE) # Расчет доверительных интервалов по готовой модели
int1_0
ggplot(data=quick1, aes(x=x, y=y)) +
geom_point() + xlab("Логарифм дозы") + ylab("Вероятность инфицирования") +
geom_line(data=slow1$shrinkage,aes(x=x, y=y), color = "green") +
geom_line(data=int1_0,aes(x=quick1$x, y=ciLow))+
geom_line(data=int1_0,aes(x=quick1$x, y=ciHigh))
![Доверительные интервалы чуть-чуть, но другие Доверительные интервалы чуть-чуть, но другие](https://habrastorage.org/r/w1560/getpro/habr/upload_files/702/e8a/b0a/702e8ab0a6d7efeae43bfdc5f34de822.png)
Доверительные интервалы чуть-чуть, но другие
Функция quickIsotone() может также осуществлять и прогнозирование. Для этого есть параметр outx
quickIsotone(dat, outx = c(2.15,7.75)) # Предсказание с доверительными интервалами для значения
![Результат предсказания Результат предсказания](https://habrastorage.org/r/w1560/getpro/habr/upload_files/c82/a71/139/c82a71139280dfc10bb96a7ec8b8702b.png)
Результат предсказания
![habr.com](https://habrastorage.org/getpro/habr/upload_files/ca4/ad3/29a/ca4ad329ab114aa8878bd2dedad6a4aa.jpeg)
Скучно, просто и ограниченно — все это изотоническая регрессия
Вкратце о маленьком пакете cir. Минутка теории Изотоническая регрессия - это крайне специфический вид регрессии, который применяется при жестком требовании неубывания значения зависимой переменной при...
![habr.com](https://assets.habr.com/habr-web/img/favicons/favicon-16.png)