2016-02-22 119 views
0

我有一個簡單的數據集,其中一個Y和10個預測變量(X1-X10)爲100個觀測值編碼爲0,1或2。邏輯迴歸中的重採樣

n <- 100 
Y <- c(1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0) 
X1 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.1,0.4,0.5)) 
X2 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.5,0.25,0.25)) 
X3 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.3,0.4,0.4)) 
X4 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.35,0.35,0.3)) 
X5 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.1,0.2,0.7)) 
X6 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.8,0.1,0.1)) 
X7 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.1,0.1,0.8)) 
X8 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.35,0.35,0.3)) 
X9 <- sample(x=c(0,1,2), size=n, replace=TRUE, prob=c(0.35,0.35,0.3)) 
X10 <- c(0,2,2,2,2,2,2,2,0,2,0,2,2,0,0,0,0,0,2,0,0,2,2,0,0,2,2,2,0,2,0,2,0,2,1,2,1,1,1,1,1,1,1,1,1,1,1,0,1,2,2,2,2,2,2,2,2,2,2,2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,1,0,0,0,0) 

datasim <- data.frame(Y,X1,X2,X3,X4,X5,X6,X7,X8,X9,X10) 

我試圖做bootstrap重採樣如下,它工作在一個變量生產100個不同的樣本集。

B <- 100 
n <- length(datasim$X1) 
boot.samples <- matrix(sample(datasim$X1, size=B*n, replace=TRUE),B,n) 

現在,我試圖將一個函數中使用GLM來計算偏離度的差異。我的願望是爲每個bootstrap樣本生成dDeviance(100個值)。我嘗試了以下功能,但它只給了我100個類似的dDeviance值。

xfunction <- function(x){ 
glmfit <- glm(Y~X1, family="binomial", data=datasim) 
dDeviance <- glmfit$null.deviance-glmfit$deviance 
return(dDeviance) 
} 

boot.statistics <- apply(boot.samples,1,xfunction) 
+0

沒有datasim提供了其很難知道,但你的函數有一個參數,x,它犯規出現在函數中使用,而不是你使用的是同樣的數據集,「datasim」,每次被調用時。 – user5219763

+1

在你的模型語句中,你需要定義data = x而不是datasim。 –

+0

謝謝你倆指出了。我只包括datasim也許你想運行它。我收到了應用函數的錯誤消息。 eval(predvars,data,env)中的錯誤:numeric'envir'arg長度不一。 – Shima

回答

0

xfunction當在像這樣應用的參數是矩陣中的一行。在您的原始代碼中,該行沒有被使用,並且您每次都運行相同數據的函數。解決這種問題的一種方法是將glm中的數據參數更改爲每次按照建議的數據類型(glmfit <- glm(Y~X1, family="binomial", data=x)),但是這裏假定x將是一個數據框,其中列名爲Y和X1,而您實際上有x是X1的值的向量。最簡單的解決方案是在每個配合中更改X1。

xfunction <- function(x){ 
    glmfit <- glm(Y~x, family="binomial") 
    dDeviance <- glmfit$null.deviance-glmfit$deviance 
    return(dDeviance) 
} 

boot.statistics <- apply(boot.samples,1,xfunction) 
0

正如Jeffrey所述,數據應該= x。

xfunction <- function(x){ 
    glmfit <- glm(Y~X1, family="binomial", data=x) 
    dDeviance <- glmfit$null.deviance-glmfit$deviance 
    return(dDeviance) 
} 

boot.statistics <- apply(boot.samples,1,xfunction)