R で ancova を実行する方法
このチュートリアルでは、R でANCOVAを実行する方法の例を示します。
例: R の ANCOVA
次の変数を使用して、ANCOVA を実行して、学習テクニックが試験結果に影響を与えるかどうかをテストします。
- 技術的検討:分析したい独立変数
- 現在の生徒の学年: 考慮したい共変量
- レビュースコア: 分析したい応答変数
次のデータセットには、30 人ずつ 3 つのグループにランダムに分割された 90 人の生徒に関する情報が含まれています。
データセットには、各生徒が使用した学習手法(A、B 、またはC) 、その学習手法を使用し始めたときのクラス内での現在の成績、および準備のために 1 か月間その学習手法を使用した後の試験で受け取った成績が表示されます。試験のために。テスト:
#make this example reproducible set.seed(10) #create dataset data <- data.frame(technique = rep(c("A", "B", "C"), each = 30), current_grade = runif(90, 65, 95), exam = c(runif(30, 80, 95), runif(30, 70, 95), runif(30, 70, 90))) #view first six lines of dataset head(data) # technical current_grade exam #1 A 80.22435 87.32759 #2 A 74.20306 90.67114 #3 A 77.80723 88.87902 #4 A 85.79306 87.75735 #5 A 67.55408 85.72442 #6 A 71.76310 92.52167
ステップ 1: データを探索する
ANCOVA モデルを当てはめる前に、まずデータを調査して理解を深め、結果を歪める可能性のある極端な外れ値がないことを確認する必要があります。
まず、データセット内の各変数の概要を表示できます。
summary(data) # technical current_grade exam #A:30 Min. :65.43 Min. :71.17 # B:30 1st Qu.:71.79 1st Qu.:77.27 # C:30 Median:77.84 Median:84.69 # Mean:78.15 Mean:83.38 # 3rd Qu.:83.65 3rd Qu.:89.22 # Max. :93.84 Max. :94.76
各学習テクニックの値 ( A、B 、 C)がデータ内に 30 回出現していることがわかります。
また、調査開始時に生徒の現在のスコアがどのように分布していたかもわかります。クラスの最低点は 65.43、最高点は 93.84、平均は 78.15 でした。
同様に、試験で得られた最小スコアは 71.17、最大スコアは 94.76、平均は 83.38 であることがわかります。
次に、 dplyrパッケージを使用して、各学習手法の現在の成績と試験結果の平均と標準偏差を簡単に見つけることができます。
#load dplyr library(dplyr) data %>% group_by (technical) %>% summarize (mean_grade = mean(current_grade), sd_grade = sd(current_grade), mean_exam = mean(exam), sd_exam = sd(exam)) # A tibble: 3 x 5 # technique mean_grade sd_grade mean_exam sd_exam #1 A 79.0 7.00 88.5 3.88 #2 B 78.5 8.33 81.8 7.62 #3 C 76.9 8.24 79.9 5.71
各学習手法を使用している生徒の現在の学年の平均と標準偏差は、ほぼ同様であることがわかります。
また、学習手法Aを使用した生徒の試験の平均点が、手法BおよびCに比べて大幅に高かったこともわかります。
箱ひげ図を使用して、学習手法に基づいた試験結果の分布を視覚化することもできます。
boxplot(exam ~ technique, data = data, main = "Exam Score by Studying Technique", xlab = "Studying Technique", ylab = "Exam Score", col = "steelblue", border = "black" )
同様に、箱ひげ図を使用して、学習手法に基づいて現在の成績の分布を視覚化することもできます。
boxplot(current_grade ~ technical, data = data, main = "Current Grade by Studying Technique", xlab = "Studying Technique", ylab = "Current Grade", col = "steelblue", border = "black" )
ステップ 2: モデルの仮定を確認する
基本的なデータ探索を実行し、データに精通したら、ANCOVA の次の前提が満たされていることを確認する必要があります。
- 共変量と治療法は独立しています– モデルに共変量項を追加することは、共変量と治療法が互いに独立していることを確認する必要があります。治療は応答変数 (検査) に独立して作用します。
- 分散の均一性– グループ間の分散が等しいことを確認する必要があります
共変量と治療が独立していることを検証するには、現在の成績を応答変数として、学習技術を予測変数として使用して ANOVA を実行できます。
#fit anova model anova_model <- aov(current_grade ~ technique, data = data) #view summary of anova model summary(anova_model) # Df Sum Sq Mean Sq F value Pr(>F) #technical 2 74 37.21 0.599 0.552 #Residuals 87 5406 62.14
p 値は 0.05 より大きいため、共変量 (現在の成績)と治療 (学習技術) は独立しているように見えます。
次に、グループ間の分散が均一であることを確認するために、Levene 検定を実行できます。
#load car library to conduct Levene's Test libary(car) #conduct Levene's Test leveneTest(technical exam, data = data) #Levene's Test for Homogeneity of Variance (center = median) # Df F value Pr(>F) #group 2 9.4324 0.0001961 *** #87
検定の p 値は 0.0001961 に等しく、グループ間の分散が等しくないことを示します。この問題を修正するためにデータの変換を試みることもできますが、現時点では分散の差についてはあまり心配しません。
ステップ 3: ANCOVA モデルを調整する
次に、試験のスコアを応答変数として、学習技術を予測変数 (または「治療」) 変数として、現在の成績を共変量として使用して、ANCOVA モデルを当てはめます。
パッケージ内の Anova() 関数を使用します。これを行うには、モデルにタイプ III の二乗和を使用することを指定できるようにするためだけです。タイプ I の二乗和は、次の順序に依存するためです。予測子がモデルに入力されます。
#load car library library(car) #fit ANCOVA model ancova_model <- aov(exam ~ technique + current_grade, data = data) #view summary of model Anova(ancova_model, type="III") #Answer: exam # Sum Sq Df F value Pr(>F) #(Intercept) 7161.2 1 201.4621 < 2.2e-16 *** #technical 1242.9 2 17.4830 4.255e-07 *** #current_grade 12.3 1 0.3467 0.5576 #Residuals 3057.0 86
テクニックの p 値が非常に低いことがわかり、現在の成績を調整した後でも、勉強テクニックが試験の得点に統計的に有意な影響を与えていることがわかります。
ステップ 4: 事後テスト
ANCOVA の結果から、学習手法が試験のスコアに統計的に有意な影響を与えていることがわかりましたが、どの学習手法が互いに異なるかを判断するには、事後テストを実施する必要があります。
これを行うには、R のmultcompパッケージの glht() 関数を使用して、多重比較の Tukey テストを実行します。
#load the multcomp library library(multicomp) #fit the ANCOVA model ancova_model <- aov(exam ~ technique + current_grade, data = data) #define the post hoc comparisons to make postHocs <- glht(ancova_model, linfct = mcp(technique = "Tukey")) #view a summary of the post hoc comparisons summary(postHocs) #Multiple Comparisons of Means: Tukey Contrasts # #Fit: aov(formula = exam ~ technique + current_grade, data = data) # #Linear Assumptions: #Estimate Std. Error t value Pr(>|t|) #B - A == 0 -6.711 1.540 -4.358 0.000109 *** #C - A == 0 -8.736 1.549 -5.640 < 1e-04 *** #C - B == 0 -2.025 1.545 -1.311 0.393089 #view the confidence intervals associated with the multiple comparisons confint(postHocs) # Simultaneous Confidence Intervals # #Multiple Comparisons of Means: Tukey Contrasts # #Fit: aov(formula = exam ~ technique + current_grade, data = data) # #Quantile = 2.3845 #95% family-wise confidence level # #Linear Assumptions: # Estimate lwr upr #B - A == 0 -6.7112 -10.3832 -3.0392 #C - A == 0 -8.7364 -12.4302 -5.0426 #C - B == 0 -2.0252 -5.7091 1.6588
この結果から、勉強法Aと勉強法Bの間、および手法Aと手法Cの間には、試験結果に統計的に有意な差 (α = 0.05) があることがわかります (p 値: 0,000109)。 (p 値: <1e-04)。
また、手法BとCの間に統計的に有意な差がないこともわかります (α = 0.05)。手法間の信頼区間もこれらの結果を裏付けています。
したがって、クラス内での生徒の現在の成績を調整した後でも、学習テクニックAを使用すると、テクニックBおよびCと比較して統計的に有意に高い試験成績が得られると結論付けることができます。