因子 - 四向方差分析 - 如何找到统计上有效的组合

问题描述

我必须分析实验数据集才能找到最有效的分子生物学反应组合。

实验有四个因素:温度、RPM、时间、催化活性。我正在测量反应效率(EE)。如何找到四个因素的有效组合以获得最高效率 (EE)?

  • 没有重复测量。所有数据均为独立实验数据

据我所知 - EE 是参数数据,因子是分类数据(固定组合)。 我是否必须进行 Fourway 方差分析?

如果是这样,这个模型是否适合分析

library(lsmeans)
    
lm(EE ~ Temperature + RPM + Time+ Catalytic + 
Temperature:RPM +
Temperature:Time + 
Temperature:Catalytic + 
RPM:Time+
RPM+Catalytic+
Time+Catalytic+
Temperature:RPM:Time + 
Temperature:RPM:Catalytic+
Temperature:Time:Catalytic+
RPM:Time:Catalytic+
Temperature:RPM:Time:Catalytic,"data")

然后,我如何获得每个成对比较的显着值?

这是一个示例的示例数据集。

> dput(df)
structure(list(TEMPERATURE = c(40,40,42.5,45,45),RPM = c(150,150,200,200),TIME = c(24,24,48,72,96,96),CAT = c(4,6,8,10,12,4,12),EE = c(50,53,54,57,59,56,61,64,58,60,62,63,52,55,44,50,49,66,46,65,67,51,42,61)),class = c("spec_tbl_df","tbl_df","tbl","data.frame"
),row.names = c(NA,-120L),spec = structure(list(cols = list(
    TEMPERATURE = structure(list(),class = c("collector_double","collector")),RPM = structure(list(),TIME = structure(list(),CAT = structure(list(),EE = structure(list(),"collector"))),default = structure(list(),class = c("collector_guess",skip = 1),class = "col_spec"))

解决方法

尝试这样的事情:

library(rsm)
mod = rsm(EE ~ SO(Temperature,RPM,Time,Catalytic),data = data)
summary(mod)

这将拟合二阶曲面(模型方程包括所有预测变量、双向交互和平方)。摘要显示了一个静止点和相关的统计数据。如果所有的特征值都是负的,那么它就是一个峰值。否则你就有了某种鞍点。

该模型与 OP 中的模型不同,因为它没有三向或四向交互作用,但包含预测变量的平方,这对于拟合二阶响应曲面非常重要。

更多细节

我不得不稍微修改一下以说明 R 区分大小写的事实!

> mod = rsm(EE ~ SO(TEMPERATURE,TIME,CAT),data = df)

这里存在一个问题,即 RPM 只有两个值,因此我们无法估计纯二次效应。所以有一个 NA 系数,这会扰乱静止点的计算。但是,我们仍然可以绘制拟合曲面(尽管有一些警告消息)

> par(mfrow = c(2,3))
> contour(mod,~TEMPERATURE+RPM+TIME+CAT)

enter image description here

看起来我们最好选择大的 CAT 和较低的 RPM(见那个图),所以再看看:

> par(mfrow=c(1,1))
> contour(mod,~ TEMPERATURE + TIME,at = list(CAT = 12,RPM = 150))

enter image description here

因此,从视觉上看,我们似乎在温度 43.5、时间 65、催化剂 12 和 rpm 150 附近获得了最佳响应。

如果你坚持将这些建模为因子,是可以做到的,但你需要将所有的预测变量转换为因子。这是一个常见的错误;你可以有一个设计的实验,只有几个不同的定量变量值,但 R 不会读你的想法并假设它是一个因素;你必须把它转换成一个。在下文中,我选择拟合最多具有 2 向交互作用的模型。

> facmod = lm(EE ~ (factor(TEMPERATURE) + factor(TIME) + factor(RPM) + factor(CAT))^2,data = df)
> library(emmeans)
> emmip(facmod,TIME ~ TEMPERATURE | CAT*RPM)

enter image description here

最高拟合响应是在催化剂 12、RPM 150、温度 42.5 或更大、时间 96 时。很明显,150 RPM 更好(左与右比较),高 CAT 更好(垂直比较面板) .这些是不同的模型和有些不同的结果。我更喜欢 rsm 方法,因为它更系统。

,

对于筛选 DOE,您收集的数据比所需的多。 这是一个起点,我欢迎补充意见。

我会模拟所有因素的线性组合:

model <-lm(EE ~ TEMPERATURE + RPM + TIME +CAT,data=df)
summary(model)

Call:
lm(formula = EE ~ TEMPERATURE + RPM + TIME + CAT,data = df)

Residuals:
     Min       1Q   Median       3Q      Max 
-10.1850  -1.5742   0.3383   1.7767   9.7033 

Coefficients:
            Estimate Std. Error t value Pr(>|t|)    
(Intercept) 51.50833    6.47932   7.950 1.42e-12 ***
TEMPERATURE  0.27000    0.14245   1.895  0.06056 .  
RPM         -0.10533    0.01163  -9.056 4.10e-15 ***
TIME         0.03639    0.01084   3.358  0.00107 ** 
CAT          1.20417    0.10281  11.713  < 2e-16 ***
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1

Residual standard error: 3.185 on 115 degrees of freedom
Multiple R-squared:  0.6706,Adjusted R-squared:  0.6591 
F-statistic: 58.52 on 4 and 115 DF,p-value: < 2.2e-16

查看斜率估计的符号。虽然这个简单的模型假设线性关系,但斜率的物理意义是比较低值的平均值和高值的平均值。 例如,温度项的斜率是正的。这意味着当温度从低值 (40C) 升高到高值 (45C) 时,效率会增加。

温度、时间和 CAT 作为正斜率,我将采用可用的最大值。
RPM 有一个负斜率,所以我会选择可用的最低值。

因此,我从实验中得出的预测将产生 EE=66, 而实验的最高结果是:

df[which.max(df$EE),]
# A tibble: 1 x 5
  TEMPERATURE   RPM  TIME   CAT    EE
        <dbl> <dbl> <dbl> <dbl> <dbl>
1        42.5   150    96    12    67

现在您可以通过查看此模型的结果来研究非线性关系: 致电:

lm(formula = EE ~ TEMPERATURE * RPM * TIME * CAT,data = df)

此处交互项的斜率比线性项小几个数量级。这可能会产生误导,因为变量未标准化。

祝你好运。