如何在多年前的逻辑回归中使用R中的预测函数?

时间:2013-10-09 08:10:06

标签: r predict logistic-regression

我有一个问题,我试图解决但没有成功。两天多的搜索,我没有得到一个线索。对不起,如果答案在那里,我没有找到它。

假设你有几年前估计的旧模型的逻辑方程回归(二元模型)。因此,您知道参数βk(k = 1,2,...,p),因为它们是在过去估算的。但是,您没有用于拟合模型的数据。

我的问题是:我可以在R中引入这个旧的估计逻辑模型作为对象(对应于逻辑回归模型)吗?

我想使用“预测”功能来证明这一逻辑回归与一组新的数据(现有数据),然后检查这个旧模型的有效性经得起时间的考验。要使用此功能,您需要逻辑回归模型的对象。

非常感谢你。

2 个答案:

答案 0 :(得分:6)

根据我的评论,我认为你可以从直接从系数计算预测开始。这是一个将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更好。

答案 1 :(得分:5)

您可以创建一个仅包含从您拥有的系数创建的偏移的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')