You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

自制数据框与Excel导入数据计算EC50结果差异原因及多样本计算方法

EC50计算差异原因及多样本计算方案

一、自制数据框与Excel导入数据的EC50差异原因

两种方式结果不同的核心问题几乎都出在数据匹配或数据一致性上,具体可能的情况:

  • 浓度与响应值对应关系错误:
    你在Excel导入后用rep(c(0, 0.005,...), length.out = nrow(two_fold_tebu_long_data))生成浓度列时,若原Excel数据行数不是10的整数倍(每个菌株对应10个浓度梯度),会直接导致浓度值与响应值错位,和自制数据框中严格一对一的浓度-响应对应关系完全不符,拟合结果自然不同。
    另外,gather(key = "strain", value = "response", -strain)的逻辑存在错误:-strain表示排除strain列,但同时将key设为strain,会导致生成的菌株标签混乱,进一步打乱数据结构。
  • 数据类型或完整性差异:
    Excel导入的响应值可能存在隐藏空格、非数值格式(如带单位)或缺失值,而自制数据框是纯数值型,模型拟合的基础数据本质不同,结果必然出现偏差。
  • 模型拟合初始值波动:
    drm函数的LL.4模型会根据数据分布选择初始拟合值,若两种方式的数据结构(如是否存在重复值)不同,可能导致拟合过程收敛到局部最优解,出现细微差异,但这种差异通常很小,若差异显著则仍是数据本身的问题。

二、多样本EC50的计算方法

正确的多样本EC50计算需要对每个菌株单独拟合剂量-响应模型,以下是修正后的代码示例:

修正后的Excel导入与多样本计算流程

# 加载依赖包
library(readxl)
library(drc)
library(tidyverse)

# 1. 导入Excel数据(假设Excel结构:第一列为浓度梯度,后续列对应不同菌株的响应值)
two_fold_tebu_data <- read_excel("test.xlsx", sheet = 1)

# 2. 转换为长格式:确保浓度与菌株响应值正确匹配
two_fold_tebu_long_data <- two_fold_tebu_data %>%
  gather(key = "strain", value = "response", -concentration)

# 3. 按菌株分组拟合模型并提取EC50
ec50_results <- two_fold_tebu_long_data %>%
  group_by(strain) %>%
  do(
    model = drm(response ~ concentration, data = ., fct = LL.4()),
    ec50 = ED(.$model, 50) %>% as.data.frame()
  ) %>%
  unnest(ec50) %>%
  select(strain, EC50 = Estimate, SE = Std. Error)

# 输出结果
print(ec50_results)

关键说明

  • 确保原Excel数据结构正确:第一列为浓度梯度,每一列对应一个菌株的所有响应值,这样gather后每个菌株的响应值会与对应浓度自动匹配。
  • 用group_by(strain) + do()实现分组拟合,每个菌株单独生成剂量-响应模型,再提取各自的EC50和标准误。
  • 若Excel数据是每行对应一个菌株的某个浓度响应,需确保浓度列已存在,无需手动用rep生成,避免匹配错误。

补充:自制数据框的EC50提取

你之前的自制数据框代码仅拟合了模型,未提取EC50值,正确提取方式如下:

library(drc)
library(tibble)

concentration <- c(0, 0.005, 0.05, 0.5, 2.5, 5, 12.5, 25, 50, 100)
response <- c(1.0000000, 0.9873418, 1.0000000, 0.8734177, 0.8101266, 0.7848101, 0.6962025, 0.5696203, 0.3670886, 0.1772152)

data <- data.frame(concentration, response)
EC50_model <- drm(response ~ concentration, data = data, fct = LL.4())
ec50_value <- ED(EC50_model, 50)

# 输出EC50及标准误
tibble(EC50 = ec50_value[1,1], SE = ec50_value[1,2])

内容的提问来源于stack exchange,提问作者user168964

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 04:55:58