따라서 다음은 약간의 변형 인 the example that @NPR linked to from statsmethods입니다. 본질적으로 필자는이 예제를 함수로 만들었다.
library(bootstrap)
k_fold_rsq <- function(lmfit, ngroup=10) {
# assumes library(bootstrap)
# adapted from http://www.statmethods.net/stats/regression.html
mydata <- lmfit$model
outcome <- names(lmfit$model)[1]
predictors <- names(lmfit$model)[-1]
theta.fit <- function(x,y){lsfit(x,y)}
theta.predict <- function(fit,x){cbind(1,x)%*%fit$coef}
X <- as.matrix(mydata[predictors])
y <- as.matrix(mydata[outcome])
results <- crossval(X,y,theta.fit,theta.predict,ngroup=ngroup)
raw_rsq <- cor(y, lmfit$fitted.values)**2 # raw R2
cv_rsq <- cor(y,results$cv.fit)**2 # cross-validated R2
c(raw_rsq=raw_rsq, cv_rsq=cv_rsq)
}
# sample data
set.seed(1234)
x <- rnorm(100)
z <- rnorm(100)
y <- rnorm(100, x+z)
mydata <- data.frame(x,y,z)
우리는 선형 모형을 적합하고 전화를 교차 검증 기능을하기 전에 지금의 데이터를 사용하여 :
# fit and call function
lmfit <- lm(y ~ x + z, mydata)
k_fold_rsq(lmfit, ngroup=30)
을 그리고 그 결과 원료 및 교차 검증 연구를 얻을 수 정사각형 :
raw_rsq cv_rsq
0.7237907 0.7050297
경고 :raw_rsq
은 분명히 정확하고 cv_rsq
은 내가 알고있는 볼 파크에 있지만 아직 정확히 crosval
기능이 수행하는 것을 조사하지 않았습니다. 자신의 위험을 감수하고 아무나 의견이 있으면 가장 환영받을 것입니다. 또한 인터셉트 및 표준 주 효과 표기법이있는 선형 모델 용으로 만 설계되었습니다.
좋은 주제가 될 수 있습니다. [cross-validated] (http://stats.stackexchange.com/). –
왜? 약 30,000 개의 질문이있는 언어 [r] (http://stackoverflow.com/tags/r/info)에서 통계 기법을 구현하는 방법에 관한 것입니다. 원하는 경우 질문의 통계 요소를 제거하고 R 구현에만 초점을 맞출 수 있습니까? –
http://www.statmethods.net/stats/regression.html을보십시오 – NPE