2013-10-09 21 views
5

我有一个问题,我试图解决没有成功。两天多的搜索,我没有得到一个线索。对不起,如果答案是在那里,我没有找到它。如何在几年前拟合的逻辑回归中使用R中的预测函数?

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

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

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

非常感谢您提前。

+0

关于统计。也许它应该被迁移到[交叉验证](http://stats.stackexchange.com)。 – Thomas

+7

用户正在尝试将他所拥有的等式转换为对象。这是一个相当程序化的问题,我认为它很适合。 –

+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

+0

良好的设置 - 我会试图运行数据集的'qqplot'与此模型中的“模拟”数据。 –

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')