问题标签 [experimental-design]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
586 浏览

python - 将参与者随机重新分配到组中,以使最初来自同一组的参与者不会最终进入同一组

我基本上是在尝试进行这种蒙特卡罗类型的分析,在这种分析中,我将实验中的参与者随机重新分配到新组,然后在给定随机新组的情况下重新分析数据。所以这就是我想要做的:

参与者最初被分成八组,每组四名参与者。我想将每个参与者随机重新分配到一个新组,但我不希望任何参与者最终与来自同一原始组的另一个参与者进入一个新组

这是我在这方面的进展:

这里的基本思想是我随机将参与者重新分配到一个新组,其约束条件是(a)新组没有他们原来的组合作伙伴之一,(b)新组没有 4 或更多的参与者已经重新分配给它。

这种方法的问题是,很多时候,当我们尝试重新分配最后一个组时,唯一剩余的组槽位在同一个组中。我可以尝试在失败时重新随机化直到成功,但这感觉很愚蠢。另外,我想进行 100 次随机重新分配,所以这种方法可能会变得非常慢......

所以必须有一个更聪明的方法来做到这一点。我也觉得应该有一个更简单的方法来解决这个问题,考虑到目标的简单性(但我意识到这可能会产生误导......)

0 投票
0 回答
47 浏览

r - 在数据框中创建因子以最小化与 R 中其他变量的相关性?

我正在尝试创建一个具有 3 个级别的因子变量并将其添加到现有变量中data frame,条件是这个新因子data frame.

有没有可以帮助我完成此任务的 R 函数?

详细地说,我有一个现有的实验设计,我想用这个具有 3 个水平的新因子变量来扩充它,条件是它与现有设计尽可能正交。

通常,我使用AlgDesign该函数创建 d 最优设计optFederov(),但我不清楚是否可以强制该包中的函数来完成我想要的。

0 投票
1 回答
58 浏览

algorithm - 如何创建受约束的随机实验方案?

我正在尝试在 Matlab 中构建一个协议,以在框架内随机化实验试验订单,但无法创建有效的算法来做到这一点。

问题

我想管理T试验次数([t1, t2, t3…]每个都有不同的参数),并重复这些R运行[r1, r2, r3…]。每次运行都将由完全相同的试验组成,但每次运行的顺序是随机的。此外,随机化受到限制,以说明在给定运行中更早或更晚的影响。在所有运行中,每次试验必须在运行的早期、中期和后期发生相同的次数。为此,每次运行都被分成G[g1, g2, g3…]。我想制作一个算法,该算法将生成一组R随机运行,受到约束,以使每个试验出现在任何运行时间t的每组中。N=R/G

例子

T = 9试验[t1, t2,…, t9]将重复R = 6运行[r1, r2, …, r6]。将使用多个组G = 3[g1, g2, g3]、 。下面显示了一组 6 次运行的示例。(|字符分隔组。组内的顺序无关紧要,因为组内的试验顺序将在以后随机化。组在构建运行之外没有任何意义。一旦构建运行,它将被视为一个有凝聚力的单元。)

请注意,每个试验每次运行(行)出现一次,每组出现一次N = R/G = 6/3 = 2(“|”分隔列)。每个单独的列都是一个 slot [s1, s2, …, s9],每个列包含每次运行的不同试验。我的算法实现需要R = 10, 和T >= 320.

我的尝试

我尝试了 3 种不同的算法,所有这些算法都失败了,要么完全失败(使用T = 20,小),要么它们不能很好地扩展(需要很长时间T = 320)。我发现Gusing G = max(gcd(d(R), T)),其中gcd是两个参数之间的“最大公约数”,并且d是“除数”函数,它列出了输入的所有除数(不包括输入本身)。我的算法的简要说明:

1.为每次运行创建一个随机试用订单作为原型(每次运行相同的随机原型)。对于每次运行,通过每个插槽并在随机选择的不同插槽中切换试验与试验(假设两个试验都允许占用各自的新插槽,因为任何给定试验可以出现在同一位置的最大次数)组,N)。因为随机化最终会导致不存在任何开关的情况,所以每当这种情况发生时,算法都会重新启动,直到找到最终解决方案。这T = 20通常在 10 秒内有效,但很快就会变得棘手。

2.对于每个试验,通过每次运行并随机选择该试验仍然需要并且仍然允许加入的组(该组未满员,并且少于N同一试验在该组中结束一直运行到这个)。这个算法也会导致没有选项存在的情况,所以卡住的时候也会重启。该算法需要很长时间才能收敛。

3.对于每次运行,将每个试验分配到一个组,首先分配具有最少分配组数的试验。这个算法也卡住了,也需要很长时间。

如果您愿意,我可以为这些实现提供 Matlab 代码。


理想情况下,我想要一个确定性算法来找到每个唯一的组组合(尽管我不知道存在多少),并且我会选择一个随机分组来每次使用。任何有关此问题的帮助将不胜感激。

0 投票
1 回答
201 浏览

python - Python:使用控件停止 Skript 而不会丢失数据

我有一个 python 科学脚本,用于计算循环运行的某种传热和流动动力学。每次它通过循环时,它都会打印出一些关于脚本状态的信息。有了这些数据,我可以在运行时看到它是否是可行的模拟,或者有时在某个点它变得不可行。

问题是,如何在不丢失数据的情况下停止脚本?因为在整个模拟结束时我会打印出一些图表等,但我不想运行脚本直到最后,当我已经看到时。所以我需要的是一些用户中断,比如 ctrl+c。我想过尝试捕捉这个键盘用户中断,然后转到模拟结束以绘制图形等。

顺便说一句,我在 Spyder 工作。

感谢您提供任何建议或更复杂的解决方案,这里有一个小代码示例:

所以通常我需要 10k 次运行,但是当我看到让我们说 i=500 时它变得不可行,但不想要松散的计算数据(calculated_data),我希望以某种方式中断用户。但我也不想每一步都询问用户。

0 投票
1 回答
1771 浏览

python - python pandas:根据百分比随机分配控制组与治疗组

我正在做一个实验设计,我需要通过预先存在的分组将数据框 df 按百分比拆分为对照组和治疗组。

这是数据框df:

现在我需要在 df 中添加一个标记为“Flag”的列。对于第 1 组,我想随机分配 50% 的“控制”和 50% 的“测试”。对于第 2 组,我想随机分配 40% 的“控制”和 60% 的“测试”。

我正在寻找的输出:

0 投票
2 回答
1210 浏览

python - 根据 2 组以上的百分比随机分配控制组与治疗组

Piggy 回避我自己之前的问题python pandas: 根据 % 随机分配控制组与治疗组

感谢@maxU,我知道如何将随机控制/治疗分组分配给 2 个组;但是如果我有 3 个或更多组怎么办?

例如:

当我只有两组时,我有一个很好的答案:

但是,如果我想以这种方式拆分它怎么办:

  • 第 1 组:50% 控制和 50% 测试
  • 第 2 组:40% 控制和 60% 测试
  • 第 3 组:20% 控制和 80% 测试

@MaxU 的回答很棒,但不幸的是,拆分并不准确

当我测试它时,我没有得到精确的分割。

第 1 组应为 135/135。

0 投票
1 回答
660 浏览

r - R中的部分因子设计 - 复制给定矩阵

我试图在 R 中重现以下部分因子设计。每个变量有 3 个级别,并且有 10 个变量。在此设计中,前 3 个变量 (AC) 进行了全因子测试。

3 10 级因子部分因子设计

我尝试过:

和:

这给了我 3^10 个设计,运行 27 次,但是前 3 个变量不是全因子。

0 投票
0 回答
231 浏览

c++ - 如何通过实验确定进程/线程的调度量?​

所以我试图通过实验确定我的 Linux 4.4.0-98-generic OS 上的(平均)时间片,给出了这里的提示。以下是我使用 C++14 STL 的代码。

问题是我总是为所有进程获得相同的数字。例如输出:

而且,时间片大约是半微秒,这似乎很奇怪。diff_precision所以我尝试了从 1ns 到 100ms的不同值。对于不同的精度,它给出了该范围内的输出;例如:对于 1ms 精度,它会输出一堆5531380. 确实很奇怪。

这甚至是找出操作系统时间片的可靠方法吗?还是我应该只相信源代码中的值?

PS:“该标题的问题已经存在;请更具体一点。” 哦,来吧。

0 投票
2 回答
50 浏览

r - 在R中将事件分配给日历日期

这是为我的实验创建抽样设计。我想在 2018 年的每个星期一调查 8 个不同的人。我调查他们的顺序需要在每个星期一是随机的。例如。A,B,C,D... 一个星期一,然后是下一个 C,B,A,D....

要尝试使用 R,我有一个名称列表:namelist<- ("A", "B", "C",...)包含 8 个不同的名称。我想将这些随机分配给一年中的每个星期一。为此,我创建了 2018 年全年的日期X<- ("01-01-2018", "02-01-2018",...)列表和相应的工作日列表Y<- ("Monday", "Tuesday",...)

我需要为一年中的所有星期一随机分配整个名单。最好的方法是什么?我可以为此使用for循环吗?还是有其他方法可以做到这一点?

0 投票
0 回答
47 浏览

r - 在部分非平衡实验设计中选择合适的随机结构

我们设计了一项操纵两个因素的研究:一个因素 ( FACTOR1) 有 2 个水平 (A,B),第二个因素 ( FACTOR2) 有三个水平 (C,D,E)。因为在心理学中,我们经常不得不进行不合理的耗时实验,我们计划将实验(3by2)分成两个实验(2by2),参与者接触到所有级别FACTOR1FACTOR2. 向所有参与者展示了一个级别(C - 逻辑参考级别),FACTOR2而暴露于 D 的一半参与者没有暴露于 E(反之亦然)。

我们有 41 名参与者和 60 个不同的项目。我认为我们可以使用混合模型来利用更好的精度来估计 C 和逐项完全交叉设计,仍然保持不错的能力来捕捉 D 和 E 之间的差异,而无需添加第三个(按主题)因素参考实验参与者被分配到哪个。

由于正确随机结构的规范对于获得保守结果至关重要,因此我拟合了最大结构并测试了相互作用:

该模型没有收敛,可能是因为它试图计算参与者未接触到的 FACTOR2 水平的调整(只看到 C 和 E 的参与者也针对 D 进行了调整)。

我们最好的选择是什么?

仅在逐项随机组件中使用完整规范并“放松”按主题组件?