my pix

آنالیز واریانس از ابداعات رونالد فیشر هست






my pix

رونالد فیشر: تولد ۱۸۹۰، مرگ ۱۹۶۲




About Anova

درباره آنالیز واریانس

آنالیز واریانس یا در اصطلاح آن 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 package
set.seed(1)
library(tidyverse)
library(AlgDesign)
library(splitstackshape)
library(kableExtra)

## To create a design with 3 factors and a specified number of levels
Design_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 design
anova_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 design
set.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 balanced
anova_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 balanced
Interaction n
A.Level_1.Timar_1 4
B.Level_1.Timar_1 4
C.Level_1.Timar_1 4
D.Level_1.Timar_1 4
A.Level_2.Timar_1 4
B.Level_2.Timar_1 4
C.Level_2.Timar_1 4
D.Level_2.Timar_1 4
A.Level_3.Timar_1 4
B.Level_3.Timar_1 4
C.Level_3.Timar_1 4
D.Level_3.Timar_1 4
A.Level_1.Timar_2 4
B.Level_1.Timar_2 4
C.Level_1.Timar_2 4
D.Level_1.Timar_2 4
A.Level_2.Timar_2 4
B.Level_2.Timar_2 4
C.Level_2.Timar_2 4
D.Level_2.Timar_2 4
A.Level_3.Timar_2 4
B.Level_3.Timar_2 4
C.Level_3.Timar_2 4
D.Level_3.Timar_2 4
A.Level_1.Timar_3 4
B.Level_1.Timar_3 4
C.Level_1.Timar_3 4
D.Level_1.Timar_3 4
A.Level_2.Timar_3 4
B.Level_2.Timar_3 4
C.Level_2.Timar_3 4
D.Level_2.Timar_3 4
A.Level_3.Timar_3 4
B.Level_3.Timar_3 4
C.Level_3.Timar_3 4
D.Level_3.Timar_3 4
A.Level_1.Timar_4 4
B.Level_1.Timar_4 4
C.Level_1.Timar_4 4
D.Level_1.Timar_4 4
A.Level_2.Timar_4 4
B.Level_2.Timar_4 4
C.Level_2.Timar_4 4
D.Level_2.Timar_4 4
A.Level_3.Timar_4 4
B.Level_3.Timar_4 4
C.Level_3.Timar_4 4
D.Level_3.Timar_4 4
A.Level_1.Timar_5 4
B.Level_1.Timar_5 4
C.Level_1.Timar_5 4
D.Level_1.Timar_5 4
A.Level_2.Timar_5 4
B.Level_2.Timar_5 4
C.Level_2.Timar_5 4
D.Level_2.Timar_5 4
A.Level_3.Timar_5 4
B.Level_3.Timar_5 4
C.Level_3.Timar_5 4
D.Level_3.Timar_5 4
show the code
## to display balanced data
kbl(anova_data_Balanced, caption = "to display balanced data") %>%
kable_paper("hover", full_width = F) %>%
  scroll_box(width = "500px", height = "200px")
to display balanced data
y Fac1 Fac2 Fac3
0.37 A Level_1 Timar_1
2.18 B Level_1 Timar_1
2.16 C Level_1 Timar_1
5.60 D Level_1 Timar_1
2.33 A Level_2 Timar_1
3.18 B Level_2 Timar_1
6.49 C Level_2 Timar_1
8.74 D Level_2 Timar_1
3.58 A Level_3 Timar_1
5.69 B Level_3 Timar_1
10.51 C Level_3 Timar_1
12.39 D Level_3 Timar_1
1.38 A Level_1 Timar_2
1.79 B Level_1 Timar_2
7.12 C Level_1 Timar_2
7.96 D Level_1 Timar_2
3.98 A Level_2 Timar_2
8.94 B Level_2 Timar_2
12.82 C Level_2 Timar_2
16.59 D Level_2 Timar_2
6.92 A Level_3 Timar_2
12.78 B Level_3 Timar_2
18.07 C Level_3 Timar_2
22.01 D Level_3 Timar_2
3.62 A Level_1 Timar_3
5.94 B Level_1 Timar_3
8.84 C Level_1 Timar_3
10.53 D Level_1 Timar_3
5.52 A Level_2 Timar_3
12.42 B Level_2 Timar_3
19.36 C Level_2 Timar_3
23.90 D Level_2 Timar_3
9.39 A Level_3 Timar_3
17.95 B Level_3 Timar_3
25.62 C Level_3 Timar_3
35.59 D Level_3 Timar_3
3.61 A Level_1 Timar_4
7.94 B Level_1 Timar_4
13.10 C Level_1 Timar_4
16.76 D Level_1 Timar_4
7.84 A Level_2 Timar_4
15.75 B Level_2 Timar_4
24.70 C Level_2 Timar_4
32.56 D Level_2 Timar_4
11.31 A Level_3 Timar_4
23.29 B Level_3 Timar_4
36.36 C Level_3 Timar_4
48.77 D Level_3 Timar_4
4.89 A Level_1 Timar_5
10.88 B Level_1 Timar_5
15.40 C Level_1 Timar_5
19.39 D Level_1 Timar_5
10.34 A Level_2 Timar_5
18.87 B Level_2 Timar_5
31.43 C Level_2 Timar_5
41.98 D Level_2 Timar_5
14.63 A Level_3 Timar_5
28.96 B Level_3 Timar_5
45.57 C Level_3 Timar_5
59.86 D Level_3 Timar_5
3.40 A Level_1 Timar_1
1.96 B Level_1 Timar_1
3.69 C Level_1 Timar_1
4.03 D Level_1 Timar_1
1.26 A Level_2 Timar_1
4.19 B Level_2 Timar_1
4.20 C Level_2 Timar_1
9.47 D Level_2 Timar_1
3.15 A Level_3 Timar_1
8.17 B Level_3 Timar_1
9.48 C Level_3 Timar_1
11.29 D Level_3 Timar_1
2.61 A Level_1 Timar_2
3.07 B Level_1 Timar_2
4.75 C Level_1 Timar_2
8.29 D Level_1 Timar_2
3.56 A Level_2 Timar_2
8.00 B Level_2 Timar_2
12.07 C Level_2 Timar_2
15.41 D Level_2 Timar_2
5.43 A Level_3 Timar_2
11.86 B Level_3 Timar_2
19.18 C Level_3 Timar_2
22.48 D Level_3 Timar_2
3.59 A Level_1 Timar_3
6.33 B Level_1 Timar_3
10.06 C Level_1 Timar_3
11.70 D Level_1 Timar_3
6.37 A Level_2 Timar_3
12.27 B Level_2 Timar_3
17.46 C Level_2 Timar_3
25.21 D Level_2 Timar_3
10.16 A Level_3 Timar_3
18.70 B Level_3 Timar_3
28.59 C Level_3 Timar_3
36.56 D Level_3 Timar_3
2.72 A Level_1 Timar_4
7.43 B Level_1 Timar_4
10.78 C Level_1 Timar_4
15.53 D Level_1 Timar_4
7.38 A Level_2 Timar_4
16.04 B Level_2 Timar_4
23.09 C Level_2 Timar_4
32.16 D Level_2 Timar_4
11.35 A Level_3 Timar_4
25.77 B Level_3 Timar_4
36.72 C Level_3 Timar_4
48.91 D Level_3 Timar_4
5.38 A Level_1 Timar_5
11.68 B Level_1 Timar_5
14.36 C Level_1 Timar_5
19.54 D Level_1 Timar_5
11.43 A Level_2 Timar_5
19.35 B Level_2 Timar_5
29.79 C Level_2 Timar_5
39.61 D Level_2 Timar_5
14.68 A Level_3 Timar_5
29.72 B Level_3 Timar_5
45.49 C Level_3 Timar_5
59.82 D Level_3 Timar_5
0.49 A Level_1 Timar_1
3.34 B Level_1 Timar_1
2.79 C Level_1 Timar_1
3.82 D Level_1 Timar_1
1.90 A Level_2 Timar_1
4.71 B Level_2 Timar_1
5.93 C Level_2 Timar_1
7.96 D Level_2 Timar_1
2.32 A Level_3 Timar_1
5.68 B Level_3 Timar_1
9.06 C Level_3 Timar_1
11.41 D Level_3 Timar_1
2.53 A Level_1 Timar_2
2.48 B Level_1 Timar_2
6.31 C Level_1 Timar_2
6.46 D Level_1 Timar_2
3.70 A Level_2 Timar_2
7.47 B Level_2 Timar_2
11.35 C Level_2 Timar_2
15.94 D Level_2 Timar_2
4.09 A Level_3 Timar_2
13.18 B Level_3 Timar_2
16.34 C Level_3 Timar_2
23.54 D Level_3 Timar_2
1.88 A Level_1 Timar_3
5.25 B Level_1 Timar_3
11.09 C Level_1 Timar_3
12.02 D Level_1 Timar_3
4.71 A Level_2 Timar_3
10.36 B Level_2 Timar_3
18.45 C Level_2 Timar_3
23.98 D Level_2 Timar_3
8.68 A Level_3 Timar_3
17.07 B Level_3 Timar_3
25.51 C Level_3 Timar_3
34.92 D Level_3 Timar_3
5.00 A Level_1 Timar_4
7.38 B Level_1 Timar_4
10.62 C Level_1 Timar_4
17.87 D Level_1 Timar_4
8.43 A Level_2 Timar_4
15.76 B Level_2 Timar_4
25.06 C Level_2 Timar_4
32.89 D Level_2 Timar_4
11.38 A Level_3 Timar_4
26.21 B Level_3 Timar_4
35.74 C Level_3 Timar_4
46.58 D Level_3 Timar_4
4.86 A Level_1 Timar_5
10.21 B Level_1 Timar_5
17.31 C Level_1 Timar_5
20.11 D Level_1 Timar_5
10.46 A Level_2 Timar_5
19.92 B Level_2 Timar_5
29.67 C Level_2 Timar_5
39.97 D Level_2 Timar_5
15.79 A Level_3 Timar_5
32.08 B Level_3 Timar_5
46.03 C Level_3 Timar_5
61.21 D Level_3 Timar_5
-0.23 A Level_1 Timar_1
2.98 B Level_1 Timar_1
3.22 C Level_1 Timar_1
2.53 D Level_1 Timar_1
2.52 A Level_2 Timar_1
3.84 B Level_2 Timar_1
7.46 C Level_2 Timar_1
7.23 D Level_2 Timar_1
2.57 A Level_3 Timar_1
5.07 B Level_3 Timar_1
8.82 C Level_3 Timar_1
12.40 D Level_3 Timar_1
1.27 A Level_1 Timar_2
4.83 B Level_1 Timar_2
4.79 C Level_1 Timar_2
6.95 D Level_1 Timar_2
5.44 A Level_2 Timar_2
6.98 B Level_2 Timar_2
12.41 C Level_2 Timar_2
15.62 D Level_2 Timar_2
6.41 A Level_3 Timar_2
13.69 B Level_3 Timar_2
19.59 C Level_3 Timar_2
23.67 D Level_3 Timar_2
0.71 A Level_1 Timar_3
8.50 B Level_1 Timar_3
9.67 C Level_1 Timar_3
12.54 D Level_1 Timar_3
5.99 A Level_2 Timar_3
12.51 B Level_2 Timar_3
17.84 C Level_2 Timar_3
24.42 D Level_2 Timar_3
8.60 A Level_3 Timar_3
16.63 B Level_3 Timar_3
27.99 C Level_3 Timar_3
37.52 D Level_3 Timar_3
3.69 A Level_1 Timar_4
6.75 B Level_1 Timar_4
12.64 C Level_1 Timar_4
15.96 D Level_1 Timar_4
6.27 A Level_2 Timar_4
16.00 B Level_2 Timar_4
23.37 C Level_2 Timar_4
31.66 D Level_2 Timar_4
10.84 A Level_3 Timar_4
25.80 B Level_3 Timar_4
35.67 C Level_3 Timar_4
46.39 D Level_3 Timar_4
5.20 A Level_1 Timar_5
10.26 B Level_1 Timar_5
14.01 C Level_1 Timar_5
17.11 D Level_1 Timar_5
9.36 A Level_2 Timar_5
20.57 B Level_2 Timar_5
29.94 C Level_2 Timar_5
39.90 D Level_2 Timar_5
15.56 A Level_3 Timar_5
28.81 B Level_3 Timar_5
46.10 C Level_3 Timar_5
59.99 D Level_3 Timar_5
show the code
## To prove that the data is unbalanced
Anova_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")
To prove that the data is unbalanced
Interaction n
A.Level_1.Timar_1 2
B.Level_1.Timar_1 5
C.Level_1.Timar_1 2
D.Level_1.Timar_1 3
A.Level_2.Timar_1 6
B.Level_2.Timar_1 4
C.Level_2.Timar_1 7
D.Level_2.Timar_1 3
A.Level_3.Timar_1 4
B.Level_3.Timar_1 4
C.Level_3.Timar_1 2
D.Level_3.Timar_1 6
A.Level_1.Timar_2 6
B.Level_1.Timar_2 3
C.Level_1.Timar_2 7
D.Level_1.Timar_2 7
A.Level_2.Timar_2 3
B.Level_2.Timar_2 2
C.Level_2.Timar_2 6
D.Level_2.Timar_2 6
A.Level_3.Timar_2 2
B.Level_3.Timar_2 2
C.Level_3.Timar_2 7
D.Level_3.Timar_2 6
A.Level_1.Timar_3 6
B.Level_1.Timar_3 3
C.Level_1.Timar_3 3
D.Level_1.Timar_3 7
A.Level_2.Timar_3 2
B.Level_2.Timar_3 5
C.Level_2.Timar_3 2
D.Level_2.Timar_3 5
A.Level_3.Timar_3 4
B.Level_3.Timar_3 7
C.Level_3.Timar_3 3
D.Level_3.Timar_3 3
A.Level_1.Timar_4 7
B.Level_1.Timar_4 5
C.Level_1.Timar_4 5
D.Level_1.Timar_4 5
A.Level_2.Timar_4 3
B.Level_2.Timar_4 5
C.Level_2.Timar_4 2
D.Level_2.Timar_4 7
A.Level_3.Timar_4 2
B.Level_3.Timar_4 5
C.Level_3.Timar_4 2
D.Level_3.Timar_4 7
A.Level_1.Timar_5 3
B.Level_1.Timar_5 4
C.Level_1.Timar_5 3
D.Level_1.Timar_5 7
A.Level_2.Timar_5 7
B.Level_2.Timar_5 3
C.Level_2.Timar_5 6
D.Level_2.Timar_5 3
A.Level_3.Timar_5 7
B.Level_3.Timar_5 7
C.Level_3.Timar_5 7
D.Level_3.Timar_5 2
show the code
## To display unbalanced data
kbl(Anova_data_unbalanced, caption = "To display unbalanced data") %>%
kable_paper("hover", full_width = F) %>%
  scroll_box(width = "500px", height = "200px")
To display unbalanced data
y Fac1 Fac2 Fac3
0.37 A Level_1 Timar_1
1.18 A Level_1 Timar_1
1.16 B Level_1 Timar_1
3.60 B Level_1 Timar_1
2.33 B Level_1 Timar_1
1.18 B Level_1 Timar_1
2.49 B Level_1 Timar_1
3.74 C Level_1 Timar_1
3.58 C Level_1 Timar_1
3.69 D Level_1 Timar_1
5.51 D Level_1 Timar_1
4.39 D Level_1 Timar_1
1.38 A Level_2 Timar_1
-0.21 A Level_2 Timar_1
3.12 A Level_2 Timar_1
1.96 A Level_2 Timar_1
1.98 A Level_2 Timar_1
2.94 A Level_2 Timar_1
4.82 B Level_2 Timar_1
4.59 B Level_2 Timar_1
4.92 B Level_2 Timar_1
4.78 B Level_2 Timar_1
6.07 C Level_2 Timar_1
4.01 C Level_2 Timar_1
6.62 C Level_2 Timar_1
5.94 C Level_2 Timar_1
5.84 C Level_2 Timar_1
4.53 C Level_2 Timar_1
5.52 C Level_2 Timar_1
8.42 D Level_2 Timar_1
9.36 D Level_2 Timar_1
7.90 D Level_2 Timar_1
3.39 A Level_3 Timar_1
2.95 A Level_3 Timar_1
1.62 A Level_3 Timar_1
2.59 A Level_3 Timar_1
5.61 B Level_3 Timar_1
5.94 B Level_3 Timar_1
7.10 B Level_3 Timar_1
6.76 B Level_3 Timar_1
8.84 C Level_3 Timar_1
8.75 C Level_3 Timar_1
12.70 D Level_3 Timar_1
12.56 D Level_3 Timar_1
11.31 D Level_3 Timar_1
11.29 D Level_3 Timar_1
12.36 D Level_3 Timar_1
12.77 D Level_3 Timar_1
1.89 A Level_1 Timar_2
2.88 A Level_1 Timar_2
2.40 A Level_1 Timar_2
1.39 A Level_1 Timar_2
2.34 A Level_1 Timar_2
0.87 A Level_1 Timar_2
5.43 B Level_1 Timar_2
5.98 B Level_1 Timar_2
3.63 B Level_1 Timar_2
4.96 C Level_1 Timar_2
6.57 C Level_1 Timar_2
5.86 C Level_1 Timar_2
8.40 C Level_1 Timar_2
5.96 C Level_1 Timar_2
6.69 C Level_1 Timar_2
6.03 C Level_1 Timar_2
7.26 D Level_1 Timar_2
8.19 D Level_1 Timar_2
6.20 D Level_1 Timar_2
9.47 D Level_1 Timar_2
8.15 D Level_1 Timar_2
10.17 D Level_1 Timar_2
8.48 D Level_1 Timar_2
3.29 A Level_2 Timar_2
4.61 A Level_2 Timar_2
3.07 A Level_2 Timar_2
6.75 B Level_2 Timar_2
8.29 B Level_2 Timar_2
11.56 C Level_2 Timar_2
12.00 C Level_2 Timar_2
12.07 C Level_2 Timar_2
11.41 C Level_2 Timar_2
11.43 C Level_2 Timar_2
11.86 C Level_2 Timar_2
17.18 D Level_2 Timar_2
14.48 D Level_2 Timar_2
16.59 D Level_2 Timar_2
16.33 D Level_2 Timar_2
17.06 D Level_2 Timar_2
15.70 D Level_2 Timar_2
6.37 A Level_3 Timar_2
6.27 A Level_3 Timar_2
11.46 B Level_3 Timar_2
13.21 B Level_3 Timar_2
19.16 C Level_3 Timar_2
18.70 C Level_3 Timar_2
19.59 C Level_3 Timar_2
18.56 C Level_3 Timar_2
16.72 C Level_3 Timar_2
17.43 C Level_3 Timar_2
16.78 C Level_3 Timar_2
23.53 D Level_3 Timar_2
23.38 D Level_3 Timar_2
24.04 D Level_3 Timar_2
23.09 D Level_3 Timar_2
24.16 D Level_3 Timar_2
23.35 D Level_3 Timar_2
4.77 A Level_1 Timar_3
3.72 A Level_1 Timar_3
3.91 A Level_1 Timar_3
3.38 A Level_1 Timar_3
4.68 A Level_1 Timar_3
2.36 A Level_1 Timar_3
5.54 B Level_1 Timar_3
7.43 B Level_1 Timar_3
5.35 B Level_1 Timar_3
8.79 C Level_1 Timar_3
8.61 C Level_1 Timar_3
8.68 C Level_1 Timar_3
11.72 D Level_1 Timar_3
12.49 D Level_1 Timar_3
11.82 D Level_1 Timar_3
11.49 D Level_1 Timar_3
13.34 D Level_1 Timar_3
11.79 D Level_1 Timar_3
11.82 D Level_1 Timar_3
5.90 A Level_2 Timar_3
6.71 A Level_2 Timar_3
11.93 B Level_2 Timar_3
11.96 B Level_2 Timar_3
11.32 B Level_2 Timar_3
11.68 B Level_2 Timar_3
12.06 B Level_2 Timar_3
17.41 C Level_2 Timar_3
18.53 C Level_2 Timar_3
22.48 D Level_2 Timar_3
24.31 D Level_2 Timar_3
22.46 D Level_2 Timar_3
23.70 D Level_2 Timar_3
23.47 D Level_2 Timar_3
8.35 A Level_3 Timar_3
8.94 A Level_3 Timar_3
7.09 A Level_3 Timar_3
10.18 A Level_3 Timar_3
16.34 B Level_3 Timar_3
17.54 B Level_3 Timar_3
16.88 B Level_3 Timar_3
17.25 B Level_3 Timar_3
20.09 B Level_3 Timar_3
18.02 B Level_3 Timar_3
16.71 B Level_3 Timar_3
25.36 C Level_3 Timar_3
27.45 C Level_3 Timar_3
26.98 C Level_3 Timar_3
35.68 D Level_3 Timar_3
35.07 D Level_3 Timar_3
34.51 D Level_3 Timar_3
2.92 A Level_1 Timar_4
5.00 A Level_1 Timar_4
3.38 A Level_1 Timar_4
2.62 A Level_1 Timar_4
5.87 A Level_1 Timar_4
4.43 A Level_1 Timar_4
3.76 A Level_1 Timar_4
9.06 B Level_1 Timar_4
8.89 B Level_1 Timar_4
7.38 B Level_1 Timar_4
10.21 B Level_1 Timar_4
7.74 B Level_1 Timar_4
10.58 C Level_1 Timar_4
11.86 C Level_1 Timar_4
12.21 C Level_1 Timar_4
14.31 C Level_1 Timar_4
12.11 C Level_1 Timar_4
16.46 D Level_1 Timar_4
15.92 D Level_1 Timar_4
15.67 D Level_1 Timar_4
15.97 D Level_1 Timar_4
16.79 D Level_1 Timar_4
10.08 A Level_2 Timar_4
9.03 A Level_2 Timar_4
9.21 A Level_2 Timar_4
14.77 B Level_2 Timar_4
16.98 B Level_2 Timar_4
16.22 B Level_2 Timar_4
14.53 B Level_2 Timar_4
16.52 B Level_2 Timar_4
23.84 C Level_2 Timar_4
25.46 C Level_2 Timar_4
31.23 D Level_2 Timar_4
31.57 D Level_2 Timar_4
31.07 D Level_2 Timar_4
31.82 D Level_2 Timar_4
32.40 D Level_2 Timar_4
31.27 D Level_2 Timar_4
32.83 D Level_2 Timar_4
10.79 A Level_3 Timar_4
10.95 A Level_3 Timar_4
25.44 B Level_3 Timar_4
22.98 B Level_3 Timar_4
24.41 B Level_3 Timar_4
23.62 B Level_3 Timar_4
24.41 B Level_3 Timar_4
37.69 C Level_3 Timar_4
37.59 C Level_3 Timar_4
47.67 D Level_3 Timar_4
45.71 D Level_3 Timar_4
50.50 D Level_3 Timar_4
48.67 D Level_3 Timar_4
48.54 D Level_3 Timar_4
47.99 D Level_3 Timar_4
48.51 D Level_3 Timar_4
4.84 A Level_1 Timar_5
5.42 A Level_1 Timar_5
4.60 A Level_1 Timar_5
8.63 B Level_1 Timar_5
10.99 B Level_1 Timar_5
11.52 B Level_1 Timar_5
9.69 B Level_1 Timar_5
13.75 C Level_1 Timar_5
15.64 C Level_1 Timar_5
14.96 C Level_1 Timar_5
18.27 D Level_1 Timar_5
20.00 D Level_1 Timar_5
19.37 D Level_1 Timar_5
19.66 D Level_1 Timar_5
18.84 D Level_1 Timar_5
21.80 D Level_1 Timar_5
19.67 D Level_1 Timar_5
8.39 A Level_2 Timar_5
10.20 A Level_2 Timar_5
10.26 A Level_2 Timar_5
9.01 A Level_2 Timar_5
7.11 A Level_2 Timar_5
9.36 A Level_2 Timar_5
10.57 A Level_2 Timar_5
19.94 B Level_2 Timar_5
19.90 B Level_2 Timar_5
20.56 B Level_2 Timar_5
28.81 C Level_2 Timar_5
31.10 C Level_2 Timar_5
29.99 C Level_2 Timar_5
30.71 C Level_2 Timar_5
31.03 C Level_2 Timar_5
30.22 C Level_2 Timar_5
39.12 D Level_2 Timar_5
41.16 D Level_2 Timar_5
38.00 D Level_2 Timar_5
14.46 A Level_3 Timar_5
14.74 A Level_3 Timar_5
14.83 A Level_3 Timar_5
16.02 A Level_3 Timar_5
15.14 A Level_3 Timar_5
15.41 A Level_3 Timar_5
14.93 A Level_3 Timar_5
29.75 B Level_3 Timar_5
30.70 B Level_3 Timar_5
31.15 B Level_3 Timar_5
27.60 B Level_3 Timar_5
30.57 B Level_3 Timar_5
30.37 B Level_3 Timar_5
29.57 B Level_3 Timar_5
45.95 C Level_3 Timar_5
44.61 C Level_3 Timar_5
44.72 C Level_3 Timar_5
45.86 C Level_3 Timar_5
46.72 C Level_3 Timar_5
45.27 C Level_3 Timar_5
44.58 C Level_3 Timar_5
58.81 D Level_3 Timar_5
59.67 D Level_3 Timar_5



برای پیاده‌سازی یک مدل آنالیز واریانس از نوع اول و یا انواع دیگر آن می‌توانیم از اکثر نرم‌افزارهای آماری از قبیل 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 data
tab_R_b1 <- anova(Model_R_Balanced_data)

## Type 1 Anova for Unbalanced Design
Model_R_Unbalanced_data <- aov(y ~ Fac1 * Fac2 * Fac3, data = Anova_data_unbalanced)

## get Anova type 1 with R for UnBalanced data
tab_R_un1 <- anova(Model_R_Unbalanced_data)

## set R for type III

options(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 pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols


py_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 data
Model_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 data

Model_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 A
SS(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 Design
tab_R_un2 <- car :: Anova(Model_R_Unbalanced_data, type = "II")
show the code: python Anova Type II

## python type II anova for Balanced data

tab_py_b2 = sm.stats.anova_lm(Model_py_Balanced_data_type1, typ = "II")
# print(tab_py_b2)

## python type II anova for Unbalanced data
tab_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 Design
tab_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 data
Model_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 data

Model_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
کاملا یکسان هست. تفاوت‌ زمانی حاصل می‌شود که طرح نامتعادل هست. لازم به ذکر هست که برای پیاده‌سازی آنالیز واریانس نوع ۳ اگر بخواهیم شرط

\[ \begin{aligned} & \sum_{i = 1}^a \alpha_i = 0, \\ & \sum_{j = 1}^b \beta_j = 0, \\ & \sum_{i = 1}^a \sum_{j = 1}^b (\alpha\beta)_{ij} = 0 \end{aligned} \]

لحاظ بشود، یعنی این‌که مجموع اثرات برای هر عامل برابر با صفر باشد و همچنین مجموع اثرات توأم نیز برابر با صفر باشد که البته می‌دانیم برای این‌که مدل شناسایی پذیر باشد و بتوان برای اثرات برآورد‌های منحصربه‌فردی پیدا کرد، بایستی این شرط برقرار باشد. البته در این‌جا برای یک مدل با دو اثر اصلی و یک اثر توأم مثال را پیاده‌سازی کردیم ولی در حالت کلی باید این شرایط برای تمام اثرات اصلی و همچنین اثرات توأم برقرار باشد، البته در صورتی که هدف پیاده‌سازی یک مدل با اثرات ثابت باشد. چون اگر اثرات تصادفی باشد قطعا شرط بالا نمی‌تواند برقرار باشد و اصولا‌ روش‌های برآورد کردن هم کمی متفاوت‌تر می‌شود. برای برقرار شدن شرط بالا باید وقتی در 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]

[4] URL

Back to top