BioStaInfer/exam02_example.Rmd

299 lines
11 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

## 问题1[研究主题]
### 研究问题
研究问题是:[简明描述研究问题,形式为"A是否与B有关系"]
### 假设
- 零假设(H0)[变量A]与[变量B]无关。
- 备择假设(H1)[变量A]与[变量B]有关。
### 数据
```{r}
# 读取数据
data1 <- read.csv("[数据文件路径]", stringsAsFactors = TRUE)
# 查看数据结构
str(data1)
head(data1)
# 创建列联表
contingency_table <- table(data1$[变量A], data1$[变量B])
contingency_table
# 计算条件概率
prop.table(contingency_table, margin = 1)
```
### 可视化
```{r}
# 创建马赛克图
mosaicplot(contingency_table,
main = "[图表标题]",
xlab = "[x轴标签]",
ylab = "[y轴标签]",
col = c("lightblue", "salmon"))
```
### 检验假设的统计检验
```{r}
# 卡方检验
chisq_test <- chisq.test(contingency_table)
chisq_test
# Fisher精确检验
fisher_test <- fisher.test(contingency_table)
fisher_test
```
### 统计解释
```{r}
chisq_test$expected
```
两种统计检验并不同样适合这些数据。卡方检验通常要求每个单元格的期望频数大于5而从上面的输出可以看到有些单元格的期望频数小于5。因此Fisher精确检验更适合这种小样本量的情况它不依赖于大样本近似。
### 结论和讨论
研究问题是探究[重述研究问题]。我的分析流程如下:
首先,我将数据整理成列联表,以便观察[变量A]与[变量B]之间的关系。通过计算条件概率,我可以直观地看到这两个变量之间可能存在的关联。
在选择统计检验方法时,我考虑了数据的特性:
1. 数据是[描述数据类型,如"分类数据(类别变量)"]
2. 我们关心的是[描述研究目的,如"两个分类变量之间是否存在关联"]
3. 样本量[描述样本量特点,如"相对较小"]
基于这些特点,我选择了[所选统计方法]。[详细解释所选方法的假设和适用条件]
[所选统计方法]的p值为 r fisher_test$p.value [解释结果,如"小于0.05的显著性水平,因此我们拒绝零假设"]。
从数据分析和可视化结果来看,[描述观察到的模式,如"当A发生时B更可能/不太可能发生"]。这一发现[与初始假设一致/相反],表明[解释结果的意义]。
这一结果对于理解[研究领域]具有重要意义。[讨论研究结果的更广泛意义和潜在应用]。
## 问题2[研究主题]
### 研究问题
研究问题是:[简明描述研究问题,形式为"A是否比B更[某种特性]"]
### 假设
- 零假设(H0)[条件A]和[条件B]的[测量变量]没有显著差异。
- 备择假设(H1)[条件A]的[测量变量]显著[高于/低于][条件B]。
### 数据
```{r}
data_file <- "[数据文件名].csv"
# 读取数据(两列数据:第一列为分组变量,第二列为测量值)
data <- read.csv(paste0("c:/Users/31598/Desktop/BSI_exam/", data_file), stringsAsFactors = TRUE)
names(data) <- c("group", "value") # 统一列名,便于后续分析
# 确保分组变量是因子类型
data$group <- factor(data$group)
# 查看数据结构
str(data)
head(data)
# 计算每组的描述性统计量
group_summary <- tapply(data$value, data$group, summary)
group_sd <- tapply(data$value, data$group, sd)
print(group_summary)
print(group_sd)
# 计算样本量
sample_sizes <- table(data$group)
print(sample_sizes)
# 计算组均值(用于后续分析)
group_means <- tapply(data$value, data$group, mean)
print(group_means)
# 获取组别名称(用于后续分析)
group_levels <- levels(data$group)
```
### 可视化
```{r}
# 设置图表标题和轴标签(只需修改这两处)
plot_title <- "[两组比较的标题]"
y_label <- "[测量变量]"
# 箱线图与散点图组合
boxplot(value ~ group, data = data,
main = plot_title,
xlab = "组别",
ylab = y_label,
col = c("lightblue", "salmon"),
border = "black")
# 添加点以显示原始数据
stripchart(value ~ group, data = data,
method = "jitter",
vertical = TRUE,
add = TRUE,
pch = 19,
col = "darkblue")
# 直方图
par(mfrow = c(1, 2))
hist(data$value[data$group == group_levels[1]],
main = paste(group_levels[1], "组直方图"),
xlab = y_label,
col = "lightblue")
hist(data$value[data$group == group_levels[2]],
main = paste(group_levels[2], "组直方图"),
xlab = y_label,
col = "salmon")
par(mfrow = c(1, 1))
# 小提琴图(可选)
if(!require(vioplot)) install.packages("vioplot")
library(vioplot)
with(data,
vioplot(value[group==group_levels[1]],
value[group==group_levels[2]],
names = group_levels,
col = c("lightblue", "salmon"),
main = plot_title,
xlab = "组别",
ylab = y_label))
# 点图加均值和95%置信区间
if(!require(ggplot2)) install.packages("ggplot2")
library(ggplot2)
ggplot(data, aes(x = group, y = value, color = group)) +
geom_point(position = position_jitter(width = 0.2), size = 3, alpha = 0.7) +
stat_summary(fun = mean, geom = "point", shape = 18, size = 5, color = "black") +
stat_summary(fun.data = mean_cl_normal, geom = "errorbar", width = 0.2) +
labs(title = plot_title,
x = "组别",
y = y_label) +
theme_classic() +
scale_color_manual(values = c("blue", "red"))
```
### 检验假设的统计检验
```{r}
# 1. 检查正态性
# 按组分别检查
shapiro_test1 <- shapiro.test(data$value[data$group == group_levels[1]])
shapiro_test2 <- shapiro.test(data$value[data$group == group_levels[2]])
cat(group_levels[1], "组Shapiro-Wilk正态性检验 p值:", shapiro_test1$p.value, "\n")
cat(group_levels[2], "组Shapiro-Wilk正态性检验 p值:", shapiro_test2$p.value, "\n")
# 确定是否满足正态性假设
normality_assumption_met <- shapiro_test1$p.value > 0.05 & shapiro_test2$p.value > 0.05
cat("正态性假设是否满足:", normality_assumption_met, "\n")
# Q-Q图
par(mfrow = c(1, 2))
qqnorm(data$value[data$group == group_levels[1]],
main = paste(group_levels[1], "组Q-Q图"))
qqline(data$value[data$group == group_levels[1]])
qqnorm(data$value[data$group == group_levels[2]],
main = paste(group_levels[2], "组Q-Q图"))
qqline(data$value[data$group == group_levels[2]])
par(mfrow = c(1, 1))
# 2. 检查方差同质性
var_test <- var.test(value ~ group, data = data)
print(var_test)
# 确定是否满足方差同质性假设
variance_homogeneity_met <- var_test$p.value > 0.05
cat("方差同质性假设是否满足:", variance_homogeneity_met, "\n")
# 3. 确定检验方向
# 查看两组均值差异
cat(group_levels[1], "组均值与", group_levels[2], "组均值的差异:",
group_means[1] - group_means[2], "\n")
# 设置检验方向(根据研究假设修改)
# "two.sided" - 双侧检验(默认)
# "greater" - 单侧检验,假设第一组大于第二组
# "less" - 单侧检验,假设第一组小于第二组
test_alternative <- "two.sided" # 可根据研究假设修改
test_paired <- 'F'
```
### 检查统计检验的假设
```{r}
if(normality_assumption_met) {
cat("数据满足正态性假设使用t检验\n")
# 根据方差同质性检查结果选择t检验类型
if(variance_homogeneity_met) {
cat("数据满足方差同质性假设使用等方差t检验(var.equal = TRUE)\n")
t_test <- t.test(value ~ group, data = data,
alternative = test_alternative,
paired = test_paired,
var.equal = TRUE)
} else {
cat("数据不满足方差同质性假设使用Welch's t检验(var.equal = FALSE)\n")
t_test <- t.test(value ~ group, data = data,
alternative = test_alternative,
var.equal = FALSE)
}
print(t_test)
# 计算效应量Cohen's d
if(!require(effsize)) install.packages("effsize")
library(effsize)
cohen_d <- cohen.d(value ~ group, data = data)
print(cohen_d)
# 保存检验结果
test_result <- t_test
effect_size <- cohen_d$estimate
effect_size_interpretation <- ifelse(abs(effect_size) < 0.2, "小",
ifelse(abs(effect_size) < 0.5, "小到中",
ifelse(abs(effect_size) < 0.8, "中",
ifelse(abs(effect_size) < 1.2, "大", "非常大"))))
test_name <- ifelse(variance_homogeneity_met, "等方差t检验", "Welch's t检验")
} else {
cat("数据不满足正态性假设,使用非参数检验(Wilcoxon秩和检验)\n")
wilcox_test <- wilcox.test(value ~ group, data = data,
alternative = test_alternative)
print(wilcox_test)
# 计算非参数效应量
if(!require(rstatix)) install.packages("rstatix")
library(rstatix)
wilcox_effsize <- wilcox_effsize(value ~ group, data = data)
print(wilcox_effsize)
# 保存检验结果
test_result <- wilcox_test
effect_size <- wilcox_effsize$effsize
effect_size_interpretation <- wilcox_effsize$magnitude
test_name <- "Wilcoxon秩和检验"
}
# 保存p值和显著性结论
p_value <- test_result$p.value
significance <- ifelse(p_value < 0.05, "显著", "不显著")
```
### 结果讨论与结论
研究问题是探究[重述研究问题]。我的分析流程如下:
首先,我通过[描述使用的可视化方法]展示了两组[研究对象][组别A]和[组别B])的[测量变量]数据。这些图表清晰地显示[描述观察到的模式,如"组别A的测量值明显高于/低于组别B"]。
在选择统计检验方法时,我考虑了数据的特性:
1. 数据是两个独立组的连续测量值
2. 我们有[是否有]明确的方向性假设([描述方向性假设]
3. 样本量[描述样本量特点,如"相对较小"]
基于这些特点我首先选择了独立样本t检验[单侧/双侧]。为了验证t检验的假设我进行了以下检查
1. 正态性检验Shapiro-Wilk检验结果显示[组别A]组p值为`r shapiro_test1$p.value`[组别B]组p值为`r shapiro_test2$p.value`[解释结果,如"均大于0.05的显著性水平,表明数据不违反正态分布假设"]。Q-Q图和直方图也[支持/不支持]这一结论。
2. 方差同质性检验F检验结果p值为`r var_test$p.value`[解释结果,如"大于0.05,表明两组方差没有显著差异"]。
t检验的p值为`r t_test$p.value`[解释结果,如"显著小于0.05的显著性水平,因此我们拒绝零假设"]。[如果进行了非参数检验,也解释其结果]
结论是:[组别A]的[测量变量][比较关系,如"显著高于/低于"][组别B]。这表明[解释结果对研究问题的回答]。[组别A]中[测量变量]的平均值为[计算平均值],而[组别B]为[计算平均值],差异约为[计算差异]。这种差异不仅在统计上显著,在[研究领域]上也具有重要意义,因为[解释差异的实际意义]。
这一发现对于理解[研究领域]具有重要意义。[讨论研究结果的更广泛意义]。研究的局限性包括[讨论研究局限性,如样本量等]。未来的研究方向可以包括[提出未来研究方向]。