我有3個站點的組合數據集,想知道普遍關係與站點特定關係的比較。該計劃是一個k-fold交叉驗證。根據這cross validated question,我需要從我的不同站點按比例抽樣,因爲它們由不同數量的觀察值組成。我已經做了K-CV倍與caret
前:不同樣本大小的k倍交叉驗證
library(dplyr)
library(caret)
dF=data_frame(y=runif(100,1,6),x1=runif(100),x2=runif(100),site=c(rep('a',20),rep('b',20),rep('c',60)) %>% group_by(site)
train_control<- trainControl(method="repeatedcv", number = 4, repeats = 3, savePredictions = TRUE)
model<- train(y~x1*x2+I(x2^2), data=dF, trControl=train_control, method='glmStepAIC',family=gaussian(link='log'))# no need to preprocess because x1 and x2 both have theoretical values (0,1].
,但現在還沒有想出一個可以如何改變分區使得具有更多的觀測站點的不公平影響模型的技能。
所以我想要的最終結果是r2的數據框,並且對於站點a,b和c以及所有數據一起的平均絕對誤差。同樣,我想知道每個模型場景中x1和x2的參數。
編輯 我插入符號文件,我認爲在發現downSample
是應該幫助的,但我不斷收到一個錯誤。任何人都知道這是爲什麼發生? OSX 10.11.1,R 3.2.2,caret_6.0-58
down_train <- downSample(x = dplyr::select(datadF,-basin), y = as.factor(datadF$basin))
Error in sample.int(length(x), size, replace, prob) :
cannot take a sample larger than the population when 'replace = FALSE'
採樣錯誤是因爲'sample(... replace = FALSE)'。 IE-你試圖畫出更多的樣本(沒有替換)比你有觀察 –
但我建議使用觀察權重給你的總體目標。 –
我對'downSample'的理解是,它只會從每個站點採樣儘可能多的obs,因爲從obs數量最少的站點可以獲得。那是不正確的?你能否詳細說明「觀察權重」? – Dominik