Estoy trabajando en la validación cruzada de la predicción de mis datos con 200 sujetos y 1000 variables. Estoy interesado en la regresión de crestas ya que el número de variables (que quiero usar) es mayor que el número de muestra. Entonces quiero usar estimadores de contracción. Los siguientes son datos de ejemplo:
#random population of 200 subjects with 1000 variables
M <- matrix(rep(0,200*100),200,1000)
for (i in 1:200) {
set.seed(i)
M[i,] <- ifelse(runif(1000)<0.5,-1,1)
}
rownames(M) <- 1:200
#random yvars
set.seed(1234)
u <- rnorm(1000)
g <- as.vector(crossprod(t(M),u))
h2 <- 0.5
set.seed(234)
y <- g + rnorm(200,mean=0,sd=sqrt((1-h2)/h2*var(g)))
myd <- data.frame(y=y, M)
myd[1:10,1:10]
y X1 X2 X3 X4 X5 X6 X7 X8 X9
1 -7.443403 -1 -1 1 1 -1 1 1 1 1
2 -63.731438 -1 1 1 -1 1 1 -1 1 -1
3 -48.705165 -1 1 -1 -1 1 1 -1 -1 1
4 15.883502 1 -1 -1 -1 1 -1 1 1 1
5 19.087484 -1 1 1 -1 -1 1 1 1 1
6 44.066119 1 1 -1 -1 1 1 1 1 1
7 -26.871182 1 -1 -1 -1 -1 1 -1 1 -1
8 -63.120595 -1 -1 1 1 -1 1 -1 1 1
9 48.330940 -1 -1 -1 -1 -1 -1 -1 -1 1
10 -18.433047 1 -1 -1 1 -1 -1 -1 -1 1
Me gustaría hacer lo siguiente para la validación cruzada:
(1) divida los datos en dos paradas: use la primera mitad como entrenamiento y la segunda mitad como prueba
(2) Validación cruzada K-fold (digamos 10 veces o sugerencia en cualquier otro pliegue apropiado para mi caso son bienvenidos)
Simplemente puedo muestrear los datos en dos (ganancia y prueba) y usarlos:
# using holdout (50% of the data) cross validation
training.id <- sample(1:nrow(myd), round(nrow(myd)/2,0), replace = FALSE)
test.id <- setdiff(1:nrow(myd), training.id)
myd_train <- myd[training.id,]
myd_test <- myd[test.id,]
Estoy usando lm.ridge
del MASS
paquete R.
library(MASS)
out.ridge=lm.ridge(y~., data=myd_train, lambda=seq(0, 100,0.001))
plot(out.ridge)
select(out.ridge)
lam=0.001
abline(v=lam)
out.ridge1 =lm.ridge(y~., data=myd_train, lambda=lam)
hist(out.ridge1$coef)
out.ridge1$ym
hist(out.ridge1$xm)
Tengo dos preguntas -
(1) ¿Cómo puedo predecir el conjunto de prueba y calcular la precisión (como correlación de lo predicho frente a lo real)?
(2) ¿Cómo puedo realizar la validación de K-fold? decir 10 veces?
rms
paquete ols
, calibrate
y validate
la función de penalización cuadrática (cresta de regresión).