导入所需要的包

library("BSDA")#可能需要单独运行这一行代码
## Loading required package: lattice
## 
## Attaching package: 'BSDA'
## The following object is masked from 'package:datasets':
## 
##     Orange
library("ggplot2")
library("RColorBrewer")

导入摄入咖啡因数据

cafe <- c(15,14,16,16,17,15,16,17,18,16,15,14,16,16,17,15,16,17,
             18,16,15,14,16,16,17,15,16,17,18,16,14,15,13,14,17)
n <- length(cafe)

cafe数据分布

hist(cafe,main = "Histogram of cafe",xlab = "Value",ylab = "Frequency",col = "lightblue")

plot(density(cafe),main = "Density Plot of cafe",xlab = "Value",ylab = "Density",col="blue",lwd=2)

95% 置信区间估计

# 95%区间估计
mean_cafe <- mean(cafe)
sd_cafe <- sd(cafe)
n <- length(cafe)
#因为样本量超过30且呈现正态分布,所以选择正态分布计算置信区间
se <- qnorm(0.975) * sd_cafe / sqrt(n) #缺少总体方差信息,使用样本方差替代
CI <- c(mean_cafe - se, mean_cafe + se)
cat("95% z检验置信区间为:",CI)
## 95% z检验置信区间为: 15.38403 16.21597

将估计出的区间跟基于T分布的区间做对比

t_test_result <- t.test(cafe)
confidence_interval <- t_test_result$conf.int
cat("95% t检验置信区间为:",confidence_interval[1], confidence_interval[2], "\n")
## 95% t检验置信区间为: 15.36869 16.23131

假如过往未摄入咖啡因的平均记忆力是 15.2,检验摄入咖啡因是否显著改善了记忆力

H0:摄入咖啡因没有显著提高记忆力(mu <= 15.2) H1:摄入咖啡因显著提高记忆力(mu > 15.2)

采用手动计算的方式进行z检验

#统计量z值
z <- (mean_cafe - 15.2)/(sd_cafe/sqrt(n))
cat("z:",z,"\n")
## z: 2.827108
#p值
p_value <- 1 - pnorm(z) 
cat("p_value:",p_value,"\n")
## p_value: 0.002348527
if(p_value < 0.05){
  cat("拒绝原假设,即摄入咖啡因显著提高记忆力","\n")
}else{
  cat("不拒绝原假设,即摄入咖啡因没有显著提高记忆力")
}
## 拒绝原假设,即摄入咖啡因显著提高记忆力

采用函数进行z检验

z.test(cafe, alternative="greater", mu=15.2, sigma.x= sd_cafe)
## 
##  One-sample z-Test
## 
## data:  cafe
## z = 2.8271, p-value = 0.002349
## alternative hypothesis: true mean is greater than 15.2
## 95 percent confidence interval:
##  15.45091       NA
## sample estimates:
## mean of x 
##      15.8

#拒绝域与z值

z_cri <- qnorm(0.95,0,1)

ztestdata <- data.frame(x = seq(-3, 3, 0.01), y = dnorm(seq(-3, 3, 0.01)))

p <- ggplot(data = ztestdata, aes(x = x, y = y)) + 
  geom_line() + xlab("z value")  +
  theme(panel.border = element_rect(linetype = "solid", fill=NA),
        panel.background = element_rect(fill = "white"),
        strip.background = element_rect(fill = "white"))

p1 <- p + geom_area(data = ztestdata[ztestdata$x > abs(z_cri), ], fill = brewer.pal(8, "Paired")[5])

p1 <- p1 + geom_segment(aes(x = z, y = 0, xend = z, yend = dnorm(z)), col = brewer.pal(8, "Reds")[8], size = 1.2)
## Warning: Using `size` aesthetic for lines was deprecated in ggplot2 3.4.0.
## ℹ Please use `linewidth` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
p1

采用t检验

#统计量t值
t <- (mean_cafe - 15.2)/(sd_cafe/sqrt(n))
cat("t:",t,"\n")
## t: 2.827108
#p值
p_value <- 1 - pt(t,n-1) 
cat("p_value:",p_value,"\n")
## p_value: 0.003907154
if(p_value < 0.05){
  cat("拒绝原假设,即摄入咖啡因显著提高记忆力","\n")
}else{
  cat("不拒绝原假设,即摄入咖啡因没有显著提高记忆力")
}
## 拒绝原假设,即摄入咖啡因显著提高记忆力

#拒绝域与t值

t_cri <- qt(0.95,n-1)

ttestdata <- data.frame(x = seq(-3, 3, 0.01), y = dt(seq(-3, 3, 0.01),df = n - 1))

p <- ggplot(data = ttestdata, aes(x = x, y = y)) + 
  geom_line() + xlab("t value")  +
  theme(panel.border = element_rect(linetype = "solid", fill=NA),
        panel.background = element_rect(fill = "white"),
        strip.background = element_rect(fill = "white"))

p2 <- p + geom_area(data = ttestdata[ttestdata$x > abs(t_cri), ], fill = brewer.pal(8, "Paired")[5])

p2 <- p2 + geom_segment(aes(x = t, y = 0, xend = t, yend = dt(z,df = n-1)), col = brewer.pal(8, "Reds")[8], size = 1.2)

p2