Saya sedang mengerjakan validasi silang dari prediksi data saya dengan 200 subjek dan 1000 variabel. Saya tertarik regresi ridge karena jumlah variabel (saya ingin menggunakan) lebih besar dari jumlah sampel. Jadi saya ingin menggunakan estimator penyusutan. Berikut ini adalah contoh data:
#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
Saya ingin melakukan yang berikut untuk validasi silang -
(1) membagi data menjadi dua penghentian - gunakan babak pertama sebagai latihan dan babak kedua sebagai tes
(2) validasi silang K-fold (katakanlah 10 kali lipat atau saran pada lipatan lain yang sesuai untuk kasus saya dipersilakan)
Saya hanya bisa sampel data menjadi dua (memperoleh dan menguji) dan menggunakannya:
# 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,]
Saya menggunakan lm.ridge
dari MASS
paket 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)
Saya punya dua pertanyaan -
(1) Bagaimana saya bisa memprediksi set tes dan menghitung akurasi (sebagai korelasi prediksi vs aktual)?
(2) Bagaimana saya bisa melakukan validasi K-fold? katakan 10 kali lipat?
rms
paket ols
, calibrate
dan validate
fungsi dengan hukuman kuadrat (ridge regression).