第五單元:機率概論with R

文章推薦指數: 80 %
投票人數:10人

學習重點:使用R複習並練習操作「機率」的基本觀念 ... 所以我們需要指定數值區間,才能夠計算出現次數 □ 該數值區間就是直方圖的「欄寬(binwidth)」 ... 第五單元:機率概論withR 中山大學管理學院卓雍然 2019-03-2015:08:26 學習重點:使用R複習並練習操作「機率」的基本觀念 目標族群:TargetPopulation 目標變數:TargetVariable 樣本vs. 樣本點Samplevs. Point 隨機抽樣:sample() 重複實驗:replicate() 隨機變數:RandomVariable 分布Distribution 類別vs. 數值樣本(向量) 類別值vs. 連續值分布Discretevs. Continuous 數量分布vs. 機率分布Frequencyvs. Density 實證分布vs. 理論分布Empiricalvs. Theoretical 抽樣分布:SamplingDistribution pacman::p_load(dplyr) 【A】使用「向量物件」代表「族群」 為了方便討論,通常我們用一個類別或數量向量(factorornumericvector)來代表某一個族群,向量之中的每一個值,代表族群之中的某一個研究對象。

A1.Skin:用類別向量代表族群之中的類別變數 產生一個長度為10的類別向量:Skin,用它來代表某一個10個人的族群當中每一個人的膚色 Skin=rep(c("White","Yellow","Black","Others"),1:4)%>%factor Skin [1]WhiteYellowYellowBlackBlackBlackOthersOthersOthersOthers Levels:BlackOthersWhiteYellow 用table()計算各分類(level)的數量 table(Skin) Skin BlackOthersWhiteYellow 3412 用直條圖觀察各分類的數量 table(Skin)%>% barplot(main="Dist.ofSkinColor",xlab="SkinColor",ylab="Count") A2.Weight:用數值向量代表族群之中的數值變數 產生一個長度為100的數值向量:Weight,,用它來代表某一個10個人的族群當中每一個人的膚色 set.seed(2)#set.seedforrandomization Weight=rnorm(100,mean=60,sd=5)#100randomsamples 用直方圖觀察它的數值分布,比較一下直條圖和直方圖有什麼異同 par(mfrow=c(1,2),cex=0.8) hist(Weight,main="體重的分布") barplot(table(Skin),main="膚色的分布",xlab="",las=2) 🗿問題討論: ■ 直條圖和直方圖有什麼異同? ■ 「分布」是什麼? ■ 類別變數和數值變數的分布有什麼異同? 💡學習重點: ■ 分佈一般是指變數可能出現的值所出現的次數 ■ 類別變數可能出現的值是有限的,所以各分類出現的次數可以清楚的被計算出來 ■ 連續變數可能出現的值是無限的,所以我們需要指定數值區間,才能夠計算出現次數 ■ 該數值區間就是直方圖的「欄寬(binwidth)」 【B】數量分布和機率密度函數 如果我們改變直方圖的binwdith par(mfrow=c(2,3),cex=0.75,mar=c(2,4,3,2)) for(bwin1:6) hist(Weight,seq(45,75,bw),main=paste("bw=",bw),xlab="") 🗿:binwidth代表什麼?它會如何改變直方圖的形狀?為甚麼? 如果我們將族群增大為10,000人 set.seed(4);W10K=rnorm(10000,60,5) for(bwin1:6){ hist(W10K,breaks=seq(40,85,bw),main=paste("bw=",bw),xlab="") } 將Y軸從「次數(Frequency)」改為「密度(Density)」,並且標上我們原先用來產生族群向量的「機率密度函數」 for(bwin1:6){ hist(W10K,breaks=seq(40,85,bw),freq=F,ylim=c(0,0.08),main=paste("bw=",bw),ylab="density") curve(dnorm(x,60,5),40,85,col='red',add=T) } 💡學習重點: ■ 族群太小時,太窄或太寬的binwidth都很容易扭曲數值分佈的形狀 ■ 族群夠大時,我們就可以用較窄的binwidth,讓直方圖逼近真實的數值分布 ■ binwidth趨近於零時,不連續的「直方圖」就會逼近連續的「數值分布函數」 ■ 等比例改變分布函數的高度,讓它下方的面積等於1,它就會變成「機率密度函數」 ■ 數值分布函數下方的面積代表族群中的數值落在某一區間的次數 ■ 機率密度函數下方的面積代表族群中的數值會落在某一區間的機率 🗿問題討論: ■ 直方圖和數量分布之間有什麼關係? ■ 數量分布和機率函數之間有何異同? ■ 機率函數下方的總面積是多大呢? W=100 par(mfrow=c(1,1),cex=0.7) curve(dbeta(x/W,2,2)/W,0,W,col='seagreen',lwd=3,main="Beta(2,2)",xlab="",y="Density") abline(v=seq(0,W,W/10),h=seq(0,1.5,0.1)/W,col='lightgray',lty=3) 🗿問題討論: ■ 從以上機率密度函數抽出80,000個樣本點,大約有多少點會落在40跟60之間? ■ 如果以上機率密度函數的底(support)變為[0,1],它的最高點會變成多少? ■ 如果它的底變為[0.95,1.05],它的最高點會變成多少? 【C】個別抽樣的類別隨機變數 我們將隨機變數定義為隨機實驗的結果(值),由於這些實驗帶有隨機的成份(也就是說每一次實驗都可能跑出不同的結果),所以隨機變數的值是不確定的。

C1.最簡單的隨機變數-類別目標變數、個別隨機抽樣 最簡單的隨機變數就是隨機從目標族群之中選取一點,直接就把這一點當作隨機變數的值。

C2.個別隨機抽樣 使用sample()做個別隨機抽樣時,將樣本大小設為1(size=1) sample(Skin,size=1)#samplesize=1 [1]Yellow Levels:BlackOthersWhiteYellow C3.重複實驗與結果向量 我們使用replicate()重複(隨機個別抽樣)實驗十次,將結果放在skin1_10這個類別向量裡面,由於sample()是從目標族群之中隨機抽樣,所以我們每一次執行這一段程式,所得到的類別向量都不會相同。

skin1_10=replicate(n=10,expr=sample(Skin,size=1)) skin1_10 [1]OthersOthersBlackBlackWhiteBlackOthersOthersYellowBlack Levels:BlackOthersWhiteYellow C4.比較族群和重複個別抽樣的結果 比較Skin和skin1_10之中各分類的比例 Skin%>%table%>%prop.table . BlackOthersWhiteYellow 0.30.40.10.2 skin1_10%>%table%>%prop.table . BlackOthersWhiteYellow 0.40.40.10.1 🗿問題討論:在這個例子裡面… ■我們的研究對象(分析單位)是? ■目標族群? ■目標變數? ■隨機變數?當我們用一個類別向量來代表我們的目標族群時… ■Skin代表什麼? ■Skin[3:5]代表什麼?這個例子我們討論『類別變數」的『個別抽樣』隨機變數,在這裡… ■我們如何定義我們的隨機變數? ■我們如何產生隨機變數的值?當我將重複實驗的結果(值)存在skin1_10這個(類別的)『結果向量』裡面… ■skin1_10代表什麼? ■skin1_10[10]代表什麼? ■Skin和skin1_10的長度各是多少?它們的長度是一樣的嗎? ■Skin和skin1_10之中各分類的比例是一樣的嗎?最後… ■「目標族群的大小」和「重複實驗的次數」一定要相同嗎? ■目標族群和重複實驗的結果向量、兩者之中各分類的比例應該要相同(類似)嗎? C5.增加重複抽樣的次數 重複實驗10,100、1,000、10,000、100,000、1,000,000次,將結果放在Trials這個序列(list)物件裡面 t0=Sys.time() Trials=list( skin1_10=replicate(10,sample(Skin,size=1)), skin1_100=replicate(100,sample(Skin,size=1)), skin1_1K=replicate(1000,sample(Skin,size=1)), skin1_10K=replicate(10000,sample(Skin,size=1)), skin1_100K=replicate(100000,sample(Skin,size=1)) ) Sys.time()-t0 Timedifferenceof2.7503secs Trials的子物件長度 sapply(Trials,length) skin1_10skin1_100skin1_1Kskin1_10Kskin1_100K 10100100010000100000 重複個別抽樣的結果之之中各分類的比例 sapply(Trials,function(v){ prop.table(table(v)) }) skin1_10skin1_100skin1_1Kskin1_10Kskin1_100K Black0.20.230.2900.30050.29749 Others0.60.460.4040.39430.40222 White0.00.120.1180.09870.09976 Yellow0.20.190.1880.20650.20053 【D】個別抽樣的數值隨機變數 接下來我們將隨機變數定義在數值變數(如Weight)之上,我們同樣可以用重複抽樣產生一系列的結果向量 Trials=list( weight1_10=replicate(10,sample(Weight,size=1)), weight1_100=replicate(100,sample(Weight,size=1)), weight1_1K=replicate(1000,sample(Weight,size=1)), weight1_10K=replicate(10000,sample(Weight,size=1)), weight1_100K=replicate(100000,sample(Weight,size=1)) ) par(cex=0.75,mfrow=c(2,3),mar=c(4,5,5,1)) for(vinTrials){ hist(v,breaks=seq(40,80,2.5),main=paste(length(v),"repeats"),xlab="Weight") } hist(Weight,breaks=seq(40,80,2.5),col='gray',border='lightgray') 💡學習重點:關於『隨機變數』… ■隨機變數是定義在隨機實驗上面,隨機實驗的結果就是隨機變數的值 ■我們透過實驗來產生隨機變數的值,由於實驗的結果是隨機的,所以隨機變數的值也是不確定的 ■一般我們將重複實驗(N次)的結果存放在一個向量裡面,稱它為(重複N次的)『結果向量』 ■由於隨機變數的值不確定,所以通常我們關心的是它的『分布(Distribution)』 ■所謂『分布』就是結果向量之中各類別(或數值區間)出現的頻率隨機變數可以分為『類別』與『數值』兩大類… ■類別隨機變數的分布:各類別的比例,通常以直條圖表示 ■數值隨機變數的分布:變數在數值空間之中的分布頻率(或機率),通常以直方圖(或密度函數)表示『個別抽樣』可以說是最簡單的隨機變數… ■定義:從某一族群之中隨機選取一點,直接以其值作為隨機變數的值 ■我們用sample()做隨機抽樣,個別抽樣實驗的樣本大小:size=1 ■我們用replicate(n,sample(.))來重複實驗,重複實驗的次數(n)不必與目標族群的大小相同對定義在『個別抽樣』實驗之上的類別(數值)隨機變數而言… ■重複實驗的結果和族群之中各分類的比例(數值的分布)並不會完全一樣 ■重複的次數越多,兩者之間的差異就會越來越小 ■理論上,重複“無窮”多次時,結果向量中各分類的比例(數值分布)就會趨近於族群之中的比例(分布) 補充教材:練習使用%>%和lapply() 善用%>%和lapply()可以降低程式的複雜度,也可以避免留下沒有用的(中間暫存)資料物件 lapply(10^(1:5),replicate,sample(Weight,1))%>%lapply(function(v){ hist(v,breaks=seq(40,80,2.5),main=paste(length(v),"repeats"),xlab="") })->z



請為這篇文章評分?