我需要在每個地層繪製一個分層樣本,其觀測值爲n
,但有些地層的觀測值比n
少。如果某一層的觀測結果太少(例如,觀測值爲k<n
),那麼我想要從該層中抽取所有的觀測值k
。部分地層太小時分層樣本
require(sampling)
n <- 10
geo_ID <- c(rep(1, times = 20), rep(2, times = 20), rep(c(1, 2, 3, 4), times = 5))
set.seed(42)
V1 <- rnorm(60, 0, 1)
V2 <- rnorm(60, 2, 1)
DF <- data.frame(geo_ID = geo_ID, V1 = V1, V2 = V2)
#Sort as explained in ?strata help file
DF <- DF[order(DF[, "geo_ID"]), ]
strata(DF, stratanames = "geo_ID", size = c(n, n, n, n), method = "srswor")
如果我使用不放回抽樣如上,我(可以理解)得到錯誤:
Error in strata(DF, stratanames = "geo_ID", size = c(10, 10, 10, 10), :
not enough obervations in the stratum
採樣與更換避免錯誤,method = "srswr"
,但是這不是理想的,因爲它有時會得出重複的這些地層足夠大,只能有獨特的樣品吸取。
注意:這裏有類似的問題,但它沒有真正回答。另外我認爲這個問題更一般。 (Stratified sampling - not enough observations)對於相關問題的答案通常並不實用,因爲它們要求:(i)與分層大小成比例的樣本大小(而我需要一個固定數量)或(ii)手動編程分層分層隨着地層數量的增加,這是不可行的。
謝謝!一個問題,在我的真實數據中,我有多個地理標識字段,一些數字和一些字符。上面的函數適用於數字(城鎮ID),但是當我在字符字段(城鎮名稱)上運行它時,我得到以下響應:'if(length(x)== 1L && is.numeric(x )&& x> = 1){:缺少TRUE/FALSE所需的值。雖然不知道沒有數據可能是不可能的,但是自從您編寫函數後,您可能會有線索。 –
@DTRM,對不起。我已經離開了幾天。我會試着看看我是否可以重新創建你的錯誤。否則,如果您有一些重新創建錯誤的示例數據,請更新您的問題並在此處留言。 – A5C1D2H2I1M1N2O1R2T1
@AHandcartAndMohair Gist鏈接目前被破壞:https://gist.github.com/mrdwab/6424112 – coip