آنالیز واریانس یا در اصطلاح آن Anova یک فرآیند آماری برای تجزیه و تحلیل مقدار واریانس است که برای بررسی اثرات عاملهای مختلف برروی یک ویژگی خاص (متغیرپاسخ هدف ما) که باید یک کمیت پیوسته و دارای شرایط خاصی باشد به کار می رود. این روش
در ابتدا توسط رونالد فیشر در سال ۱۹۲۵ برای یک مدل طرح آزمایش متعادل ابداع شد.
Anova از آنجهت میتواند در تحقیقات اهمیت داشته باشد که ابزار لازم برای مقایسه بیش از دو گروه را به طور همزمان برای تعیین اینکه اصولا تفاوت معناداری بین گروهها وجود دارد یا خیر، فراهم میکند. برای جزئیات بیشتر در مورد این روش آماری میتوانید از این لینک بازدید کنید.
Types of SS Calculation methods in Anova
انواع روشهای محاسبه مربعات تیماری
هنگامی تعداد تکرارهای مربوط به مشاهدات محقق شده، در ترکیبات تیماری مختلف یکسان نیست یا در اصطلاح صحیحتر آن، با یک طرح نامتعادل مواجه هستیم، ۴ رویکرد متفاوت برای بهدست آوردن مجموع مربعات وجود دارد. که ۳ تای آنها پرکابردتر میباشند. که با نماد
Type I
Type II
Type III
Type IV
مشخص میشوند. آن طور که مشخص هست، این نمادها از نرمافزار SAS وارد ادبیات آماری شدهاند که البته در حالحاضر خیلی پراستفاده شدهاند. نکتهای که وجود دارد، اینهست که چه زمانی باید از هر کدام از این روشها استفاده کرد که خود محل بحثهای زیادی در ادبیات آماری بوده هست. ولی در حالت کلی برمیگردد به اینکه ما چه فرضیات ابتدایی در مورد دادهها داریم و هدف ما بررسی چه چیزهایی هست.
مدلی را در نظر بگیرید که شامل دو عامل A و B باشد. بنابراین دو اثر اصلی و یک اثر توأم AB در مدل تحلیل شما میتواند وجود داشته باشد. مدل کامل را با این نماد نشان میدهیم SS(A, B, AB) .
مدلهای دیگری که برای این مثال فرضی ما میتوانند وجود داشته باشند عبارتند از؛ SS(A, B) مدلی که اثر توأم را در خود قرار نداده هست و یا مدلی که اثر اصلی عامل A را در نظر نمیگیرد که با نماد SS(B, AB) نشان داده میشود و ...
یک روش برای اینکه بتوان تأثیر و یا معنادار بودن تأثیر، اثرات اصلی یا توأم را بررسی کرد، مقایسه مدلهای حامل این اثرات و مدلهایی که این اثرات را در بر ندارند میباشد. مثلا در مثال ما اگر بخواهیم اثر AB را بررسی کنیم میتوانیم مدلهای SS(A, B), SS(A, B, AB) را با هم مقایسه کنیم.
اگر بخواهیم تأثیر عاملهای در حضور بقیه عوامل بسنجیم و یا افزایش مربعات را با اضافه کردن یک اثر در حضور بقیه اثرات بسنجیم میتوانیم به شکل زیر آن را بیان کنیم؛
SS(AB| A, B) =SS(A, B, AB) -SS(A, B)SS(A | B, AB) =SS(A, B, AB) – SS(B, AB)SS(B | A, AB) =SS(A, B, AB) – SS(A, AB)SS(A | B) =SS(A, B) – SS(B)SS(B | A) =SS(A, B) – SS(A)
در نمادهای بالا، منظور از فرضا SS(AB|A, B) اشاره دارد به افزایشی که در مجموع مربعات تیماری حادث میشود وقتی در حضور اثرات اصلی A و B اثر توأم این دو را نیز اضافه کنیم و یا مثلا منظور از SS(B|A) اشاره دارد بهاینکه میزان افزایش در مربعات تیماری وقتی اثر اصلی A حضور دارد و ما اثر B را اضافه کنیم.
در اینجاست که اصولا انواع مختلف محاسبه مجموع مربعات شکل میگیرد. یا به شکل شفافتر نحوه تعریف اثرات هست که که باعث شکلگیری این تفاوتها میشود.
Type I
مجموع مربعات نوع ۱
در این شیوه، تعریف اثرات برای مثال فرضی که گفتیم به این شکل هست؛
SS(A): برای عامل A
SS(B | A): برای عامل B
SS(AB | B, A): برای اثر توأم AB
عبارات بالا، این مفهوم را دارد که ابتدا اثر اصلی عامل A سپس اثر اصلی عامل B و در انتها اثر متقابل AB مورد بررسی قرار میگیرند.
به دلیل ماهیت سلسله مراتبی و این واقعیت که دو عامل اصلی به ترتیب خاصی مورد آزمایش قرار میگیرند. این نوع مجموع مربعات وابسته به اینکه کدام اثر اصلی ابتدا در نظر گرفته شود. نتایج متفاوتی برای دادههای نامتعادل به همراه خواهد داشت.
برای دادهها نامتعادل این رویکرد تفاوت در میانگین وزنهای اثرات حاشیهای را مورد آزمایش قرار میدهد. از نظر عملی، این بدانمعناست که نتایج به اندازه نمونههای محقق شده بستگی پیدا می کند، بهعبارت دیگر اولین عامل را بدون کنترل عامل دیگر آزمایش میکند. برای جزئیات بیشتر میتوانید به [1] مراجعه کنید.
این شیوه اصولا برای طرحهای نامتعادل پیشنهاد نمی شود.
مثال:
من برای مثالهای که در این صفحه میخواهم بیاورم. از دو مجموعه داده استفاده کردهام، یکی برای طرح متعادل هست و یکی برای بهاصطلاح طرح نامتعادل. دادهها شبیهسازی شده میباشد. کد وخروجی دادهها در ادامه خواهید دید.
البته با ذکر ایننکته که خروجی به منظور نمایش دادهها و همچنین نشان دادن متعادل بودن یا نامتعادل بودن دادههای طرح میباشد.
show the code
## loading require packageset.seed(1)library(tidyverse)library(AlgDesign)library(splitstackshape)library(kableExtra)## To create a design with 3 factors and a specified number of levelsDesign_factorial <-gen.factorial(levels =c(4, 3, 5), nVars =3, varNames =c("Fac1", "Fac2", "Fac3"), center =FALSE)Anova_data <- purrr ::map_dfr(seq_len(4), ~Design_factorial)y <- Anova_data %>%apply(., MARGIN =1, function(x) prod(x)) %>% unlist %>%rnorm(n =240, mean = ., sd =1) %>%round(2)## To simulate data for a balanced designanova_data_Balanced <- Anova_data %>%mutate(across(starts_with("Fac"), ~as.factor(.x))) %>%mutate(Fac1 =fct_recode(Fac1, A ="1", B ="2", C ="3", D ="4"), Fac2 =fct_recode(Fac2, Level_1 ="1", Level_2 ="2", Level_3 ="3"), Fac3 =fct_recode(Fac3, Timar_1 ="1", Timar_2 ="2", Timar_3 ="3", Timar_4 ="4", Timar_5 ="5")) %>%mutate(y = y) %>%relocate(y, .before = Fac1)## To simulate data for a Unbalanced designset.seed(1)Count <-sample(c(2, 3, 4, 5, 6, 7), size =60, replace =TRUE)library(data.table)dat <-as.data.table(Design_factorial)Anova_data_unbalanced <- dat %>%expandRows(count =get("Count"), count.is.col =FALSE, drop =TRUE)set.seed(1)y_unbalanced <- Anova_data_unbalanced %>%apply(., MARGIN =1, function(x) prod(x)) %>% unlist %>%rnorm(n =269, mean = ., sd =1) %>%round(2)Anova_data_unbalanced <- Anova_data_unbalanced %>%mutate(across(starts_with("Fac"), ~as.factor(.x))) %>%mutate(Fac1 =fct_recode(Fac1, A ="1", B ="2", C ="3", D ="4"), Fac2 =fct_recode(Fac2, Level_1 ="1", Level_2 ="2", Level_3 ="3"), Fac3 =fct_recode(Fac3, Timar_1 ="1", Timar_2 ="2", Timar_3 ="3", Timar_4 ="4", Timar_5 ="5")) %>%mutate(y = y_unbalanced) %>%relocate(y, .before = Fac1)## To prove that the data is balancedanova_data_Balanced %>%mutate(Interaction =interaction(Fac1, Fac2, Fac3)) %>%count(., Interaction) %>%kbl(caption ="To prove that the data is balanced") %>%kable_paper("hover", full_width = F) %>%scroll_box(width ="500px", height ="200px")
## To prove that the data is unbalancedAnova_data_unbalanced %>%mutate(Interaction =interaction(Fac1, Fac2, Fac3)) %>%count(., Interaction) %>%kbl(caption ="To prove that the data is unbalanced") %>%kable_paper("hover", full_width = F) %>%scroll_box(width ="500px", height ="200px")
برای پیادهسازی یک مدل آنالیز واریانس از نوع اول و یا انواع دیگر آن میتوانیم از اکثر نرمافزارهای آماری از قبیل SPSS, SAS, STATA, MINITAB, R, ... استفاده کنیم البته تابع aov که جزء توابع پایه در R برای پیادهسازی یک تحلیل آنالیز واریانس هست، بهصورت پیش فرض از نوع ۱ برای مجموع مربعات استفاده میکند ولی با استفاده از تابع Anova درون بسته car میتوانیم به انواع دیگر روشهای مجموع مربعات دسترسی داشته باشیم. البته در پایتون این امر با سهولت بیشتری انجام میشود. به کدهای پایین توجه کنید؛
show the code: create connection between R and python
library(reticulate)pathh <-Sys.which("python") |>gsub("\\", "//", x = _, fixed =TRUE)use_python(pathh)
show the code: R Anova Type I
## Type 1 Anova for Balanced Design Model_R_Balanced_data <-aov(y ~ Fac1 * Fac2 * Fac3, data = anova_data_Balanced)## get Anova type 1 with R for Balanced datatab_R_b1 <-anova(Model_R_Balanced_data)## Type 1 Anova for Unbalanced DesignModel_R_Unbalanced_data <-aov(y ~ Fac1 * Fac2 * Fac3, data = Anova_data_unbalanced)## get Anova type 1 with R for UnBalanced datatab_R_un1 <-anova(Model_R_Unbalanced_data)## set R for type IIIoptions(contrasts =c("contr.sum", "contr.sum"))Model_R_Balanced_data_type3 <-aov(y ~ Fac1 * Fac2 * Fac3, data = anova_data_Balanced)Model_R_Unbalanced_data_type3 <-aov(y ~ Fac1 * Fac2 * Fac3, data = Anova_data_unbalanced)
show the code: python Anova Type I
import pandas as pdimport numpy as npimport statsmodels.api as smfrom statsmodels.formula.api import olspy_Balanced_data = r.anova_data_Balanced.copy()py_Unbalanced_data = r.Anova_data_unbalanced.copy()# py_Balanced_data.head()# py_Unbalanced_data.tail()## python type I and II anova for Balanced dataModel_py_Balanced_data_type1 = ols('y ~ C(Fac1)*C(Fac2)*C(Fac3)', data = py_Balanced_data).fit()tab_py_b1 = sm.stats.anova_lm(Model_py_Balanced_data_type1, typ ="I")# print(tab_py_b1)## python type I and II anova for Unbalanced dataModel_py_Unbalanced_data_type1 = ols('y ~ C(Fac1)*C(Fac2)*C(Fac3)', data = py_Unbalanced_data).fit()tab_py_un1 = sm.stats.anova_lm(Model_py_Unbalanced_data_type1, typ ="I")# print(tab_py_un1)
نتایج را در آخر این صفحه مورد بررسی قرار خواهیم داد.
Type II
مجموع مربعات نوع ۲
برای محاسبه مجموع مربعات نوع ۲، ما اثرها را براساس فرم زیر برآورد میکنیم.
SS(A|B):for factor ASS(B|A):for factor B
به عبارت دیگر، ابتدا باید اثر توأم را براساس SS(AB|A, B) معناداری آن بررسی شود. در صورتی که اثر توأمی معنادار گزارش نشد، به تحلیل اثرات اصلی براساس روش مربعات نوع ۲ بپردازیم.
اگر در واقعیت هیچ اثر توأم معناداری وجود نداشته باشد، آنگاه نوع ۲ از نظر آماری قدرتمندتر از نوع ۳ میباشد. برای جزئیات بیشتر درباره روش نوع ۲ میتوانید به [2] مراجعه کنید.
از نظر محاسباتی، این روش معادل روش نوع ۱ هست، البته براساس ترتیبهای مختلف ورود عاملها به مدل و انتخاب مناسبتترین خروجی.
برای پیادهسازی این روش در R باید علاوه برپیادهسازی مدل چه با استفاده از تابع aov و چه با استفاده از تابع lm از تابع car :: Anova استفاده کنیم. در پایتون نیز این رویکرد به سادگی قابل پیادهسازی هست که در پایین میبینیم.
مثال:
show the code: R Anova Type II
## R version## Type II Anova for Balanced Design tab_R_b2 <- car ::Anova(Model_R_Balanced_data, type ="II")## Type II Anova for Unbalanced Designtab_R_un2 <- car ::Anova(Model_R_Unbalanced_data, type ="II")
show the code: python Anova Type II
## python type II anova for Balanced datatab_py_b2 = sm.stats.anova_lm(Model_py_Balanced_data_type1, typ ="II")# print(tab_py_b2)## python type II anova for Unbalanced datatab_py_un2 = sm.stats.anova_lm(Model_py_Unbalanced_data_type1, typ ="II")# print(tab_py_un2)
در آخر این صفحه یک مقایسه اجمالی جدوال خروجی را ارائه خواهم کرد.
Type III
مجموع مربعات نوع ۳
برای درک روش نوع ۳، باید روشی که برای برآورد مربعات اثرات اصلی به کار میبرد را بفهمیم. این روش از قاعده زیر برای مربعات اثرات اصلی استفاده میکند.
SS(A | B, AB) for factor A. SS(B | A, AB) for factor B.
در حقیقت این روش، یک اثر اصلی را بعد از اثرات اصلی دیگر و همچنین اثرات توأم مورد بررسی قرار میدهد. بنابراین این رویکرد در حضور وجود اثرات توأم میتوان مناسبترین رویکرد برای به دست آوردن مربعات تیماری باشد.
بااینحال در صورت وجود اثرات توأم، تفسیر اثر اصلی اصولا امر راحتی نیست. و یا با بیان بهتر؛ وقتی اثر توأمی در مدل حضور دارد اصولا تفسیر اثرات اصلی به تنهایی نمیتواند رویکرد خیلی قابل دفاعی باشد. برای جزئیات بیشتر میتوانید به [3] مراجعه کنید. وقتی اثر توأم در مدل حضور ندارد، روش نوع ۲، روش قدرتمندتری میباشد.
مثال:
show the code: R Anova Type III
## R version## Type III Anova for Balanced Design tab_R_b3 <- car ::Anova(Model_R_Balanced_data_type3, type ="III")## Type III Anova for Unbalanced Designtab_R_un3 <- car ::Anova(Model_R_Unbalanced_data_type3, type ="III")
show the code: python Anova Type III
from patsy.contrasts import Sum## python type III anova for Balanced dataModel_py_Balanced_data_type3 = ols('y ~ C(Fac1, Sum)*C(Fac2, Sum)*C(Fac3, Sum)', data = py_Balanced_data).fit()tab_py_b3 = sm.stats.anova_lm(Model_py_Balanced_data_type3, typ ="III")# print(tab_py_b3)## python type III anova for Unbalanced dataModel_py_Unbalanced_data_type3 = ols('y ~ C(Fac1, Sum)*C(Fac2, Sum)*C(Fac3, Sum)', data = py_Unbalanced_data).fit()tab_py_un3 = sm.stats.anova_lm(Model_py_Unbalanced_data_type3, typ ="III")# print(tab_py_un3)
Type IV
مجموع مربعات نوع ۴
رویکرد مربعات نوع ۴، برای زمانهایی هست که در بعضی از سلولها یا ترکیبات تیماری ما اصولا هیچ مشاهدهای نداریم. این روش به روش Radical نیز معروف هست. و برآوردهای به دست آمده در این روش اصولا منحصر به فرد نیستند. برای جزئیات بیشتر در مورد این روش میتوانید به [4] مراجعه کنید.
در صورت عدم وجود سلول خالی، نتایج این روش و رویکرد نوع ۳ تفاوتی ندارد.
Compare Results
بررسی نتایج
در این قسمت میخواهیم نتایج روشهای ۱ و ۲ و ۳ را با هم مقایسه کنیم. برای این منظور من جداول آنالیز واریانس خروجی در کدهایی که در بالا قرار دادم را در پایین میآوریم.
جداول نتایج برای طرح متعادل
R: Anova Type I
Df
Sum Sq
Mean Sq
F value
Pr(>F)
Fac1
3
10890.7850
3630.2616604
3816.15115
0
Fac2
2
9152.8378
4576.4189129
4810.75689
0
Fac3
4
12103.3691
3025.8422715
3180.78215
0
Fac1:Fac2
6
1805.8769
300.9794779
316.39129
0
Fac1:Fac3
12
2443.4062
203.6171823
214.04351
0
Fac2:Fac3
8
2030.2942
253.7867780
266.78207
0
Fac1:Fac2:Fac3
24
454.9202
18.9550097
19.92561
0
Residuals
180
171.2320
0.9512887
NA
NA
Note:
Balanced Desgin
Python: Anova Type I
df
sum_sq
mean_sq
F
PR(>F)
C(Fac1)
3
10890.7850
3630.2616604
3816.15115
0
C(Fac2)
2
9152.8378
4576.4189129
4810.75689
0
C(Fac3)
4
12103.3691
3025.8422715
3180.78215
0
C(Fac1):C(Fac2)
6
1805.8769
300.9794779
316.39129
0
C(Fac1):C(Fac3)
12
2443.4062
203.6171823
214.04351
0
C(Fac2):C(Fac3)
8
2030.2942
253.7867780
266.78207
0
C(Fac1):C(Fac2):C(Fac3)
24
454.9202
18.9550097
19.92561
0
Residual
180
171.2320
0.9512887
NaN
NaN
Note:
Balanced Desgin
R: Anova Type II
Sum Sq
Df
F value
Pr(>F)
Fac1
10890.7850
3
3816.15115
0
Fac2
9152.8378
2
4810.75689
0
Fac3
12103.3691
4
3180.78215
0
Fac1:Fac2
1805.8769
6
316.39129
0
Fac1:Fac3
2443.4062
12
214.04351
0
Fac2:Fac3
2030.2942
8
266.78207
0
Fac1:Fac2:Fac3
454.9202
24
19.92561
0
Residuals
171.2320
180
NA
NA
Note:
Balanced Desgin
Python: Anova Type II
sum_sq
df
F
PR(>F)
C(Fac1)
10890.7850
3
3816.15115
0
C(Fac2)
9152.8378
2
4810.75689
0
C(Fac3)
12103.3691
4
3180.78215
0
C(Fac1):C(Fac2)
1805.8769
6
316.39129
0
C(Fac1):C(Fac3)
2443.4062
12
214.04351
0
C(Fac2):C(Fac3)
2030.2942
8
266.78207
0
C(Fac1):C(Fac2):C(Fac3)
454.9202
24
19.92561
0
Residual
171.2320
180
NaN
NaN
Note:
Balanced Desgin
R: Anova Type III
Sum Sq
Df
F value
Pr(>F)
(Intercept)
54158.2157
1
56931.41617
0
Fac1
10890.7850
3
3816.15115
0
Fac2
9152.8378
2
4810.75689
0
Fac3
12103.3691
4
3180.78215
0
Fac1:Fac2
1805.8769
6
316.39129
0
Fac1:Fac3
2443.4062
12
214.04351
0
Fac2:Fac3
2030.2942
8
266.78207
0
Fac1:Fac2:Fac3
454.9202
24
19.92561
0
Residuals
171.2320
180
NA
NA
Note:
Balanced Desgin
Python: Anova Type III
sum_sq
df
F
PR(>F)
Intercept
54158.2157
1
56931.41617
0
C(Fac1, Sum)
10890.7850
3
3816.15115
0
C(Fac2, Sum)
9152.8378
2
4810.75689
0
C(Fac3, Sum)
12103.3691
4
3180.78215
0
C(Fac1, Sum):C(Fac2, Sum)
1805.8769
6
316.39129
0
C(Fac1, Sum):C(Fac3, Sum)
2443.4062
12
214.04351
0
C(Fac2, Sum):C(Fac3, Sum)
2030.2942
8
266.78207
0
C(Fac1, Sum):C(Fac2, Sum):C(Fac3, Sum)
454.9202
24
19.92561
0
Residual
171.2320
180
NaN
NaN
Note:
Balanced Desgin
جداول نتایج برای طرح نامتعادل
R: Anova Type I
Df
Sum Sq
Mean Sq
F value
Pr(>F)
Fac1
3
10153.2982
3384.4327219
3715.39978
0
Fac2
2
10463.9292
5231.9645771
5743.60362
0
Fac3
4
12940.0402
3235.0100610
3551.36493
0
Fac1:Fac2
6
1811.1773
301.8628809
331.38235
0
Fac1:Fac3
12
2570.3133
214.1927737
235.13890
0
Fac2:Fac3
8
2142.1901
267.7737678
293.95963
0
Fac1:Fac2:Fac3
24
422.8180
17.6174177
19.34024
0
Residuals
209
190.3823
0.9109202
NA
NA
Note:
Unbalanced Desgin
Python: Anova Type I
df
sum_sq
mean_sq
F
PR(>F)
C(Fac1)
3
10153.2982
3384.4327219
3715.39978
0
C(Fac2)
2
10463.9292
5231.9645771
5743.60362
0
C(Fac3)
4
12940.0402
3235.0100610
3551.36493
0
C(Fac1):C(Fac2)
6
1811.1773
301.8628809
331.38235
0
C(Fac1):C(Fac3)
12
2570.3133
214.1927737
235.13890
0
C(Fac2):C(Fac3)
8
2142.1901
267.7737678
293.95963
0
C(Fac1):C(Fac2):C(Fac3)
24
422.8180
17.6174177
19.34024
0
Residual
209
190.3823
0.9109202
NaN
NaN
Note:
Unbalanced Desgin
R: Anova Type II
Sum Sq
Df
F value
Pr(>F)
Fac1
11134.2492
3
4074.35952
0
Fac2
10046.3696
2
5514.40704
0
Fac3
13243.9531
4
3634.77313
0
Fac1:Fac2
1920.8077
6
351.44090
0
Fac1:Fac3
2531.5946
12
231.59682
0
Fac2:Fac3
2142.1901
8
293.95963
0
Fac1:Fac2:Fac3
422.8180
24
19.34024
0
Residuals
190.3823
209
NA
NA
Note:
Unbalanced Desgin
Python: Anova Type II
sum_sq
df
F
PR(>F)
C(Fac1)
11134.2492
3
4074.35952
0
C(Fac2)
10046.3696
2
5514.40704
0
C(Fac3)
13243.9531
4
3634.77313
0
C(Fac1):C(Fac2)
1920.8077
6
351.44090
0
C(Fac1):C(Fac3)
2531.5946
12
231.59682
0
C(Fac2):C(Fac3)
2142.1901
8
293.95963
0
C(Fac1):C(Fac2):C(Fac3)
422.8180
24
19.34024
0
Residual
190.3823
209
NaN
NaN
Note:
Unbalanced Desgin
R: Anova Type III
Sum Sq
Df
F value
Pr(>F)
(Intercept)
49340.9237
1
54166.02192
0
Fac1
10163.4257
3
3719.10574
0
Fac2
7974.9291
2
4377.40269
0
Fac3
10883.2526
4
2986.88419
0
Fac1:Fac2
1742.2812
6
318.77678
0
Fac1:Fac3
2182.8683
12
199.69443
0
Fac2:Fac3
1867.4754
8
256.26221
0
Fac1:Fac2:Fac3
422.8180
24
19.34024
0
Residuals
190.3823
209
NA
NA
Note:
Unbalanced Desgin
Python: Anova Type III
sum_sq
df
F
PR(>F)
Intercept
49340.9237
1
54166.02192
0
C(Fac1, Sum)
10163.4257
3
3719.10574
0
C(Fac2, Sum)
7974.9291
2
4377.40269
0
C(Fac3, Sum)
10883.2526
4
2986.88419
0
C(Fac1, Sum):C(Fac2, Sum)
1742.2812
6
318.77678
0
C(Fac1, Sum):C(Fac3, Sum)
2182.8683
12
199.69443
0
C(Fac2, Sum):C(Fac3, Sum)
1867.4754
8
256.26221
0
C(Fac1, Sum):C(Fac2, Sum):C(Fac3, Sum)
422.8180
24
19.34024
0
Residual
190.3823
209
NaN
NaN
Note:
Unbalanced Desgin
واضح هست که وقتی طرح متعادل هست، نتایج برای هر سه روش
Anova Type I, Anova Type II, Anova Type III
کاملا یکسان هست. تفاوت زمانی حاصل میشود که طرح نامتعادل هست. لازم به ذکر هست که برای پیادهسازی آنالیز واریانس نوع ۳ اگر بخواهیم شرط
لحاظ بشود، یعنی اینکه مجموع اثرات برای هر عامل برابر با صفر باشد و همچنین مجموع اثرات توأم نیز برابر با صفر باشد که البته میدانیم برای اینکه مدل شناسایی پذیر باشد و بتوان برای اثرات برآوردهای منحصربهفردی پیدا کرد، بایستی این شرط برقرار باشد. البته در اینجا برای یک مدل با دو اثر اصلی و یک اثر توأم مثال را پیادهسازی کردیم ولی در حالت کلی باید این شرایط برای تمام اثرات اصلی و همچنین اثرات توأم برقرار باشد، البته در صورتی که هدف پیادهسازی یک مدل با اثرات ثابت باشد. چون اگر اثرات تصادفی باشد قطعا شرط بالا نمیتواند برقرار باشد و اصولا روشهای برآورد کردن هم کمی متفاوتتر میشود. برای برقرار شدن شرط بالا باید وقتی در R کد مینویسیم، از دستور
options(contrasts =c("contr.sum", "contr.sum"))
استفاده کنیم و در پایتون با فراخونی متد
from patsy.contrasts import Sum
و همچنین اضافه کردن Sum به تابع C(Factor, Sum) در حین ساختن مدل، شرط ذکر شده را لحاظ کنیم. در غیر این صورت نتایج مدل متفاوت خواهد شد البته برای مدل آنالیز واریانس نوع ۳.
Conclusion
حرف آخر
حتمن این سؤال مطرح خواهد شد که با تمام این شرحی که در این صفحه ارائه شد، ما چه زمانی باید از هر کدام از انواع روشهای مجموع مربعات استفاده کنیم؛
Type I: این شیوه با لحاظ کردن ترتیب ورود عاملها به مدل از بقیه مدلها متمایز میشود، این روش برای طرحهای نامتعادل توصیه نمیشود و همچنین برای طرحهایی که تعداد عاملهای زیادی دارند هم توصیه نمیشود. ولی برای طرحهای متعادل با تعداد عاملهای پایین و همچنین مدلهای Nested-Design میتواند مناسب باشد. و همچنین برای مدلهای رگرسیون چندجملهای هم مفید هست.
Type II: درک مجموع مربعات نوع ۲ کمی دشوارتر هست نسبت به ۱ و ۳؛ ولی به طور کلی، نوع ۲ برای یک اثر مانند اثر عامل A که ممکن هست یک اثر اصلی یا حتی یک اثر توأم در نظر گرفته شود وقتی این اثر را بخواهد مثلا با اثر B بیان کند اثر A را از B جدا میکند. یعنی اثراتی که با هم اشتراک دارند باید اشتراکات آنها از هم تفکیک شود. برای همین منظور اصولا این روش زمانی توصیه می شود که ما اعتقاد داشته باشیم اثرات توأم در مدل ما حضور ندارد یا اگر وجود دارد ناچیز هست.
Type III:
باید در اینجا ذکر کنیم که مجموع مربعات نوع ۲ و همچنین نوع ۳ اصطلاحا به آنها مجموع مربعات جزئی نیز میگویند. اتفاقی که در اینجا میافتد و در ادبیات این رشته از آن استفاده میشود، محاسبه اثرات در این شیوه نیز مانند روش ۲، به اینشکل هست که هر اثر براساس اثرات دیگر تنظیم میشود. این روش در حقیقت با تجزیه تحلیل مجموع مربعات وزنی که با الگوریتم یتس پیادهسازی میشود، مطابقت دارد. یکی از کارکردهای این روش زمانی هست که محقق علیالرغم وجود اثر توأم در مدل، نیازمند بررسی اثرات اصلی باشد و بخواهد آنها را با هم مقابسه کند. (هرچند این نوع تفسیر در میان آماردانان طرفدار چندانی ندارد) واضح هست که اگر مدل فقط شامل اثرات اصلی باشد رویکرد نوع ۳ و نوع ۲ نتایج کاملا یکسانی را تولید خواهد کرد.
Type IV:
این شیوه اساسا برای موقیعتهایی طراحی شده هست که ما سلولهای خالی داریم یا اصطلاحا بعضی از ترکیبات تیماری فاقد نمونه محقق شده هستند. نتایج این روش با روش نوع ۳ زمانی که سلول خالی در طرح وجود نداشته باشد یکسان هست. و همچنین همانطور که قبال هم ذکر شد و در اینجا باز برروی آن تأکید میشود؛
وقتی طرح متعادل هست، نتایج هر ۴ روش یکسان خواهد بود.
References
منابع
[1] Zahn. Ista. “Working with unbalanced cell sizes in multiple regression with categorical predictors”, 2009. [Google Scholar]
[2] Oyvind Langsrud. “ANOVA for unbalanced data: Use Type II instead of Type III sums of squares”, Statistics and Computing, Volume 13, Number 2, pp. 163-167, 2003. [Google Scholar]
[3] Shaw, R. G., & Mitchell-Olds, T. (1993). ANOVA for unbalanced data: an overview. Ecology, 74(6), 1638-1645. [Google Scholar]