【发布时间】:2016-10-02 19:26:45
【问题描述】:
我有一个包含 96 个观察值(患者)和 1098 个变量(基因)的数据框。响应是二进制的(Y 和 N),预测变量是数字的。我正在尝试执行留一法交叉验证,但我的兴趣不是标准误差,而是从 LOOCV 创建的 95 个逻辑回归模型中每个变量的 p 值。这些是我迄今为止的尝试:
#Data frame 96 observations 1098 variables
DF2
fit <- list()
for (i in 1:96){
df <- DF2[-i,]
fit[[i]] <- glm (response ~., data= df, family= "binomial")
}
model_pvalues <- data.frame(model = character(), p_value = numeric())
这个输出适合一个包含 16 个元素和 30 个元素的列表:$coefficients、$residuals、$fitted.values....
尝试 1:
for (i in length(fit)){
model_pvalues <- rbind(model_pvalues, coef(summary(fit[[i]])))
}
此输出为“model_pvalues”95 个观察值(截距和 94 个变量)和 4 个变量:Estimate、Std。误差,z 值,Pr(>|z|)。然而,我真正想要得到的是所有 1097 个变量的 p 值,对于通过留一交叉验证构建的 95 个模型。
尝试 2:
for (i in length(fit)){
model_pvalues <- rbind(model_pvalues, coef(summary(fit[[i]]))[4])
}
当我运行这个时,我得到一个变量的一个数字(不确定从哪里,假设是 beta)。
尝试 3:
for (i in 1:96){
df <- DF2[-i,]
fit[[i]] <- glm (response ~., data= df, family= "binomial")
model_pvalues <- rbind(model_pvalues, coef(summary(fit[[i]])))
}
当我运行这个时,我得到了一个包含 4 个变量的 1520 个观察值的数据框:估计值、标准值。误差,z 值,Pr(>|z|)。观察以 (Intercept) 开头,后跟 82 个变量。之后,它使用 (Intercept1) 和相同的 82 个变量重复此模式,直到 (Intercept15)。
所以我的最终目标是通过 LOOCV 创建 95 个模型,并获取所有模型中使用的所有 1097 个变量的 p 值。任何帮助将不胜感激!
编辑:示例数据(1098 个变量的真实 DF 96 观察值)
Response X1 X2 X3 X4 X5 X6 X7 X8 X9 X10
P1 N 1 1 1 0 1 0 1 0 2 2
P2 N 2 1 1 0 2 2 1 2 2 2
P3 N 2 1 2 1 1 0 1 1 0 1
P4 Y 1 1 2 0 1 0 0 1 1 1
P5 N 2 2 1 1 1 0 0 0 1 1
P6 N 2 1 2 1 1 0 0 0 2 1
P7 Y 2 1 1 0 2 0 0 0 2 0
P8 Y 2 1 1 0 2 0 0 1 0 2
P9 N 1 1 1 0 2 0 0 0 1 0
P10 N 2 1 2 1 1 0 1 0 0 2
【问题讨论】:
标签: r bioinformatics cross-validation