df <- data.frame(
ctrl1 = c(5.2, 6.1, 4.8, 5.5, 6.3),
ctrl2 = c(4.9, 6.5, 5.0, 5.3, 6.1),
ctrl3 = c(5.0, 6.0, 5.2, 5.7, 6.4),
trt1 = c(5.5, 6.2, 5.3, 5.9, 6.7),
trt2 = c(5.4, 6.3, 5.4, 6.0, 6.5),
trt3 = c(5.6, 6.4, 5.5, 6.1, 6.6)
)
rownames(df) <- paste0("Row", 1:5)
print(df)
## ctrl1 ctrl2 ctrl3 trt1 trt2 trt3
## Row1 5.2 4.9 5.0 5.5 5.4 5.6
## Row2 6.1 6.5 6.0 6.2 6.3 6.4
## Row3 4.8 5.0 5.2 5.3 5.4 5.5
## Row4 5.5 5.3 5.7 5.9 6.0 6.1
## Row5 6.3 6.1 6.4 6.7 6.5 6.6
df$ctrl_mean <- apply(df[,1:3], 1, mean)
df$ctrl_sd <- apply(df[,1:3], 1, sd)
df$trt_mean <- apply(df[,4:6], 1, mean)
df$trt_sd <- apply(df[,4:6], 1, sd)
#######################
n1 <- n2 <- 3
t_test_from_summary <- function(mean1, sd1, n1, mean2, sd2, n2) {
se_diff <- sqrt((sd1^2)/n1 + (sd2^2)/n2)
t_stat <- (mean1 - mean2) / se_diff
dfree <- ((sd1^2 / n1 + sd2^2 / n2)^2) /
(((sd1^2 / n1)^2) / (n1 - 1) + ((sd2^2 / n2)^2) / (n2 - 1))
p_value <- 2 * (1 - pt(abs(t_stat), df = dfree))
return(p_value)
}
p_values <- mapply(
function(mean1, sd1, mean2, sd2) {
t_test_from_summary(mean1, sd1, n1, mean2, sd2, n2)
},
mean1 = df$ctrl_mean,
sd1 = df$ctrl_sd,
mean2 = df$trt_mean,
sd2 = df$trt_sd
)
p_values
## [1] 0.01590216 0.59033182 0.05478677 0.03156223 0.04191452
p_values2 <- apply(df, 1, function(x) {
t.test(x[1:3], x[4:6])$p.value
})
p_values2
## Row1 Row2 Row3 Row4 Row5
## 0.01590216 0.59033182 0.05478677 0.03156223 0.04191452
df$p_values <- p_values2
df
## ctrl1 ctrl2 ctrl3 trt1 trt2 trt3 ctrl_mean ctrl_sd trt_mean trt_sd
## Row1 5.2 4.9 5.0 5.5 5.4 5.6 5.033333 0.1527525 5.5 0.1
## Row2 6.1 6.5 6.0 6.2 6.3 6.4 6.200000 0.2645751 6.3 0.1
## Row3 4.8 5.0 5.2 5.3 5.4 5.5 5.000000 0.2000000 5.4 0.1
## Row4 5.5 5.3 5.7 5.9 6.0 6.1 5.500000 0.2000000 6.0 0.1
## Row5 6.3 6.1 6.4 6.7 6.5 6.6 6.266667 0.1527525 6.6 0.1
## p_values
## Row1 0.01590216
## Row2 0.59033182
## Row3 0.05478677
## Row4 0.03156223
## Row5 0.04191452