Р: Как определить интервалы прогнозирования для обратного предсказания (x от y) в кусочно-линейной регрессии (сегментировано)? - PullRequest
0 голосов
/ 06 февраля 2020

`

Я построил кусочно-линейную регрессионную линейную модель , чтобы представить рост бактерий как функцию рН культуральной среды. Это было сделано с помощью функции segmented () пакета «segmented». Допущения выполнены, и R-квадрат силен. Это позволяет мне определить ниже переломный момент, на рост которого негативно влияет pH.

Во-вторых, я хочу сделать обратный прогноз (x от y), чтобы определить значение x (pH ) для которого значение y (рост) равно 0. Эта критическая точка (CP) имеет большое биологическое значение.

Прогноз значения x для y = 0 равен легко определить с помощью алгебры:

x = yb / a = -b / a

где y = 0, a - наклон левой части кусочной регрессии, b является пересечением левой части кусочной регрессии

Задача состоит в том, чтобы определить интервал прогнозирования значения x

Поскольку я работаю с кусочно-линейной регрессией, Функции inverse.predict () и investr () бесполезны. Другое решение может заключаться в обращении модели (x = ay + b вместо y = ax + b, другими словами: pH = рост + b вместо роста = pH + b), а затем использовать функцию предиката.segmented () в порядок определения критической точки и интервал ее прогнозирования. Следовательно, этот метод не работает в моем случае, так как результат функции отличается от результата с алгеброй.

Есть ли у вас какие-либо другие решения?

Я хотел бы извлечь модель левой линейной регрессии кусочной регрессии, чтобы использовать функцию inverse.predict () на этом, но я не знаю, как это сделать. Есть ли у вас какие-либо формулы для ручного расчета интервала прогнозирования обратного прогнозирования? Я не нашел никакой информации о inte rnet ...

В приложении, пожалуйста, нашел данные и код.

Большое спасибо за помощь!

#pH 
     x<-c(7.3,7.8,7.1,7.7,7.2,6.7,7.6,6.5,6.9,7.0,7.4,6.8,6.5,6.6,7.5)
#Growth Rate
     y<-c(86.52,115.43,103.99,96.13,85.56,40.43,82.31,38.88,
     76.44,60.55,70.76,41.95,-2.14,17.11,79.29)
#Data
   data<-data.frame(x,y)
#Linear model
    lm <- lm(y~x,data=data)
#Piecewise linear regression model
    sm <- segmented(lm, seg.Z = ~x,psi=mean(data$x))

МЕТОД 1: определить критическую точку (x для y = 0) с помощью алгебры

#intercept of the left linear regression 
    intercept1<-intercept(sm)$x[1,1]
#slope of the left linear regression
    slope1<-slope(sm)$x[1,1]
#Predict Critical-Point (x = -b/a)
    CP1<-(-intercept1)/slope1

МЕТОД 2: определить критическую точку (x для y = 0) с обратной моделью

#y value for prediction
    predict<-data.frame(y=as.numeric(0.0))
#reversed model
    invlm <- lm(x~y,data=data)
    invsm <- segmented(invlm, seg.Z = ~y,psi=mean(data$y))
#prediction 
    CP2<-predict.segmented(invsm,predict,interval="prediction")
    #return the x predicted value for y = 0 and its prediction interval

CP1 рассчитано с алгебраическим методом отличается от CP2, рассчитанного с помощью обратного метода

Метод обратного метода не подходит

Как рассчитать интервал прогнозирования с помощью метода алгебры для кусочно-линейной регрессии? ** Есть ли другой способ?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...