如何操作GLM對象以繞過此錯誤?我想對於預測治療看不見的水平基礎的情況下如何操作R中的GLM係數?
> master <- data.frame(x = factor(floor(runif(100,0,3)), labels=c("A","B","C")), y = rnorm(100))
> part.1 <- master[master$x == 'C',]
> part.2 <- master[master$x == 'A' | master$x == 'B',]
> model.2 <- glm(y ~ x, data=part.2)
> predict.1 <- predict(model.2, part.1)
Error in model.frame.default(Terms, newdata, na.action = na.action, xlev = object$xlevels) : factor 'x' has new level(s) C
我試着這樣做(即,給他們的係數爲零。):
> model.2$xlevels$x <- c(model.2$xlevels, "C")
> predict.1 <- predict(model.2, part.1)
但它不進球模型正確:
> predict.1[1:5]
2 3 6 8 10
0.03701494 0.03701494 0.03701494 0.03701494 0.03701494
> summary(model.2)
Call:
glm(formula = y ~ x, data = part.2)
<snip>
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.12743 0.18021 0.707 0.482
xB -0.09042 0.23149 -0.391 0.697
predict.1應該只有0.12743。
這顯然只是一個修剪版本 - 我的真實模型中有25個左右的變量,所以predict.1 <- rep(length(part.1), 0.12743)
的答案對我沒有用處。
感謝您的幫助!
嗯。這可以通過黑客來實現,但相當棘手。你能給出更多的上下文嗎? –
本質上,我正在根據協變量建立兩個單獨的預測模型。如果我可以對整個數據集進行模型預測,而不僅僅是他們所模擬的一半,那麼這將大大簡化我的評分和評估代碼。 – notrick
你在做什麼沒有意義。你用來預測的數據不包含'x = C'。所以當'x = C'時,你無法用它來預測'y'。這就像建立一個平日的銷售模式,並要求它預測週末的銷售情況。如果您希望將數據集分解爲校準樣本和驗證樣本,則需要這樣做,使得兩個樣本都包含相似的協變量分佈。 – Ramnath