तो 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
फ़ंक्शन करता है। तो अपने जोखिम पर उपयोग करें और यदि किसी के पास कोई प्रतिक्रिया है, तो इसका स्वागत होगा। यह केवल एक अवरोध और मानक मुख्य प्रभाव नोटेशन के साथ रैखिक मॉडल के लिए डिज़ाइन किया गया है।
स्रोत
2013-04-16 06:16:30
ऑफ-विषय हो सकता है .. और अच्छा [पार-सत्यापित] (http://stats.stackexchange.com/)। –
क्यों? यह भाषा [आर] (http://stackoverflow.com/tags/r/info) में एक सांख्यिकीय तकनीक को कार्यान्वित करने के बारे में है, जिसमें करीब 30,000 प्रश्न हैं। यदि आप चाहें, तो मैं प्रश्न के सांख्यिकीय तत्वों को हटा सकता हूं और केवल आर कार्यान्वयन पर ध्यान केंद्रित कर सकता हूं? –
http://www.statmethods.net/stats/regression.html – NPE