Verilerimin tahmininin 200 denek ve 1000 değişken ile çapraz doğrulanması üzerinde çalışıyorum. Değişken sayısı (kullanmak istiyorum) örnek sayısından daha büyük olduğu için ridge regresyonuyla ilgileniyorum. Bu yüzden büzülme tahmin edicileri kullanmak istiyorum. Aşağıdaki örnek veriler oluşur:
#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
Çapraz doğrulama için aşağıdakileri yapmak istiyorum -
(1) verileri iki durağa ayırın - ilk yarısını eğitim, ikinci yarısını test olarak kullanın
(2) K-kat çapraz doğrulama (benim durumum için uygun herhangi bir kat üzerinde 10 kat veya öneri diyelim)
Verileri sadece ikiye (kazanma ve test etme) örnekleyebilir ve kullanabilirim:
# 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,]
Ben kullanıyorum lm.ridge
gelen MASS
R paketinde.
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)
İki sorum var -
(1) Test setini nasıl tahmin edebilir ve doğruluğunu hesaplayabilirim (tahmin edilen ile gerçek arasındaki korelasyon olarak)?
(2) K-kat doğrulamasını nasıl yapabilirim? 10 kat mı?
rms
paketin ols
, calibrate
ve validate
kuadratik penalization (sırt regresyon) ile işlev.