Load Packages & Data
Load Function
ab.test <-
function(attribute, conf){
t.test(x = mkf[mkf$Attribute == attribute & mkf$`Item No` == "A", 'Value'],
y = mkf[mkf$Attribute == attribute & mkf$`Item No` == "B", 'Value'],
alternative = "two.sided",
paired = FALSE,
var.equal = TRUE,
conf.level = conf
)$p.value ->
p.value
if_else(p.value < 1 - conf,
"Yes",
"No"
)
}
Exploratory Data Analysis
mkf %>%
mutate(across(.cols = c(`Item No`, Attribute),
.fns = as_factor
)
) %>%
ggpairs(mapping = aes(colour = `Item No`))

mkf %>%
mutate(across(.cols = c(`Item No`, Attribute),
.fns = as_factor
)
) %>%
ggpairs(mapping = aes(colour = Attribute))

Compare T-Test Significance
mkf %>%
group_by(Attribute,
`Item No`
) %>%
summarize(Mean = mean(Value),
StdDev = sd(Value),
N = NROW(Value)
) %>%
pivot_wider(names_from = `Item No`,
values_from = c(Mean, StdDev, N)
) %>%
mutate(Conf_90 = ab.test(Attribute, 0.90),
Conf_95 = ab.test(Attribute, 0.95),
Conf_99 = ab.test(Attribute, 0.99),
across(.cols = c(Mean_A:StdDev_B),
.fns = round, digits = 2
)
) %>%
kable()
## `summarise()` has grouped output by 'Attribute'. You can override using the `.groups` argument.
CLEAN |
6.33 |
6.49 |
1.07 |
0.93 |
70 |
69 |
No |
No |
No |
COMFORT |
6.46 |
6.51 |
0.76 |
0.80 |
70 |
69 |
No |
No |
No |
LIGHT |
6.31 |
6.38 |
0.97 |
1.03 |
70 |
69 |
No |
No |
No |
MOVABLE |
6.09 |
6.30 |
1.14 |
1.12 |
70 |
69 |
No |
No |
No |
NEARBY |
6.09 |
6.41 |
1.32 |
1.06 |
70 |
69 |
No |
No |
No |
OAL |
6.07 |
6.48 |
1.18 |
0.92 |
70 |
69 |
Yes |
Yes |
No |
PURWOPRICE |
6.04 |
6.38 |
1.18 |
1.02 |
70 |
69 |
Yes |
No |
No |
PURWPRICE |
6.13 |
6.29 |
1.26 |
1.11 |
70 |
69 |
No |
No |
No |
QUALITY |
6.27 |
6.17 |
0.88 |
1.12 |
70 |
69 |
No |
No |
No |
ROUGH |
6.71 |
6.64 |
0.76 |
1.00 |
70 |
69 |
No |
No |
No |
SLICK |
5.94 |
6.35 |
1.20 |
0.94 |
70 |
69 |
Yes |
Yes |
No |
SMOOTH |
6.23 |
6.49 |
1.08 |
0.90 |
70 |
69 |
No |
No |
No |
STICKING |
6.77 |
6.62 |
0.52 |
0.97 |
70 |
69 |
No |
No |
No |