R语言笔记-sample()函数
在醫學統計學或者流行病學里的現場調查、樣本選擇經常會提到一個詞:隨機抽樣。隨機抽樣是為了保證各比較組之間均衡性的一個很重要的方法。那么今天介紹的第一個函數就是用于抽樣的函數sample:
> x=1:10 > sample(x=x)[1] 3 5 9 6 10 7 2 1 8 4第一行代碼表示給x向量賦值1~10,第二行代碼表示對x向量進行隨機抽樣。結果輸出為每次抽樣抽得的結果,可以看出該抽樣為無放回抽樣——最多抽n次,n為x向量中元素的個數。?
如果想指定在該向量中抽取元素的個數,需要加一個參數size:
這是在1~1000的正整數中抽樣,其中size指定抽樣的次數,抽了20次,結果如上所示。
這些都是無放回抽樣。所謂無放回抽樣,也就是說某個元素一旦被選擇,該總體中就不會再有該元素。如果是有放回抽樣,則需添加一個參數repalce=T:
> x=1:10 > sample(x=x,size=5,replace=T)[1] 4 7 2 4 8“replace”就是重復的意思。即可以重復對元素進行抽樣,也就是所謂的有放回抽樣。我們看上面的結果,元素4在5次隨機抽樣的過程中被抽取了兩次。
R語言代碼有一個特性就是“對位性”,也許我的詞不專業,但是它的意思就是:如果我們輸入代碼的位置與某個函數中參數的位置一一對應的話,我們可以不寫該函數的參數,如:
在上述代碼中我們省略了參數x,size和repalce,但是仍然可以運算并且表示對x向量有放回隨機抽取20次。我們之所以盡量在每次編寫代碼時帶上參數是因為我覺得這個習慣比較好,而且看起來清楚明白。另外,省略參數的前提是你非常熟悉某個函數參數的位置,否則一旦沒有“對位”,那么結果肯定是錯誤的。而且很多函數有較多的參數,想記住它們的位置是困難的。而如果帶上參數,那么即使位置不對應,也一樣可以運算:
> x=1:10 > sample(size=20,replace=T,x=x)[1] 4 9 2 6 4 5 4 7 10 5 2 2 3 4 2 4 6 8 7 8這種優點顯而易見,不僅清楚,而且無需對應。另外我們也可以看出,有放回抽樣的話size可以無窮大,而無放回抽樣size的大小就取決于總體的容量了。?
對于擲骰子,投硬幣(這可能是介紹抽樣必介紹的內容),都屬于有放回抽樣。
這里要說明,對于sample函數,參數x可以是數值,也可以是字符,實際上參數x代表任意一個向量:
> a=c("A","B") > sample(x=a,size=10,replace=T)[1] "B" "A" "A" "A" "B" "A" "A" "B" "A" "A"上述代碼可以理解為擲硬幣,拋了10次,其中正面(A)與反面(B)出現的次數。
上述抽樣過程,每一個元素被抽取的概率相等,稱為隨機抽樣。
有時候我們的抽取元素的概率未必相等(如常見的二項分布概率問題),此時我們需要添加一個參數prob,也就是“probability”(概率)的縮寫。假設一名醫生給患者做某手術成功的概率是80%,那么現在他給20例病人做手術,可能有哪幾次是成功的呢?代碼如下:
> x=c("S","F") > sample(x,size=20,replace=T,prob=c(0.8,0.2))[1] "F" "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "S" "F" "S" "S" "F" "S" "S" [19] "F" "S"其中“S”代表成功,“F”代表失敗。
> x=c(1,3,5,7) > sample(x,size=20,replace=T,prob=c(0.1,0.2,0.3,0.9))[1] 3 5 7 3 7 3 7 5 3 7 7 7 1 5 7 5 7 7 3 7這些代碼告訴我們,對每一個元素都可以給定一個概率,且每個概率是獨立的,即在參數prob中,不一定所有元素的概率加起來等于1,它只代表某元素被抽取的概率而已。
對于sample函數,其參數x可以是R中任意一個對象(如上述對字符的抽樣)。其中還有一個功能相同的函數sample.int,“int”即“intger”的縮寫,也就是“整數”。它的參數n必須是正整數:
第一行代碼生成了-10.5到7.5的等差數列,結果輸出的第一行是sample的結果;第二行是sample.int的結果,提示錯誤:“第一個自變量無效”,因為它不是正整數。其余的用法與sample是一樣的。
總結
以上是生活随笔為你收集整理的R语言笔记-sample()函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 特征工程(2):特征构建
- 下一篇: 模型参数优化(一):遗传算法