R语言各种假设检验实例整理(常用)
轉載自#博客園# @ywliao
一、正態分布參數檢驗
例1. 某種原件的壽命X(以小時計)服從正態分布N(μ, σ)其中μ, σ2均未知。現測得16只元件的壽命如下:
159 280 101 212 224 379 179 264222 362 168 250 149 260 485 170問是否有理由認為元件的平均壽命大于255小時?解:按題意,需檢驗H0: μ ≤ 225 H1: μ > 225此問題屬于單邊檢驗問題可以使用R語言t.testt.test(x,y=NULL,alternative=c("two.sided","less","greater"),mu=0,paired=FALSE,var.equal=FALSE,conf.level=0.95)其中x,y是又數據構成e向量,(如果只提供x,則作單個正態總體的均值檢驗,如果提供x,y則作兩個總體的均值檢驗),alternative表示被則假設,two.sided(缺省),雙邊檢驗(H1:μ≠H0),less表示單邊檢驗(H1:μ<μ0),greater表示單邊檢驗(H1:μ>μ0),mu表示原假設μ0,conf.level置信水平,即1-α,通常是0.95,var.equal是邏輯變量,var.equal=TRUE表示兩樣品方差相同,var.equal=FALSE(缺省)表示兩樣本方差不同。R代碼:X<-c(159, 280, 101, 212, 224, 379, 179, 264,222, 362, 168, 250, 149, 260, 485, 170)t.test(X,alternative = "greater",mu=225)結果:可見P值為0.257 > 0.05 ,不能拒絕原假設,接受H0,即平均壽命不大于225小時。例2.在平爐上進行的一項試驗以確定改變操作方法的建議是否會增加剛的得率,試驗時在同一個平爐上進行的,每煉一爐剛時除操作方法外,其它條件都盡可能做到相同,先用標準方法煉一爐,然后用新方法煉一爐,以后交替進行,各煉了10爐,其得率分別為標準方法 78.1 72.4 76.2 74.3 77.4 78.4 76.0 75.5 76.7 77.3新方法 79.1 81.0 77.3 79.1 80.0 79.1 79.1 77.3 80.2 82.1設這兩個樣本相互獨立,且分別來自正態總體N(μ1, σ2)和N(μ2, σ2),其中μ1,μ2和σ2未知。問新的操作能否提高得率?(取α=0.05)
解1:根據題意,需要假設H0: μ1 ≥ μ2 H1: μ1 < μ2 這里假定σ12=σ22=σ2,因此選擇t.test,var.equal=TRUER代碼:X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3) Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1) t.test(X,Y,var.equal = TRUE,alternative = "less")結果:
可見P值<0.05,接受備擇假設,即新的操作能夠提高得率。解2:因為數據是成對出現的,所以采用成對數據t檢驗比上述的雙樣本均值檢驗更準確。所謂成對t檢驗就是Zi=Xi-Yi,再對Z進行單樣本均值檢驗R代碼:X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3) Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1) t.test(X-Y, alternative = "less")結果:可見P值<0.05,接受備擇假設,即新的操作能夠提高得率。并且P值更小可見比雙樣本均值檢驗更準確
例3.對例2進行方差檢驗,方差是否相同
解:根據題意,需檢驗H0: σ12 = σ22 H1: σ12 ≠ σ22方差檢驗可以用var.testvar.test(x, y, ratio = 1,alternative = c("two.sided", "less", "greater"),conf.level = 0.95, ...)x,y是來自兩樣本數據構成的向量,ratio是方差比的原假設,缺省值為1.alternative是備擇假設,two.sided表示雙邊檢驗(H1:σ12/σ22<ratio),greater表示單邊檢驗(H1:σ12)R代碼:X<-c(78.1,72.4,76.2,74.3,77.4,78.4,76.0,75.5,76.7,77.3) Y<-c(79.1,81.0,77.3,79.1,80.0,79.1,79.1,77.3,80.2,82.1) var.test(X,Y)結果:可見P值為0.559>0.05,接受原假設,認為兩者方差相同
二、二項分布參數檢驗
例4.有一批蔬菜種子的平均發芽率p0=0.85,現隨即抽取500粒,用種衣劑進行浸種處理,結果有445粒發芽。試檢驗種衣劑對種子發芽率有無效果。解:根據題意,所檢驗的問題為H0:p=p0=0.85, H1:p≠p0可以用R語言的binom.testbinom.test(x, n, p = 0.5,alternative = c("two.sided", "less", "greater"),conf.level = 0.95)其中x是成功的次數;或是一個由成功數和失敗數組成的二維向量。n是試驗總數,當x是二維向量時,此值無效。P是原假設的概率。R語言代碼:binom.test(445,500,p=0.85)
結果:
可知P值0.01207<0.05,拒絕原假設,說明種衣劑對種子的發芽率有顯著效果。三、其它重要的非參數檢驗法
3.1.理論分布完全已知的情況下
3.1.1.皮爾森擬合優度檢驗例5.某消費者協會為了確定市場上消費者對5種品牌啤酒的喜好情況,隨即抽取了1000名啤酒愛好者作為樣品進行試驗:每個人得到5種品牌的啤酒各一瓶,但未標明牌子。這5種啤酒分別按著A、B、C、D、E字母的5張紙片隨即的順序送給每一個人。下表是根據樣本資料整理的各種品牌啤酒愛好者的頻數分布。試根據這些數據判斷消費者對這5種品牌啤酒的愛好有無明顯差異?最喜歡的牌子 A B C D E人數X 210 312 170 85 223解:如果消費者對5種品牌的啤酒無顯著差異,那么,就可以認為喜好這5種拍品啤酒的人呈均勻分布,即5種品牌啤酒愛好者人數各占20%。據此假設H0:喜好5種啤酒的人數分布均勻可以使用Pearson χ2擬合優度檢驗,R語言中調用chisq.test(X)chisq.test(x, y = NULL, correct = TRUE,p = rep(1/length(x), length(x)), rescale.p = FALSE,simulate.p.value = FALSE, B = 2000)其中x是由觀測數據構成的向量或者矩陣,y是數據向量(當x為矩陣時,y無效)。correct是邏輯變量,標明是否用于連續修正,TRUE(缺省值)表示修正,FALSE表示不修正。p是原假設落在小區間的理論概率,缺省值表示均勻分布,rescale.p是邏輯變量,選擇FALSE(缺省值)時,要求輸入的p滿足和等于1;選擇TRUE時,并不要求這一點,程序將重新計算p值。simulate.p.value邏輯變量(缺省值為FALSE),當為TRUE,將用仿真的方法計算p值,此時,B表示仿真的此值。R語言代碼:X<-c(210, 312, 170, 85, 223)
chisq.test(X)
結果:例6.為研究電話總機在某段時間內接到的呼叫次數是否服從Poisson分布,現收集了42個數據,如下表所示,通過對數據的分析,問能否確認在某段時間內接到的呼叫次數服從Poisson分布(α = 0.1)?解:R語言代碼:#輸入數據 X<-0:6; Y<-c(7, 10, 12, 8, 3, 2, 0) #計算理論分布,其中mean(rep(X,Y))為樣本均值 q<-ppois(X, mean(rep(X,Y))); n<-length(Y) p=rep(0,n) p[1]<-q[1]; p[n]<-1-q[n-1] for (i in 2:(n-1))p[i]<-q[i]-q[i-1] #作檢驗 chisq.test(Y,p=p)提示結果可能不準確,因為皮爾森卡方擬合由度檢驗要求分組后每組的頻數至少要大于等于5,而后三組中出現的頻率分別為3,2,0,均小于5,解決問題的方法是將后三組合成一組,此時的頻數為5,滿足要求,重寫R語言代碼
R語言代碼:#輸入數據
X<-0:6; Y<-c(7, 10, 12, 8, 3, 2, 0)
#計算理論分布,其中mean(rep(X,Y))為樣本均值
q<-ppois(X, mean(rep(X,Y))); n<-length(Y)
p<-rep(0,n)
p1<-q1; p[n]<-1-q[n-1]
for (i in 2:(n-1))
p[i]<-q[i]-q[i-1]
#重新分組
Z<-c(7, 10, 12, 8, 5)
#重新計算理論分布
n<-length(Z); p<-p[1:n-1]; p[n]<-1-q[n-1]
#作檢驗
chisq.test(Z,p=p)
可見P值>>0.1,可以確認在某段時間之內接到的電話次數服從Poisson 分布
3.1.2.正態W檢驗
例7.已知15名學生體重如下,問是否服從正態分布解:R語言代碼:w <- c(75.0, 64.0, 47.4, 66.9, 62.2, 62.2, 58.7, 63.5,66.6, 64.0, 57.0, 69.0, 56.9, 50.0, 72.0) shapiro.test(w)P值>0.05,接受原假設,認為來自正態分布總體。
3.2.理論分布依賴于若干個未知參數的情況
3.2.1Kolmogorov-Smirnov 檢驗
例8.對一臺設備進行壽命檢驗,記錄10次無故障工作時間,并按從小到大的次序排列如下:(單位)420 500 920 1380 1510 1650 1760 2100 2300 2350試用Kolmogorov-Smirnov K 檢驗方法檢驗此設備無故障工作時間分布是否服從λ = 1/1500的指數分布?解: R語言進行Kolmogorov-Smirnov K 檢驗使用ks.test( )
ks.test(x, y, ..., alternative = c("two.sided", "less", "greater"), exact = NULL) # x是待檢測的樣品構成的向量,y是原假設的數據向量或是原假設的字符串。R語言代碼:X<-c(420, 500, 920, 1380, 1510, 1650, 1760, 2100, 2300, 2350)ks.test(X, "pexp", 1/1500)P值大于0.05,無法拒絕原假設,因此認為此設備無故障工作時間的分布服從λ = 1/1500的指數分布。例9.假定從分布函數未知的F(x)和G(x)的總體中分別抽出25個和20個觀察值的隨即樣品,其數據由下表所示。現檢驗F(x)和G(x)是否相同。R語言代碼:X<-scan( )0.61 0.29 0.06 0.59 -1.73 -0.74 0.51 -0.561.64 0.05 -0.06 0.64 -0.82 0.37 1.772.36 1.31 1.05 -0.32 -0.40 1.06 -2.470.39 1.09 -1.28Y<-scan( )2.20 1.66 1.38 0.20 0.36 0.000.96 1.56 0.44 1.50 -0.30 0.66 2.31 3.29 -0.27 -0.37 0.38 0.700.52 -0.71ks.test(X,Y)P值>0.05,無法拒絕原假設,說明F(x)和G(x)分布函數相同。
3.2.2.列聯表數據的檢驗
例10.為了研究吸煙是否與患肺癌相關,對63位肺癌患者及43名非肺癌患者(對照組)調查了其中的吸煙人數,得到2x2列聯表,如下表所示解:
進行Pearson卡方檢驗R語言代碼:x<-c(60, 3, 32, 11)dim(x)<- c(2,2)chisq.test(x,correct = F)P值<0.05,拒絕原假設,認為吸煙與患肺癌相關。
例11.某醫師為研究乙肝免疫球蛋白預防胎兒宮內感染HBV的結果,將33例HBsAg陽性孕婦隨即分為預防注射組和對照組,結果由下表所示,問兩組新生兒的HBV總體感染率有無差別?
解: 最小期望值T=(11*9)/33=3 < 5 ,因此不能使用卡方檢驗,使用fisher檢驗,在R語言中使用fisher.test( )
fisher.test(x, y = NULL, workspace = 200000, hybrid = FALSE,control = list(), or = 1, alternative = "two.sided",conf.int = TRUE, conf.level = 0.95)#其中x是具有二維列聯表形式的矩陣或是由因子構成的對象,y是由因子構成的對象,當x是矩陣時,此值無效。workspace的輸入值時一整數,其整數表示用于網絡算法空間的大小。hybrid為邏輯變量,FALSE(缺省值)表示精確計算概率,TRUE表示用混合算法計算概率。alternative為備擇,有"two.sided"(缺失值)雙邊,"less"單邊小于,"greater"單邊大于,conf.int邏輯變量,當conf.int=TRUE(缺省值),給出 區間估計。conf.level為置信水平,缺省值為0.95,其余參數見在線說明。R語言代碼:x<-c(4,5,18,6); dim(x)<-c(2,2) fisher.test(x)可見P值>0.05,接受原假設,認為兩變量是獨立的,即兩組新生兒的HBV總體感染率無差別
例12.某胸科醫院同時用甲乙兩種方法測定202份痰樣本中的抗酸桿菌,結果如下表所示,問甲、乙兩種方法檢出率有無差異。
解:因為是在相同個體上進行的兩次檢驗,因此使用McNemar檢驗,
H0:對相同痰樣本測定中,甲乙兩種方法檢出率沒有差異。在R語言中進行McNemar檢驗用到函數mcnemar.test( )mcnemar.test(x, y = NULL, correct = TRUE) #其中x是具有二維列聯表形式的矩陣或是由因子構成的對象。y是由因子構成的對象,當x是矩陣時,此值無效。correct是邏輯變量,TRUE(缺省值)表示在計算檢驗統計量時用連續修正,FALSE是不用修正。R語言代碼:X<-c(49, 21, 25, 107); dim(X)<-c(2,2) mcnemar.test(X,correct=FALSE)P值> 0.05,不能認為兩種檢測方法有差異。
3.2.3.符號檢驗
例13.聯合國人員在世界上66個大城市的生活花費指數(以紐約市1996年12月為100)按自小至大的次序排列如下(這里北京的指數為99):66 75 78 80 81 81 82 83 83 83 8384 85 85 86 86 86 86 87 87 88 8888 88 88 89 89 89 89 90 90 91 9191 91 92 93 93 96 96 96 97 99 100101 102 103 103 104 104 104 105 106 109 109110 110 110 111 113 115 116 117 118 155 192 假設這個樣品是從世界許多大城市中隨即抽樣得到的。試用符號檢驗分析,北京是在中位數之上,還是在中位數之下。解:樣本的中位數(M)作為城市生活水平的中間值,因此需要檢驗:H 0 : M ≥ 99, H 1 : M < 99.輸入數據,作二項檢驗。R語言代碼:X <- c(66,75, 78 ,80 ,81 ,81 ,82, 83, 83, 83, 83,84 , 85, 85, 86, 86, 86, 86, 87 ,87, 88, 88,88, 88, 88, 89 ,89, 89, 89, 90 ,90 ,91 ,91,91 ,91, 92, 93, 93, 96, 96, 96, 97, 99, 100,101, 102, 103, 103 ,104, 104, 104 ,105, 106, 109, 109,110 ,110, 110, 111, 113, 115, 116, 117 ,118, 155 ,192)binom.test(sum(X>99), length(X), al="l")在程序中,sum(x>99)表示樣本中大于99的個數。al是alternative的縮寫,"l"是"less"的縮寫。計算出的P值小于0.05,拒絕原假設,也就是說,北京的生活水平高于世界的中位水平。例14.用兩種不同的飼料養豬,其增重情況如下表所示。試分析兩種飼料養豬有無顯著差異。
R語言代碼:x<-scan()25 30 28 23 27 35 30 28 32 29 30 30 31 16y<-scan()19 32 21 19 25 31 31 26 30 25 28 31 25 25binom.test(sum(x<y), length(x))sum(x < y)表示樣品X小于樣品Y的個數。計算出P值大于0.05,無法拒絕原假設,可以認為兩種飼料養豬無顯著差異。
例15.某飲料店為了解顧客對飲料的愛好情感,進一步改進他們的工作,對顧客喜歡咖啡還是喜歡奶茶,或者兩者同樣愛好進行了調查,顧客喜歡咖啡超過奶茶用正號表示,喜歡奶茶超過咖啡用負號表示,兩者同樣愛好用0表示。現將調查的結果列在下表中。試分析顧客是喜歡咖啡還是喜歡奶茶。
解:根據題意可檢驗如下假設:
H0:顧客喜歡咖啡等于喜歡奶茶; H1:顧客喜歡咖啡超過奶茶。以上資料中有以人(即6號顧客)表示對咖啡和奶茶有同樣愛好,用0表示,因此在樣本容量中不加計算,所以實際上N=12.如果H0假設為真,那么符合p為1/2的二項分布,如果H1為真,那么顧客喜歡奶茶的人數小于理論值,al="l",因此用R軟件進行計算,顯著性水平取α = 0.10,R語言代碼:binom.test(3,12,p=1/2, al="l", conf.level = 0.90)可見P值 < 0.1 ,置信區間也不包括0.5,因此拒絕原假設人口喜歡咖啡的人超過喜歡奶茶的人。在符號檢驗法中,只計算符號的個數,而不考慮每個符號差所包含的絕對值的大小,因此常常使用彌補了這個缺點的wilcoxon符號秩檢驗。3.3.4.符號秩檢驗
例16.假定某電池廠宣稱該廠生產的某種型號電池壽命的中位數為140安培小時。為了檢驗改廠生產的電池是否符合其規定的標準,現從新近生產的一批電池中抽取了隨即樣本,并對這20個電池的壽命進行了測試,其結果如下(單位:安培小時):137.0 140.0 138.3 139.0 144.3 139.1 141.7 137.3 133.5 138.2141.1 139.2 136.5 136.5 135.6 138.0 140.9 140.6 136.3 134.1試用Wilcoxon符號秩檢驗分析該廠生產的電池是否符合其標準。
解:根據題意假設:H0:電池中位數M≥ 140安培小時;H1:電池中位數<140安培小時。在R語言中進行符號秩檢驗可以使用wilcox.test( )wilcox.test(x, y = NULL,alternative = c("two.sided", "less", "greater"),mu = 0, paired = FALSE, exact = NULL, correct = TRUE,conf.int = FALSE, conf.level = 0.95, ...)其中x,y是觀察數據構成的數據向量。alternative是備擇假設,有單側檢驗和雙側檢驗,mu待檢參數,如中位數M0.paired是邏輯變量,說明變量x,y是否為成對數據。exact是邏輯變量,說明是否精確計算P值,當樣本量較小時,此參數起作用,當樣本兩較大時,軟件采用正態分布近似計算P值。correct是邏輯變量,說明是否對P值的計算采用連續性修正,相同秩次較多時,統計量要校正。conf.int是邏輯變量,說明是否給出相應的置信區間。R語言代碼:X<-scan()137.0 140.0 138.3 139.0 144.3 139.1 141.7 137.3 133.5 138.2 141.1 139.2 136.5 136.5 135.6 138.0 140.9 140.6 136.3 134.1wilcox.test(X, mu=140, alternative="less",exact=FALSE,correct=FALSE, conf.int=TRUE)這里V=34是wicoxon的統計量,P值<0.05,即拒絕原假設,接受備擇假設,中位值小于小于140安培小時。例17. 為了檢驗一種新的復合肥和原來使用的肥料相比是否顯著提高了小麥的產量,在一個農場中選擇了10塊田地,每塊等分為兩部分,其中任指定一部分使用新的復合肥料,另一部分使用原肥料。小麥成熟后稱得各部分小麥產量如下表所示。試用Wilcoxon符號檢驗法檢驗新復合肥是否會顯著提高小麥的產量,并與符號檢驗作比較(α = 0.05)。解:根據題意作如下假設:H0:新復合肥的產量與原肥料的產量相同,H1:新復合肥的產量高于原肥料的產量。符號秩檢驗R語言代碼:x<-c(459, 367, 303, 392, 310, 342, 421, 446, 430, 412)y<-c(414, 306, 321, 443, 281, 301, 353, 391, 405, 390)wilcox.test(x, y, alternative = "greater", paired = TRUE)可見P值<0.05拒絕原假設,即新復合肥能顯著提高小麥產量。符號檢驗R語言代碼:x<-c(459, 367, 303, 392, 310, 342, 421, 446, 430, 412)y<-c(414, 306, 321, 443, 281, 301, 353, 391, 405, 390)binom.test(sum(x>y), length(x), alternative = "greater") 用符號檢驗P值>0.05,因此在α = 0.05的水平下,就所給數據而言,符號檢驗還不足以區分兩種化肥對提高小麥的產量產生差異。例18.今測得10名非鉛作業工人和7名鉛作業工人的血鉛值,如下表所示。試用Wilcoxon秩和檢驗分析兩組工人血鉛值有無差異。
解:進行Wilcoxon秩和檢驗R語言同樣可以使用wilcox.test( )R語言代碼:x<-c(24, 26, 29, 34, 43, 58, 63, 72, 87, 101)y<-c(82, 87, 97, 121, 164, 208, 213)wilcox.test(x,y,alternative="less",exact=FALSE,correct=FALSE)P值小于0.05,拒絕原假設,即鉛作業工人血鉛值高于非作業工人。
例19.某醫院用某種藥物治療兩型慢性支氣管炎患者共216例,療效由下表所示,試分析該藥物對兩型慢性支氣管炎的治療是否相同。
解:我們想象各病人的療效用4個不同的值表示(1表示最好,4表示最差),這樣就可以位這216名排序,因此,可用Wilcoxon秩和檢驗來分析問題。R語言代碼:x<-rep(1:4, c(62, 41, 14,11)); y<-rep(1:4, c(20, 37, 16, 15)) wilcox.test(x, y, exact=FALSE)P值<0.05,拒絕原假設,即認為該藥物對兩型慢性支氣管炎的治療是不相同的。因為數據有結點存在,故無法精確計算P值,其參數為exact=FALSE。3.3.5.二元數據相關檢驗
例20.某種礦石中兩種有用成分A,B,取10個樣品,每個樣品中成分A的含量百分數x(%),及B的含量百分數y(%)的數據下表所示,對兩組數據進行相關性檢驗。解:進行相關性檢驗,在R語言中可以使用cor.test( )cor.test(x, y,alternative = c("two.sided", "less", "greater"),method = c("pearson", "kendall", "spearman"),exact = NULL, conf.level = 0.95, ...)#其中x,y是數據長度相同的向量,alternative是備擇假設,缺省值為"two.sided",method是檢驗方法,缺省值是Pearson檢驗,conf.level是置信區間水平,缺省值為0.95cor.test( )還有另一種使用格式cor.test(formula, data, subset, na.action, ...) #其中formula是公式,形如'~u+v' , 'u', 'v' 必須是具有相同長度的數值向量,data是數據框,subset是可選擇向量,表示觀察值的子集。假設此例中兩組數據均來自正態分布,使用pearson相關性檢驗,
R語言代碼:
ore<-data.frame(x=c(67, 54, 72, 64, 39, 22, 58, 43, 46, 34),y=c(24, 15, 23, 19, 16, 11, 20, 16, 17, 13) ) cor.test(ore$x,ore$y)可見P值<0.05,拒絕原假設,認為X與Y相關。例21.一項有六個人參加表演的競賽,有兩人進行評定,評定結果用下表所示,試用Spearman秩相關檢驗方法檢驗這兩個評定員對等級評定有無相關關系。
解:R語言代碼:x<-c(1,2,3,4,5,6); y<-c(6,5,4,3,2,1) cor.test(x, y, method = "spearman")可見P值<0.05,拒絕原假設,認為x與y相關,rs=-1,表示這兩個量是完全負相關,即兩人的結論有關系,但完全相反
總結
以上是生活随笔為你收集整理的R语言各种假设检验实例整理(常用)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Boom 3D播放器功能详解
- 下一篇: 英文不好到底能不能学会编程?