#또한, 처리의 수, 블록의 수, 블록 내의 처리 쌍의 수들을 계산하고, 그에 맞는 분할표 형태로 데이터를 표현하시오. #이 데이터는 블록설계를 사용하여 수집된것을 보임 #각 블록 내 처리수는 4, 블록의 수는 4, 블록내 처리 쌍의 수는 6이다
# 데이터 생성
hospital<-as.factor(c("A", "B", "C", "D"))
painkiller<-as.factor(c("Aspirin","Tylenol","Naproxen","Acetaminophen"))
y=c(17,18,19,NA,21,22,NA, 22, 15, NA, 17, 15, NA, 13, 13, 14)
# 데이터 프레임 생성
data <- data.frame(
painkiller = rep(painkiller, each = length(hospital)),
hospital = rep(hospital, times = length(painkiller)),
response = y
)
# 데이터 프레임 출력
print(data)
## painkiller hospital response
## 1 Aspirin A 17
## 2 Aspirin B 18
## 3 Aspirin C 19
## 4 Aspirin D NA
## 5 Tylenol A 21
## 6 Tylenol B 22
## 7 Tylenol C NA
## 8 Tylenol D 22
## 9 Naproxen A 15
## 10 Naproxen B NA
## 11 Naproxen C 17
## 12 Naproxen D 15
## 13 Acetaminophen A NA
## 14 Acetaminophen B 13
## 15 Acetaminophen C 13
## 16 Acetaminophen D 14
# 데이터 시각화
plot(response ~ painkiller, data = data, main = "Response by Painkiller", xlab = "Painkiller", ylab = "Response")
plot(response ~ hospital, data = data, main = "Response by Hospital", xlab = "Hospital", ylab = "Response")
data <- na.omit(data)
# 분산분석 수행
anovafit <- aov(response ~ painkiller, data = data)
# 분산분석 결과 출력
summary(anovafit)
## Df Sum Sq Mean Sq F value Pr(>F)
## painkiller 3 113.7 37.89 50.52 1.52e-05 ***
## Residuals 8 6.0 0.75
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
통계적 모형을 적으시오. Y ijk=μ+αi+βj+γk+ϵ ijk
땅콩 종자별 상자그림을 그리시오.
# 데이터 입력
data <- data.frame(
Nitro = factor(rep(1:3, each=3)),
Slope = factor(c(1, 2, 3, 3, 1, 2, 2, 3, 1)),
Seed = c("C", "A", "B", "A", "B", "C", "B", "C", "A"),
Yield = c(26, 19, 28, 23, 20, 24, 28, 17, 28)
)
# 데이터 구조 확인
str(data)
## 'data.frame': 9 obs. of 4 variables:
## $ Nitro: Factor w/ 3 levels "1","2","3": 1 1 1 2 2 2 3 3 3
## $ Slope: Factor w/ 3 levels "1","2","3": 1 2 3 3 1 2 2 3 1
## $ Seed : chr "C" "A" "B" "A" ...
## $ Yield: num 26 19 28 23 20 24 28 17 28
# 라이브러리 로딩
library(ggplot2)
# 상자그림 그리기
ggplot(data, aes(x=Seed, y=Yield, fill=Seed)) +
geom_boxplot() +
labs(title="Peanut", x="Seed type", y="Yield") +
theme_minimal()
# 분산분석 실행
model <- lm(Yield ~ Seed + Slope + Nitro, data=data)
anova_result <- anova(model)
print(anova_result)
## Analysis of Variance Table
##
## Response: Yield
## Df Sum Sq Mean Sq F value Pr(>F)
## Seed 2 14 7 0.1228 0.8906
## Slope 2 6 3 0.0526 0.9500
## Nitro 2 8 4 0.0702 0.9344
## Residuals 2 114 57
귀무 가설(H0): 모든 종자 유형의 평균 수확량이 동일하다. 대립 가설(H1): 적어도 한 종자 유형의 평균 수확량이 다른 종자 유형과 다르다. 종자의 유형의 F-값은 0.1228이고 p-값은 0.8906이므로 유의수준 0.05보다 크기 때문에 귀무가설을기각할수 없다 따라서 종자의 유형에 따른 수확량의 차이는 없다고 할 수 있습니다.
경사도(Slope)에 따른 수확량 차이
귀무 가설(H0): 모든 경사도의 평균 수확량이 동일하다. 대립 가설(H1): 적어도 한 경사도의 평균 수확량이 다른 경사도와 다르다.
경사도의 F 값은 0.0526이고 p-값은 0.9500이므로 귀무가설을 기각할수 없습니다. 따라서 경사도에 따른 평균 수확량은 차이가 없다고 할 수 있습니다.
질소 함유량(Nitro)에 따른 수확량 차이
귀무 가설(H0): 모든 질소 함유량 수준의 평균 수확량이 동일하다. 대립 가설(H1): 적어도 한 질소 함유량 수준의 평균 수확량이 다른 수준과 다르다.
질소 함유량의 F 값은 0.0702이고 p-값이 0.9344이므로 질소 함유량이 수확량에 미치는 영향도 통계적으로 유의하지 않습니다. 따러서 질소 함유량에 따른 수확량의 차이는 없다고 할수 있습니다.
data$Farm = factor(rep(c("F1", "F2", "F3"), each=3))
# 그라코-라틴정방설계 모형
model_graco <- lm(Yield ~ Seed + Slope + Nitro + Farm, data=data)
anova_graco <- anova(model_graco)
print(anova_graco)
## Analysis of Variance Table
##
## Response: Yield
## Df Sum Sq Mean Sq F value Pr(>F)
## Seed 2 14 7 0.1228 0.8906
## Slope 2 6 3 0.0526 0.9500
## Nitro 2 8 4 0.0702 0.9344
## Residuals 2 114 57
𝑌𝑖𝑗𝑘:주어진 실험 조건에서의 바이러스 개체수입니다. 𝜇: 전체 평균입니다. 𝛼𝑖: i번째 바이러스 종류의 효과입니다. 𝛽𝑗: j번째 배양시간의 효과입니다. 𝛾𝑘: k번째 배양액 종류의 효과입니다. (𝛼𝛽)𝑖𝑗, (𝛼𝛾)𝑖𝑘, (𝛽𝛾)𝑗𝑘: 두 요인 간의 상호작용 효과입니다. (αβγ) ijk: 세 요인의 상호작용 효과입니다. ϵ ijkl: 실험 오차(잡음)를 나타냅니다.
# 데이터 프레임 생성
data <- data.frame(
virus_type = factor(rep(c("C0", "C1"), each=12)),
culture_time = factor(rep(rep(c("A0", "A1"), each=6), times=2)),
culture_medium = factor(rep(c("B0", "B1"), each=6, times=2)),
virus_count = c(3, 8, 9, 10, 14, 16, 4, 7, 9, 15, 19, 20, 10, 12, 16, 20, 21, 22, 10, 13, 16, 26, 27, 25)
)
# 데이터 구조 확인
str(data)
## 'data.frame': 24 obs. of 4 variables:
## $ virus_type : Factor w/ 2 levels "C0","C1": 1 1 1 1 1 1 1 1 1 1 ...
## $ culture_time : Factor w/ 2 levels "A0","A1": 1 1 1 1 1 1 2 2 2 2 ...
## $ culture_medium: Factor w/ 2 levels "B0","B1": 1 1 1 1 1 1 2 2 2 2 ...
## $ virus_count : num 3 8 9 10 14 16 4 7 9 15 ...
# 완전모형 분석을 위한 선형모델 적합
model <- lm(virus_count ~ virus_type * culture_time * culture_medium, data=data)
# 분산분석표 출력
anova_result <- anova(model)
print(anova_result)
## Analysis of Variance Table
##
## Response: virus_count
## Df Sum Sq Mean Sq F value Pr(>F)
## virus_type 1 294.00 294.000 8.1253 0.009886 **
## culture_time 1 37.50 37.500 1.0364 0.320821
## virus_type:culture_time 1 0.17 0.167 0.0046 0.946564
## Residuals 20 723.67 36.183
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
# 배양액 종류의 주효과 크기 구하기
summary(model)$coefficients
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 10.0000000 2.455719 4.07212723 0.0005943299
## virus_typeC1 6.8333333 3.472911 1.96760966 0.0631367529
## culture_timeA1 2.3333333 3.472911 0.67186671 0.5093559204
## virus_typeC1:culture_timeA1 0.3333333 4.911438 0.06786879 0.9465640192
# 필요한 라이브러리 로딩
library(ggplot2)
# 상호작용 그림 그리기
ggplot(data, aes(x=virus_type, y=virus_count, color=culture_medium)) +
geom_point(position=position_dodge(width=0.1)) +
geom_line(aes(group=culture_medium), position=position_dodge(width=0.1)) +
labs(title="바이러스 종류와 배양액 종류의 상호작용 효과",
x="바이러스 종류",
y="바이러스 개체수") +
theme_minimal()
# 분산분석 수행
anova_result <- anova(model)
print(anova_result)
## Analysis of Variance Table
##
## Response: virus_count
## Df Sum Sq Mean Sq F value Pr(>F)
## virus_type 1 294.00 294.000 8.1253 0.009886 **
## culture_time 1 37.50 37.500 1.0364 0.320821
## virus_type:culture_time 1 0.17 0.167 0.0046 0.946564
## Residuals 20 723.67 36.183
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
귀무 가설 (H0): 모든 바이러스 종류에 대해 평균 바이러스 개체수는 같다. 대립 가설 (H1): 적어도 한 바이러스 종류의 평균 바이러스 개체수는 다르다. 바이러스 종류에 따른 F값이 8.1253이고 p-값이 0.009886이므로 귀무가설을 기각할 수 있습니다. 따라서 유의수준 0.05에서 바이러스 종류에 따른 바이러스 개체의 수에 차이가 있다고 할수 있습니다.
귀무 가설 (H0): 배양 시간에 따른 평균 바이러스 개체수의 차이는 없다. 대립 가설 (H1): 배양 시간에 따라 평균 바이러스 개체수가 다르다.
배양시간에 따른 F값은 1.0364이고 p-값은 0.320821이므로 귀무가설을 기각할 수 없습니다. 따라서 유의수준 0.05에서 배양 시간에 따른 바이러스 개체의 수에 차이가 없다고 할수 있습니다.
귀무 가설 (H0): 바이러스 종류와 배양 시간의 상호작용은 바이러스 개체수에 영향을 미치지 않는다. 대립 가설 (H1): 바이러스 종류와 배양 시간의 상호작용은 바이러스 개체수에 영향을 미친다.
바이러스 종류와 배양시간의 상호작용의 F-값은 0.0046이고 p-값은 0.946564이므로 귀무가설을 기각할 수 없습니다. 따라서 유의수준 0.05에서 두요인의 상호작용이 바이러스 개체수에 영향을 미치지 않는다고 할수 있습니다.
data <- data.frame(
rep = rep(1:3, times = c(3, 2, 1)),
block = c(1, 2, 3, 4, 5, 6),
result = c("ab", "b", "ab", "ab", "a", "ab")
)
# 라이브러리 로딩
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
# 각 반복에서 결과 분석
analysis <- data %>%
group_by(rep) %>%
summarize(
unique_results = length(unique(result)),
results = toString(unique(result))
)
# 출력
print(analysis)
## # A tibble: 3 × 3
## rep unique_results results
## <int> <int> <chr>
## 1 1 2 ab, b
## 2 2 2 ab, a
## 3 3 1 ab
# 각 반복별로 가능한 교락 효과 추정
# 예를 들어, 결과의 유니크한 패턴이나 빈도를 기반으로 분석
confounded_effects <- function(rep_data) {
if (length(unique(rep_data$result)) > 1) {
return("Possible interaction or main effect confounding")
} else {
return("No clear confounding")
}
}
# 반복별 교락 효과 추정
confounding_analysis <- data %>%
group_by(rep) %>%
summarize(
confounding = confounded_effects(cur_data())
)
## Warning: There was 1 warning in `summarize()`.
## ℹ In argument: `confounding = confounded_effects(cur_data())`.
## ℹ In group 1: `rep = 1`.
## Caused by warning:
## ! `cur_data()` was deprecated in dplyr 1.1.0.
## ℹ Please use `pick()` instead.
# 출력
print(confounding_analysis)
## # A tibble: 3 × 2
## rep confounding
## <int> <chr>
## 1 1 Possible interaction or main effect confounding
## 2 2 Possible interaction or main effect confounding
## 3 3 No clear confounding
첫 번째 반복에서는 여러 결과값이 관찰되었으며, 이는 주요 요인의 효과나 상호작용 효과가 교락될 수 있음을 의미합니다. 첫번째반복에서는 결과값이 “ab”, “b”, “ab”로 나타난 것으로 보아 여러 요인의 효과가 혼재되어 있을 가능성이 있습니다. 두 번째 반복 역시 다양한 결과값(“ab”, “a”)이 관찰되어, 여러 요인 간의 상호작용이나 주요 효과의 교락이 있을 가능성을 나타냅니다. 이를 미루어 봤을 때 특정 요인의 효과를 명확히 구분하기 어려울 수 있습니다. 세 번째 반복에서는 결과값이 “ab” 하나로 일관되므로, 교락 효과가 명확하지 않습니다. 세번째 반복에서는 특정한 교락 효과가 없거나, 한 가지 결과만 나타났기 때문에 교락 효과를 추론하기 어렵다는 것을 의미합니다.