2013-06-05 99 views
0

我有一個基於數據A的glm,我想對數據B進行評分,但B中的某些記錄缺少數據。r根據僅部分記錄預測glm分數

代替這些不具有得分(na.omit)結束了或移除(na.exclude)我希望他們與使用模型來確定僅在基於數據的值的輸出的預測來結束與價值。

重複的例子...

data(mtcars) 
model<-glm(mpg~.,data=mtcars) 
mtcarsNA<-mtcars 
NAins <- NAinsert <- function(df, prop = .1){ 
    n <- nrow(df) 
    m <- ncol(df) 
    num.to.na <- ceiling(prop*n*m) 
    id <- sample(0:(m*n-1), num.to.na, replace = FALSE) 
    rows <- id %/% m + 1 
    cols <- id %% m + 1 
    sapply(seq(num.to.na), function(x){ 
    df[rows[x], cols[x]] <<- NA 
    } 
) 
    return(df) 
} 
mtcarsNA<-NAins(mtcarsNA,.4) 
mtcarsNA$mpg<-mtcars$mpg 
predict(model,newdata=mtcarsNA,type="response") 

,我需要的最後一行的所有記錄返回結果(非NA)。你能指出我需要的代碼的方向嗎?

+0

聽起來像是你需要做的歸集。我想可能會有一些叫做(??)'mi' /'mice'的包,或者嘗試'library(「sos」); findFn(「插補」)' –

+0

現在我們來看看,但要清楚我不想在預測變量中計算缺失的值,然後得到分數 - 我只使用可用的數據並僅使用相關係數,這可能會導致較低的分數,但符合我給出的要求 –

+0

那麼,你想填補缺失的數據零?如果'y = a + b * x1 + c * x2'和'x2'缺失,你想要'y-hat'是什麼? 'a + b * x1'還是別的什麼?我通常會建議'y = a + b * x1 + c * x2bar',其中'x2bar'是非缺失情況下'x2'的平均值,這是一種(** VERY **)簡化形式。 –

回答

2

根據評論中的對話,您想要在預測之前將零值替換爲NA。這對我來說似乎是危險的/可疑的 - 使用需要您自擔風險。

naZero <- function(x) { x[is.na(x)] <- 0; x } 
mtcarszero <- lapply(mtcarsNA,naZero) 
predict(model,newdata=mtcarszero,type="response") 

應該是你想要的。

對於分類變量,如果您使用的缺省處理的對比,那麼我認爲是一致的事情是這樣的:

naZero <- function(x) { if (is.numeric(x)) { 
          repVal <- 0 
         } else { 
          if (is.factor(x)) { 
           repVal <- levels(x)[1] 
          } else stop("uh-oh") 
         } 
         x[is.na(x)] <- repVal 
         x } 
+1

我可能會說我的類似擔憂,說這絕不「忽略」或「不使用」缺失的值。你包括它們,但假設它們都是0.假設所有缺少的值都具有pi值,也不會忽略它們。 – joran

+0

好主意 - 優雅簡單。我必須爲分類變量做一點工作,但這個概念是合理的 - 非常感謝。 –