NB係數和P值的對象。
所以有幾件事情在這裏。
- 我假定您提供的數據集
training
應該與您的代碼中的training2
相同。這個數據集中的第一列是一個id,你的代碼將把它作爲fit中的一個參數。那是你想要的?
- 用於提取行樣本的代碼不必要的複雜。您生成一個介於1和
nrow(training2)
之間的整數樣本,並從中生成一個邏輯向量length=nrow(training2)
。你不需要這樣做:只需使用整數向量來指示訓練2。這是很多更快,尤其是對於如此大的數據集。
- 當嘗試使用如此大量的參數(> 1400)擬合時,
glm(...)
似乎想要初始估算平均值。我沒有花費時間,只是將模型限制在前9個參數(列2:10)。
- 在調用
glm(..)
時使用type=predict
影響如何使用權重。你沒有使用權重,所以這個參數什麼都不做。
- 但是,在致
predict(...)
您做需要指定type="predict"
。
- 使用
maxit = 25
通常意味着擬合沒有收斂,所以你需要嘗試一下。
- 在我嘗試過的一小組迭代中,沒有一個係數具有
p<0.0001
,所以爲了示例的緣故,我將截斷值更改爲0.1。
- 最後,使用
return(list(...))
如在下面的代碼,以及改變.combine=cbind
到.combine=rbind
返回列表對象的數組,其中每個行對應於迭代,且將列1具有預測對於該次迭代,第2列的矢量具有該迭代的p值向量,並且第3列具有該迭代的係數向量。
下面的代碼:
library(foreach)
set.seed(1)
training2 <- training
length_divisor <- 1000
iterations <- 5
predictions <- foreach(m=1:iterations,.combine=rbind) %do% {
training_positions <- sample(nrow(training2),
size=floor((nrow(training2)/length_divisor)))
# train_pos<-1:nrow(training2) %in% training_positions
glm_fit <- glm(default~ . ,
data=training2[training_positions,c(2:10,ncol(training2))],
family=binomial(logit),
control = list(maxit = 25))
pr <- predict(glm_fit,
newdata=training2[sample(1:nrow(training2),10),],
type="response")
s <- summary(glm_fit)
p <- s$coeff[,4]
c <- s$coeff[,1]
pvalues <- p[p<0.1]
coeffs <- c[p<0.1]
return(list(pr,pvalues,coeffs))
}
predictions
# [,1] [,2] [,3]
# result.1 Numeric,10 Numeric,0 Numeric,0
# result.2 Numeric,10 Numeric,0 Numeric,0
# result.3 Numeric,10 Numeric,2 Numeric,2
# result.4 Numeric,10 Numeric,0 Numeric,0
# result.5 Numeric,10 Numeric,0 Numeric,0
在該佈置
所以,predictions[,1]
是所有的預測向量的列表,prediction[,2]
是所有p值< 0.1對於每次迭代的列表,和prediction[,3]
是每個迭代的p值爲< 0.1的所有係數的列表。
將您感興趣的所有內容返回到'list'並更改'.combine'參數。 – Roland
爲什麼你想要p值?通常,我們通過查看可變重要性統計數據來確定哪些變量在預測響應方面看起來最重要。在** caret包中已經有了這個罐頭函數,我建議你看一看;它可以與袋裝模型一起使用,如: –
@Roland如何更改組合參數? Doc的文件很粗略。 Thx – Elliott