Как я могу использовать функцию прогнозирования в R в логистической регрессии, установленной несколько лет назад?

У меня есть проблема, которую я пытаюсь решить безуспешно. Более двух дней поиска, и я не получил ни единой подсказки. Извините, если ответ там, и я не нашел его.

Предположим, что у вас есть регрессия логистических уравнений (бинарная модель) из старой модели, которую вы оценили несколько лет назад. Поэтому вы знаете параметры βk (k = 1, 2, ..., p), потому что они были оценены в прошлом. Но у вас нет данных, которые были использованы для соответствия модели.

Мой вопрос: могу ли я представить эту старую оценочную логистическую модель в R как объект (соответствующий модели логистической регрессии)?

Я хотел бы использовать функцию "предсказать", чтобы доказать эту логистическую регрессию с новым набором данных (настоящие данные), а затем проверить достоверность этой старой модели, выдержав испытание временем. И чтобы использовать эту функцию вам нужен объект модели логистической регрессии.

Заранее большое спасибо.

2 ответа

Согласно моему комментарию, я думаю, вы могли бы начать с простого вычисления прогнозов непосредственно из коэффициентов. Вот пример, который сравнивает вывод из predict.glm к прогнозируемым вероятностям, рассчитанным непосредственно по данным:

# construct some data and model it
# y ~ x1 + x2
set.seed(1)
x1 <- runif(100)
x2 <- runif(100)
y <- rbinom(100,1,(x1+x2)/2)
data1 <- data.frame(x1=x1,x2=x2,y=y)
x3 <- runif(100)
x4 <- runif(100)
y2 <- rbinom(100,1,(x3+x4)/2)
data2 <- data.frame(x1=x3,x2=x4,y=y2)
glm1 <- glm(y~x1+x2,data=data1,family=binomial)

# extract coefs
#summary(glm1)
coef1 <- coef(glm1)

# calculate predicted probabilities for current data
tmp1 <- coef1[1] + (data1$x1*coef1[2]) + (data1$x2*coef1[3])
pr1 <- 1/(1+(1/exp(tmp1)))
# these match those from `predict`:
all.equal(pr1,predict(glm1,data1,type='response'))

# now apply to new data:
tmp2 <- coef1[1] + (data2$x1*coef1[2]) + (data2$x2*coef1[3])
pr2 <- 1/(1+(1/exp(tmp2)))
pr2

Это, очевидно, не общее решение, и при этом оно должным образом не справляется с неопределенностью, но я думаю, что это лучший подход, чем взлом predict,

Вы можете создать GLM-подборку только с смещением, созданным из имеющихся у вас коэффициентов, а затем использовать обычную функцию прогнозирования с этим. Например, используя данные радужной оболочки (сначала подгонка модели к реальным данным, затем подгонка новой модели с использованием фиктивных данных и коэффициентов из первой подгонки):

fit1 <- glm( I(Species=='versicolor') ~ Petal.Length + Petal.Width, 
   data=iris, family=binomial )
coef(fit1)

dummydata <- data.frame( Petal.Length = rnorm(10), Petal.Width=rnorm(10),
    Species = rep(c('versicolor','other'), each=5) )

fit2 <- glm( I(Species=='versicolor') ~ 0 + 
  offset(-2.863708 + 1.563076*Petal.Length - 3.153165*Petal.Width),
    data=dummydata, family=binomial )

pred1 <- predict(fit1, newdata=iris)
pred2 <- predict(fit2, newdata=iris)
plot(pred1,pred2)
abline(0,1, col='green')
Другие вопросы по тегам