您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關R中如何實現方差分析ANOVA,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
R實現統計中的檢驗方法---方差分析ANOVA
前言
方差分析(均數的顯著性檢驗)
方差分析(Analysis of Variance,簡稱ANOVA),又稱“變異系數分析”,是R.A.Fisher發明的,用于兩個及兩個以上樣本均數差別的顯著性檢驗。
1.適用條件
方差分析數據必須滿足3個條件即獨立、正態,方差齊次性。
---------------------#正態性檢驗#--------------------- #Shapiro-Wilk檢驗用來檢驗數據是否符合正態分布,類似于線性回歸的方法一樣,是檢驗其于回歸曲線的殘差。 #該方法作者推薦在樣本量很小的時候使用,比如N<20。但是也有作者推薦在大數據集上使用。該作者將這種修改 #后的方法運用在R語言的stats包中的shapiro.test函數中。該檢驗原假設為H0:數據集符合正態分布。 #R語言中的Shapiro-Wilk檢驗(W檢驗),shapiro.test(x)該函數只有一個參數即數據集x。x可以是數值型向量,允許存在NA #但是非丟失數據需要在3-5000內。 ##example## #11個隨機抽取的樣本的體重(斤)數據為:148,154,158,160,161,162,166,170,182,195,236 k<-c(148,154,158,160,161,162,166,170,182,195,236) shapiro.test(k) Shapiro-Wilk normality test data: k W = 0.78881, p-value = 0.006704 ##p=0.0067<-0.05,拒絕原假設,該數據不符合正態分布。 ---------------------#方差齊性檢驗#--------------------- #R中最常用的方差齊性檢驗(bartlett檢驗),bartlett.test()調用格式為bartlett.test()調用格式為 #bartlett.test(x,g...)其中,參數x是數據向量或列表(list);g是因子向量,如果x是列表則忽略g,當使用數據集時,也通過formula調用函數 ##example## #以multcomp包中的cholesterol數據集為例 library(multcomp) head(cholesterol) trt response 1 1time 3.8612 2 1time 10.3868 3 1time 5.9059 4 1time 3.0609 5 1time 7.7204 6 1time 2.7139 bartlett.test(response~trt,data=cholesterol) Bartlett test of homogeneity of variances data: response by trt Bartlett's K-squared = 0.57975, df = 4, p-value = 0.9653 #Bartlett檢驗表明五組的方差并沒有顯著不同(p=0.97)
2.分類(按因素分)
單因素方差分析、二因素方差分析和多因素方差分析。(單因素方差分析主要對因素的主效應進行分析,而二因素及多因素方差分析除了多組效應分析外,還可對因素間的交互作用進行分析。分析交互作用時,觀測值必須有重復)
3.R實例
R中的函數aov()用于方差分析的計算,其調用格式為:
aov(formula,data=NULL,projections=FALSE,qr=TRUE,contrasts=NULL,...) #其中的參數formula表示方差分析的公式,在單因素方差分析中即為X~A;data表示做方差分析的數據框; projections為邏輯值,表示是否返回預測結果;qr同樣是邏輯值,表示是否返回QR分解結果,默認為TRUE; contrasts是公式中的一些因子的對比列表。通過summary()可列出分析表的詳細結果。 #詳情參見R語言實戰(第2版)page:201.
單因素方差分析
---------------------#單因素方差分析#--------------------- #單因素方差分析比較的是分類因子定義的兩個或多個組別中的因變量均值。以multcomp包中cholesterol數據集為例。 ##正態性檢驗 library(multcomp) head(cholesterol) str(cholesterol) shapiro.test(cholesterol$response) Shapiro-Wilk normality test data: cholesterol$response W = 0.97722, p-value = 0.4417 #結果表明,p=0.4417>0.05,接受原假設,說明數據在五個水平下都是正態分布的。 ##方差齊性檢驗 bartlett.test(response~trt,data=cholesterol) Bartlett test of homogeneity of variances data: response by trt Bartlett's K-squared = 0.57975, df = 4, p-value = 0.9653 #結果表明,p=0.9653,接受原假設,說明數據在不同水平下是等方差的。 ##單因素方差分析 fit<-aov(response~trt,data=cholesterol) summary(fit) Df Sum Sq Mean Sq F value Pr(>F) trt 4 1351.4 337.8 32.43 9.82e-13 *** Residuals 45 468.8 10.4 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #結果表明,5種治療方式間的效果差異非常顯著。 ##多重比較(多重T檢驗) #以上單因素方差分析可以得出,五組之間治療效果有顯著差異,但是我們不知道哪種療法與其他療法的不同,多重比較可以解決這個問題。 #R語言中TukeyHSD()函數提供了對各組均值差異的成對檢驗。 TukeyHSD(fit) Tukey multiple comparisons of means 95% family-wise confidence level Fit: aov(formula = response ~ trt, data = cholesterol) $trt diff lwr upr p adj 2times-1time 3.44300 -0.6582817 7.544282 0.1380949 4times-1time 6.59281 2.4915283 10.694092 0.0003542 drugD-1time 9.57920 5.4779183 13.680482 0.0000003 drugE-1time 15.16555 11.0642683 19.266832 0.0000000 4times-2times 3.14981 -0.9514717 7.251092 0.2050382 drugD-2times 6.13620 2.0349183 10.237482 0.0009611 drugE-2times 11.72255 7.6212683 15.823832 0.0000000 drugD-4times 2.98639 -1.1148917 7.087672 0.2512446 drugE-4times 8.57274 4.4714583 12.674022 0.0000037 drugE-drugD 5.58635 1.4850683 9.687632 0.0030633 #結果表明,1time和2times的均值差異不顯著(p=0.138),而1time和4times間的差異非常顯著(p<0.01)
一般圖像給的效果會更加直觀,R中multcomp包中的glht()函數提供了多重均值比較更為全面的方法。
par(mar=c(5,4,6,2)) tuk<-glht(fit,linfct=mcp(trt="Tukey")) plot(cld(tuk,level=0.05),col="lightgreen")##cld函數中的level選項設置了使用的顯著水平0.05. #圖像中,有相同字母的組說明均值差異不顯著。
備注:
1)在單因素方差分析前需要對數據進行正態性和方差齊性檢驗。除了以上提及的檢驗方法,R中還可以使用Q-Q圖來檢驗正態性假設。#詳情參見R語言實戰(第2版)page:206-207.
2)單因素方差分析的擴展為單因素協方差分析,包含一個或多個定量的協變量。(詳情參見R語言實戰(第2版)page:208.)
二因素方差分析(雙因素方差分析)
---------------------#二因素方差分析#--------------------- #以基礎安裝包中的ToothGrowth數據集為例,60只豚鼠,自變量包括兩種投喂方法(橙汁或VC),不同喂食方法中抗壞血酸含量有 #三種水平,牙齒長度為因變量,每種處理都被分配10只豚鼠。 head(ToothGrowth) len supp dose 1 4.2 VC 0.5 2 11.5 VC 0.5 3 7.3 VC 0.5 4 5.8 VC 0.5 5 6.4 VC 0.5 6 10.0 VC 0.5 ToothGrowth$dose<-as.factor(ToothGrowth$dose)#將劑量改為factor,而不是數值型。 #正態性檢驗# shapiro.test(ToothGrowth$len) Shapiro-Wilk normality test data: ToothGrowth$len W = 0.96743, p-value = 0.1091 #結果顯示,p>0.05,接受原假設,數據正態分布。 #方差齊性檢驗# #需要檢驗方差在兩個不同分類標準下方差是否等值。 #檢驗牙齒長度在不同喂食方法水平下方差是否等值 bartlett.test(len~supp,data=ToothGrowth) Bartlett test of homogeneity of variances data: len by supp Bartlett's K-squared = 1.4217, df = 1, p-value = 0.2331 #結果顯示,p>0.05,接受原假設,在不同喂食方法水平上,牙齒長度方差等值。 #檢驗牙齒長度在不同劑量水平下方差是否等值 bartlett.test(len~dose,data=ToothGrowth) Bartlett test of homogeneity of variances data: len by dose Bartlett's K-squared = 0.66547, df = 2, p-value = 0.717 #結果顯示,p>0.717,接受原假設,在不同劑量水平上,牙齒長度方差等值。 #雙因素方差分析# fitt<-aov(len~supp*dose,data=ToothGrowth) summary(fitt) Df Sum Sq Mean Sq F value Pr(>F) supp 1 205.4 205.4 15.572 0.000231 *** dose 2 2426.4 1213.2 92.000 < 2e-16 *** supp:dose 2 108.3 54.2 4.107 0.021860 * Residuals 54 712.1 13.2 --- Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1 #結果顯示,不同喂食方法以及不同劑量對豚鼠牙齒生長影響顯著,且喂食方法和不同劑量之間的交互作用非常顯著。
備注:
1)R仍然用函數aov()作雙因素方差分析,只需將formula改為x~A+B+A:B或x~A*B的形式即可。(且分析包含了交互作用的方差分析)
2)多因素方差分析和雙因素方差分析過程類似。
關于“R中如何實現方差分析ANOVA”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。