## 问题1:蜘蛛的命运 ### 研究问题 研究问题是:雌性红背蜘蛛是否更有可能接受被她吃掉的雄性的精子,而不是逃跑的雄性的精子? ### 假设 - 零假设(H0):雌性红背蜘蛛接受第二任伴侣的概率与第一任伴侣的命运(被吃或逃脱)无关。 - 备择假设(H1):雌性红背蜘蛛接受第二任伴侣的概率与第一任伴侣的命运(被吃或逃脱)有关。 数据分析: ```{r} spider_data <- read.csv("C:\\Users\\31598\\Desktop\\BSI_exam\\worms.csv", stringsAsFactors = TRUE) str(spider_data) head(spider_data) spider_table <- table(spider_data) ``` ###Visualization ```{r} # 创建马赛克图 mosaicplot(spider_table, main = "雌性红背蜘蛛对第二任伴侣的接受情况", xlab = "第一任伴侣的命运", ylab = "第二任伴侣的命运", col = c("lightblue", "salmon")) ``` ###Statistical Analysis ```{r} # 卡方检验 chisq_test <- chisq.test(spider_table) chisq_test # Fisher精确检验 fisher_test <- fisher.test(spider_table) fisher_test ``` ###Statistical Explanation ```{r} # 检查卡方检验的期望频数 chisq_test$expected ``` 两种统计检验并不同样适合这些数据。卡方检验通常要求每个单元格的期望频数大于5,而从上面的输出可以看到,有些单元格的期望频数小于5。因此,Fisher精确检验更适合这种小样本量的情况,它不依赖于大样本近似。 ### Conclusion and Discussion 研究问题是探究雌性红背蜘蛛是否更有可能接受被她吃掉的雄性的精子,而不是逃脱的雄性的精子。我的分析流程如下: 首先,我将数据整理成列联表,以便观察第一任伴侣命运(被吃或逃脱)与雌性对第二任伴侣反应(接受或拒绝)之间的关系。通过计算条件概率(prop.table函数),我可以直观地看到这两个变量之间可能存在的关联。 在选择统计检验方法时,我考虑了数据的特性: 1. 数据是分类数据(类别变量)- 两个二分类变量形成2×2列联表 2. 我们关心的是两个分类变量之间是否存在关联 3. 样本量相对较小(n=32) 基于这些特点,我选择了两种适用于分类数据的检验方法:卡方检验和Fisher精确检验。 卡方检验的关键假设包括: 1. 观测值之间的独立性(每个观测是独立的) 2. 每个单元格的期望频数应大于5(或至少80%的单元格期望频数大于5且所有单元格期望频数大于1) 3. 数据是随机抽样得到的 Fisher精确检验的假设相对较少: 1. 观测值之间的独立性 2. 数据是随机抽样得到的 3. 边际总和是固定的(非随机的) 通过检查`chisq_test$expected`,我发现部分单元格的期望频数小于5,这违反了卡方检验的假设。因此,Fisher精确检验是更合适的选择,因为它不依赖于大样本近似,特别适用于小样本量的2×2列联表。Fisher精确检验直接计算在边际总和固定的情况下,观察到当前或更极端结果的概率。 Fisher精确检验的p值为`r fisher_test$p.value`,卡方检验的p值为`r chisq_test$p.value`。两者都小于0.05的显著性水平,因此我们拒绝零假设,认为第一任伴侣的命运与雌性对第二任伴侣的接受程度有关。 从数据分析和可视化结果来看,当第一任伴侣被吃掉时,雌性更倾向于拒绝第二任伴侣;而当第一任伴侣逃脱时,雌性更倾向于接受第二任伴侣。这一发现与最初的假设相反,表明雄性被食肉可能并不会增加其精子被接受的机会,反而可能降低后续雄性的交配成功率。这可能暗示了一种复杂的交配策略或生理机制,值得进一步研究。 这一结果对于理解红背蜘蛛的交配行为和性选择具有重要意义,它挑战了我们对雄性被食肉可能带来间接优势的初始假设。 ## 问题2:潜水时进食 ### 研究问题 研究问题是:对于钟乳石海豚来说,捕食潜水是否比非捕食潜水消耗更多的氧气(能量)? ### 假设 - 零假设(H0):钟乳石海豚在捕食潜水和非捕食潜水时的氧气消耗量没有显著差异。 - 备择假设(H1):钟乳石海豚在捕食潜水时的氧气消耗量显著高于非捕食潜水。 数据分析: ```{r} # 读取数据 data <- read.csv("C:\\Users\\31598\\Desktop\\BSI_exam\\crickets.csv", stringsAsFactors = TRUE) colnames(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) ``` ###Visualization ```{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")) ``` ###检查配对t检验的假设 ```{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" # 可根据研究假设修改 ``` ###统计检验: ```{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, 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, "显著", "不显著") ``` ###结论和讨论: ### 结果讨论与结论 研究问题是探究钟乳石海豚在捕食潜水时是否比非捕食潜水消耗更多的氧气(能量)。我的分析流程如下: 首先,我计算了两种潜水类型的平均氧气消耗量,为数据提供了初步的描述性统计。然后,我通过箱线图和配对点图进行可视化,这些图表清晰地展示了两种潜水类型之间的差异模式。 在选择统计检验方法时,我考虑了数据的特性: 1. 数据是配对的 - 每只海豚都进行了两种类型的潜水 2. 我们关心的是两种潜水类型之间的差异 3. 我们有明确的方向性假设(捕食潜水消耗更多氧气) 基于这些特点,配对t检验是最合适的选择。配对t检验的关键假设是: 1. 观测值之间的独立性(每对观测来自不同的个体) 2. 差异值(捕食潜水与非捕食潜水的氧气消耗差)应近似服从正态分布 为了验证第二个假设,我进行了Shapiro-Wilk正态性检验,并绘制了Q-Q图和直方图。Shapiro-Wilk检验的p值为`r shapiro.test(diff)$p.value`,大于0.05的显著性水平,表明我们没有足够证据拒绝差异值服从正态分布的假设。Q-Q图显示数据点大致沿着理论正态分布线分布,直方图也显示了近似的钟形分布。这些结果支持使用配对t检验的合理性。 配对t检验的p值为`r t_test$p.value`,显著小于0.05,因此我们拒绝零假设,认为捕食潜水确实比非捕食潜水消耗更多的氧气。 具体来看,捕食潜水的平均氧气消耗量为`r mean_feeding` ml O2/kg,而非捕食潜水为`r mean_nonfeeding` ml O2/kg,平均差异约为`r mean_feeding - mean_nonfeeding` ml O2/kg。这表明捕食行为本身确实会增加额外的能量消耗,超出了常规潜水的努力。 这一发现对于理解海洋哺乳动物的能量预算和捕食策略具有重要意义。它表明钟乳石海豚在捕食时需要权衡额外的能量投入与获取食物的收益。这种能量权衡可能影响它们的捕食决策、潜水模式和整体生态适应性。未来的研究可以进一步探索不同捕食策略的能量效率,以及环境变化如何影响这些海洋哺乳动物的能量平衡。