当前位置: 首页 > backend >正文

二水平设计的单次重复

本文是实验设计与分析(第6版,Montgomery著傅珏生译)第6章2k析因设计第6.5的python解决方案。本文尽量避免重复书中的理论,着于提供python解决方案,并与原书的运算结果进行对比。您可以从Detail 下载实验设计与分析(第6版,Montgomery著傅珏生译)电子版。本文假定您已具备python基础,如果您还没有python的基础,可以从Detail 下载相关资料进行学习。

即使是对于中等大小的因子个数,2k析因设计的处理组合的总数也是很大的。例如,25设计有32个处理组合,26设计有64个处理组合等。因为资源通常受限,实验者能做的重复次数也就受到限制。通常可用的资源只允许对设计做一次重复,除非实验者愿意消去某些原来的因子。

每个试验组合仅进行一次实验的风险是,我们可能拟合了含噪声的模型。即,若响应y变化程度大,这可能会误导从实验中得到的结论。如图6.9a所示。该图中,直线代表真实的因子效应。但是,由于出现在响应变量(用阴影带表示)中的随机变异性,实验者得到了用照圆点表示的两个测量到的响应。于是,因子效应的估计接近于零。结果,实验者得到了关于该因子的错误结论。如果响应的变化程度较小,错误结论的可能性也会较小,另一种确保得到可靠的效应估计的方法是增加低(-)水平和高(+)水平因子间的距离,如图6.9b所示。该图中,低因子水平和高因子水平间的增加了的距离得到了真实因子效应的合理估计。

一次重复策略通常用于有相对多的需考虑因子的筛选实验。因为,我们在不能完全确信实验误差小的情形下,采取尽量拉开因子水平是一个好的做法,重读第1章中选择因子水平的指南,也许会有帮助

2k设计的单次重复有时称为无重复的析因设计,因为仅有一次重复,所以没有误差的内在估计(即“纯误差”)。无重复析因设计的一种分析法是,假定某些高阶的交互作用可被忽略,并将它们的均方组合起来用于估计误差.这要借助于效应稀疏原理(sparsity of effect principle),也就是,很多系统的一些主效应和低阶的交互作用处于支配地位,而很多高阶交互作用可被忽路。

    当分析无重复析因设计的数据时,有时出现真正的高阶交互作用。此时,将高阶交互作用集中起来作为误差均方使用是不恰当的。Daniel(1959)提出的分析方法是克服这一困难的简便途径。Daniel建议,检查效应估计量的正态概率图。可被忽略的效应是正态分布的,其均值为零方差为σ2,因此会大致落在图上的一条直线附近;而显著效应有非零均值因此不会落在这一直线上。因此,基于正态概率图,初始模型必须指定包含那些显显不为零的效应。显然可以将忽略的效应组合成误差的估计。

例6.2  24设计的单次重复

一种化学产品是在压力容器中生产的。在一个小规模的试验性工厂中进行一项析因实验,用以研究可能会影响这种产品浅透率的因子,4个因子是温度(A)、压强(B),甲醛浓度(C)和搅拌速度(D)。每一因子取两个水平,

24试验的单次重复所得的数据如:表6.10和图6.10所示。依随机次序进行16次试验。工程师感兴趣的是使渗透率达到最大。在当前的生产条件下,产品的渗透率钓为75gal/h(加仑/小时)。当前生产用的甲醛浓度,即因子C,为高水平。工程师希望尽可能减少甲醛浓度,们一直未能做到这一点,因为这总

是造成渗透率太低

     开始分析这些数据时,先将效应估计量画在正态概率纸上。24设计的对照常数的加号和减号表如表6.11所示。由这些对照,可以估计15个因子效应以及平方和,如表6.12所示。

这些效应的正态概率图如图611所示。沿直线上的所有效应可被忽路,而大的效应则远离此直线。此分析显露出的重要效应是主效应A,C,D以及AC交互作用和AD交互作用,

图6.12a画出了主效应A,C,D的图形。所有这3个效应都是正的,如果我们只考虑这些主效应,就可以将此3个效应以高水平来实验以使渗透率最大化。不过,还需考察任一重要的交互作用。我们知道,凡被显著的交互作用牵涉到的主效应,都没有多大的意义。

图6.12b画出了AC交互作用和AD交互作用的图形。这些交互作用是求解问题的关健。由AC交互作用看出,当浓度处于高水平时温度效应很小,当浓度处于低水平时温度效应很大,在低浓度,高温度时得到最好的结果。AD交互作用显示出,低祖时搅拌速度D的效应小,但高温时搅拌速度D有大的正的效应。因此,当A和D处于高水平而C处于低水平时,会得到最好的渗透率,这就允许将甲醛浓度减小至低水平,这是实验者的另一个目的

import numpy as np

import matplotlib.pyplot as plt

import statsmodels.formula.api as smf

import pandas as pd

import statsmodels.api as sm

from sklearn import linear_model

import seaborn as sns

import matplotlib.pyplot as plt

import mistat

from scipy import special

from scipy.stats import ncx2

x1 = [-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1]

x2 = [-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1]

x3 = [-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,1]

x4=  [-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1]

y1 = [45,71,48,65,68,60,80,65,43,100,45,104,75,86,70,96]

data = {"y1":y1,"x1":x1,"x2":x2,"x3":x3,"x4":x4}

data=pd.DataFrame(data)

model1 = smf.ols(formula='data.y1 ~ data.x1*data.x2*data.x3*data.x4', data=data).fit()

print(model1.summary2())

#这个时候如果进行方差分析是得不到结果的

anova_table = sm.stats.anova_lm(model1, typ=2)

anova_table

#会出现如下错误提示:ValueError: array must not contain infs or NaNs

#下面改变模型

model1 = smf.ols(formula='data.y1 ~ data.x1+data.x2+data.x3+data.x4+data.x1*data.x2+data.x1*data.x3+data.x1*data.x4+data.x2*data.x3+data.x2*data.x4+data.x3*data.x4+data.x1*data.x2*data.x3+data.x1*data.x2*data.x4+data.x1*data.x3*data.x4+data.x2*data.x3*data.x4', data=data).fit()

print(model1.summary2())

anova_table = sm.stats.anova_lm(model1, typ=2)

anova_table

>>> anova_table

                            sum_sq   df           F    PR(>F)

data.x1                  1870.5625  1.0  247.347107  0.040424

data.x2                    39.0625  1.0    5.165289  0.263883

data.x3                   390.0625  1.0   51.578512  0.088077

data.x4                   855.5625  1.0  113.132231  0.059678

data.x1:data.x2             0.0625  1.0    0.008264  0.942284

data.x1:data.x3          1314.0625  1.0  173.760331  0.048203

data.x1:data.x4          1105.5625  1.0  146.190083  0.052533

data.x2:data.x3            22.5625  1.0    2.983471  0.334095

data.x2:data.x4             0.5625  1.0    0.074380  0.830499

data.x3:data.x4             5.0625  1.0    0.669421  0.563451

data.x1:data.x2:data.x3    14.0625  1.0    1.859504  0.402820

data.x1:data.x2:data.x4    68.0625  1.0    9.000000  0.204833

data.x1:data.x3:data.x4    10.5625  1.0    1.396694  0.447071

data.x2:data.x3:data.x4    27.5625  1.0    3.644628  0.307178

Residual                    7.5625  1.0         NaN       NaN

1.设计投影

图6.11中的效应可以有另外的解释方式。因为B(压强)不显著且涉及B的所有交互作用可被忽略,所以可以在实验中放弃B使得设计变为A,C,D的有两次重复的23析因设计。考察表6.10中的列A,C,D,容易看出这些列形成有两次重复的23设计。使用这一简化假定,对数据进行的方差分析概括在表6.13中。由此分析所得的结论与由例6,2所得的结论本质上相同。注意,使用将24单次重复投影到有重复的23中去的方法,可以得到ACD交互作用的估计量以及建立在所谓的隐藏重复(hidden replication)基础上的误差估计量。

将无重复的析因设计投影到因子较少的有重复的析因设计中去这一概念非常有用。一般说来,如果有一个2k设计的单次重复,且其中的h(h<k)个因子可被忽略因而可被丢失,则原先的数据对应于留下来的k一h个因子的具有2h次重复的二水平析因设计。

import numpy as np

import matplotlib.pyplot as plt

import statsmodels.formula.api as smf

import pandas as pd

import statsmodels.api as sm

from sklearn import linear_model

import seaborn as sns

import matplotlib.pyplot as plt

import mistat

from scipy import special

from scipy.stats import ncx2

x1 = [-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1,-1,1]

x2 = [-1,-1,1,1,-1,-1,1,1,-1,-1,1,1,-1,-1,1,1]

x3 = [-1,-1,-1,-1,1,1,1,1,-1,-1,-1,-1,1,1,1,1]

x4=  [-1,-1,-1,-1,-1,-1,-1,-1,1,1,1,1,1,1,1,1]

y1 = [45,71,48,65,68,60,80,65,43,100,45,104,75,86,70,96]

data = {"y1":y1,"x1":x1,"x2":x2,"x3":x3,"x4":x4}

data=pd.DataFrame(data)

model1 = smf.ols(formula='data.y1 ~ data.x1+data.x3+data.x4+data.x1*data.x3+data.x1*data.x4+data.x3*data.x4+data.x1*data.x3*data.x4', data=data).fit()

print(model1.summary2())

anova_table = sm.stats.anova_lm(model1, typ=2)

anova_table

>>> anova_table

                            sum_sq   df          F    PR(>F)

data.x1                  1870.5625  1.0  83.367688  0.000017

data.x3                   390.0625  1.0  17.384401  0.003124

data.x4                   855.5625  1.0  38.130919  0.000267

data.x1:data.x3          1314.0625  1.0  58.565460  0.000060

data.x1:data.x4          1105.5625  1.0  49.272981  0.000110

data.x3:data.x4             5.0625  1.0   0.225627  0.647483

data.x1:data.x3:data.x4    10.5625  1.0   0.470752  0.512032

Residual                  179.5000  8.0        NaN       NaN

http://www.xdnf.cn/news/6725.html

相关文章:

  • 【Shell的基本操作】
  • jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
  • 电平匹配电路
  • windows下找出时间大于某时间的附件
  • JavaScript - JavaScript 运算符之圆括号运算符与方括号运算符(圆括号运算符概述、圆括号运算符用法、方括号运算符概述、方括号运算符用法)
  • 最新开源 TEN VAD 与 Turn Detection 让 Voice Agent 对话更拟人 | 社区来稿
  • [ linux-系统 ] 进程优先级 | Linux内核O(1)算法
  • 解决uni-app开发中的“TypeError: Cannot read property ‘0‘ of undefined“问题
  • 51单片机的lcd12864驱动程序
  • 裸金属服务器和云服务器之间的差别
  • ansible进阶06
  • NX二次开发C#---遍历当前工作部件实体并设置颜色
  • SQL练习(6/81)
  • 【Linux】Linux安装并配置MongoDB
  • 游戏引擎学习第285天:“Traversables 的事务性占用”
  • 基于51单片机和8X8点阵屏、矩阵按键的匹对消除类小游戏
  • 服务器性能参数分析基础:磁盘-CPU-内存
  • 关于如何本地启动xxl-job,并且整合SpringBoot
  • 最新模型集合(仅用于个人收集)
  • 前端批量下载文件打包为zip
  • 【Unity】用事件广播的方式实现游戏暂停,简单且实用!
  • 5月16日day27打卡
  • LED接口设计
  • R语言学习--Day03--数据清洗技巧
  • day32-多线程juc
  • QML元素 - OpacityMask
  • [BJDCTF2020]The mystery of ip
  • Python 在自动驾驶数据标签中的应用:如何让 AI 读懂道路?
  • 2025年山东省省赛数模竞赛C题完整论文+代码分享
  • 【动态导通电阻】GaN HEMT动态导通电阻的精确测量