2013-10-09 20 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')