如何模拟具有一定程度自相关性的过程数据?我在制造环境中工作,经常看到相对正态分布的数据,但不一定是随机分布的。就过程能力计算而言,总体西格玛(标准差)通常大于组内西格玛(控制图西格玛)。发生这种情况的原因有多种,例如原材料批次切换和定期仪器校准。我正在尝试评估一些建议的控制策略,但我不知道如何准确地模拟我的过程。如果我只使用随机正态(),我不会得到任何我通常会在实际过程数据中看到的自相关。有什么想法如何模拟稳定性指数不为 1 的数据吗?这不是数据模式具有可预测周期的传统时间序列问题。预先感谢大家的帮助。
质量和工艺工程回复:如何模拟具有一定程度自相关性的过程数据?如果你不介意玩弄JSL,那么你可以无限期地玩模拟游戏。 请查找附件中的几个旧脚本,它们可能会给您一些想法。 第一个建立在回复的基础上@peng_liu并允许您模拟 AR(2) 过程的输出,并查看估计参数与使用的模型参数如何匹配。 也许这是显而易见的,但无论使用多少参数,并不是每个过程都可以有效地建模为自回归。 我总是发现博克斯和卢切诺所著的书在工业环境中非常有用。 第二个脚本模拟了他们所说的“粘性创新过程”。
回复:如何模拟具有一定程度自相关性的过程数据?@马克贝利向我指出了这篇文章。 我查看了你的数据。 看起来您的数据可以通过所谓的 AR(1) 模型(A 的缩写)进行充分建模一阶自回归。 它是一种描述具有自相关过程的时间序列模型。
对于AR(1)模型,使用JMP公式列进行模拟可以按以下步骤进行:
首先,拟合 AR(1) 模型,报告如下:

我将脚本包含在您的原始数据中并附上更新的数据表。
接下来,创建一个如下所示的公式列。 您需要上一个报告中的三个数字:模型摘要中的两个参数估计值和标准差。 并看看它们是如何在公式中使用的。
现在简单介绍一下这个公式。 首先想象一下JMP表如何计算公式,它是逐行计算的。 所以公式说,如果是第一行,只需根据样本模拟一些数字,这里看起来像随机的 Normal(0,1) 就符合要求。然后,随着行号的增加,公式根据前一行的值递归计算新值。 这就是 Y 的下标的作用。
我也附上成品。 您的原始数据表具有三个脚本。 模拟数据表共有三个脚本。 您可以比较它们的结果,看看模拟数据与原始数据的接近程度。

多说一句,如果你的数据更复杂,AR(1) 不再足够,你可能需要追求更复杂的时间序列模型。 到那时,仿真不再是一件容易的事。 幸运的是,时间序列平台具有内置的模拟功能。 运行所附表中的时间序列脚本(您的表或模拟表)。 在报告中的“模型比较”中,单击模型旁边的红色小三角,然后选择“生成模拟”,这将打开一个用于模拟时间序列的对话框。 该对话框大部分应该是不言自明的,所以我不打算详细说明。

回复:如何模拟具有一定程度自相关性的过程数据?谢谢,马克。如果有帮助的话——这是我试图模拟的数据类型的示例。

回复:如何模拟具有一定程度自相关性的过程数据?谢谢, @ih - 你的漂亮脚本使我能够理解随机多元正态()功能是如何工作的。这对于模拟多个相关因素非常有用——而且我以前没有意识到这一点。
回复:如何模拟具有一定程度自相关性的过程数据?我道歉。 我错了。 您不存在多重相关性(即,多个变量)。 你有一个时间序列。 让我进一步研究一下。
回复:如何模拟具有一定程度自相关性的过程数据?经过一番调查,一些注意事项:
- 值中添加了一些噪声,标准差似乎接近 1
- 您需要定义一个均值向量和与均值向量具有相同维度的对称协方差矩阵。
一些例子:
Names Default To Here( 1 );
//Make a dataset from a mean vector, covariance matrix, and number of rows
Make Correlated Table = Function({mv, cm, nr, name = "Data Table"}, {dt},
randmvnMat = Random Multivariate Normal( mv, cm, nr );
dt = New Table( name );
dt << Set Matrix(randmvnMat);
dt << Scatterplot Matrix( Y( dt << Get Column References ), Matrix Format( "Lower Triangular" ), Density Ellipses( 1 ) );
dt
);
dt1 = Make Correlated Table(
mv = [0 1 1 0],
cv = [
1 0 0 0,
0 1 0 0,
0 0 1 0,
0 0 0 1
],
nr = 100,
name = "No Correlation"
);
dt2 = Make Correlated Table(
mv = [0 10 20],
cv = [
1 1 0,
1 1 0,
0 0 1
],
nr = 20,
name = "1-2 Correlated"
);
dt3 = Make Correlated Table(
mv = [0 10 20],
cv = [
1 1 1,
1 1 1,
1 1 1
],
nr = 20,
name = "1-2-3 Correlated"
);
dt4 = Make Correlated Table(
mv = [0 10 20],
cv = [
1.0 0.8 -0.5,
0.8 1.0 0.0,
-0.5 0.0 1.0
],
nr = 20,
name = "Some Correlation"
);
回复:如何模拟具有一定程度自相关性的过程数据?谢谢, @马克贝利的建议。这看起来应该正是我所需要的,但恐怕我无法弄清楚如何正确实施它。首先,我只想在数据表中生成一个模拟列。我知道 sigma 内的平均值、总体过程标准差(控制图 sigma - 在这种情况下基于移动极差)以及“自相关”值(来自分发平台中的汇总统计数据)。我还可以从 Fit Y by X 获得过程参数相对于其自身 Lag()(一行)的相关值 - 并且我可以对不同的行滞后重复相关分析。您是否有机会帮助我理解根据我所掌握的信息我应该如何构建公式(或者让我知道我是否完全错过了机会)?
回复:如何模拟具有一定程度自相关性的过程数据?非常感谢, @ih ,求建议!我会尝试一下这个和马克的想法。
回复:如何模拟具有一定程度自相关性的过程数据?编辑:我也误读并给出了多重相关而不是自相关的建议。 哎呀!
我没试过@马克贝利的建议,我认为这可能是做同样事情的更简单的方法:
您可以尝试使用主成分,为潜在变量创建随机值,然后根据这些潜在变量计算模拟变量并添加单变量误差。

使用这种方法,您甚至可以通过查找自己的载荷、系数、方差和误差来制作与您自己的过程类似的数据,然后模拟数据。
这是一个例子:
New Table( "Example Correlated Data",
Add Rows( 100 ),
New Column( "Prin 1", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Normal( 0, 1 ) )
),
New Column( "Prin 2", Numeric, "Continuous", Format( "Best", 12 ),
Formula( Random Normal Mixture( [-1, 2], [0.3, 0.6], [0.25, 0.75] ) )
),
New Column( "X1", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * 20 + :Prin 2 * 1 + 5 + Random Normal( 0, 3 ) )
),
New Column( "X2", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * 2 + :Prin 2 * 1 + 3 + Random Normal( 0, 2 ) )
),
New Column( "X3", Numeric, "Continuous", Format( "Best", 12 ),
Formula( :Prin 1 * -1 + :Prin 2 * 0.3 + 200 + Random Normal( 0, 0.2 ) )
)
)
回复:如何模拟具有一定程度自相关性的过程数据?有一个函数可以达到这个目的:
