给定分布的随机子集选择你好 ...
我试图从给定正态分布的一列数据中随机选择。 给定的分布与数据的分布不同。
有没有一种简单的方法可以使用表子集的当前选项来实现此目的? 我看不到任何可以帮助我的东西。
我还尝试了一个公式,基本上是 NormalDensity (X, mu, sigma) 来根据给定的分布绘制“数据”的密度。
但我仍然不知道如何从这个公式中均匀和随机选择,以便我的结果尽可能接近给定的分布。
谢谢。 感谢您的支持。
回复:给定分布的随机子集选择我还推荐免费课程“工业问题解决的统计思维”( https://www.jmp.com/en_us/online-statistics-course.html )。 尽管您可能不需要学习统计数据,但演示展示了如何在 JMP 中执行常见分析。 我认为这些演示可以向您展示 JMP 在统计课程中的表现,以及一些基本的数据操作和绘图技术。
回复:给定分布的随机子集选择我建议您花时间访问 JMP 网站。 主页顶部有一个菜单项,学习 JMP ,您可以通过它访问我们为帮助您学习使用 JMP 而制作的众多资源中的任何一个。 另一个学习领域是探索峰会站点在活动菜单。 例如约翰·萨尔(John Sall)过去几年的主题演讲会给你一些见解。
您在教授统计学课程吗? 有几个部分专门针对教师。 有些材料可以作为学生的作业卸载。
我同意您的观点,在版本 15 中,JMP 非常复杂且精密。 它的一些最佳功能并不明显。 大量学习和采用新工具是你的心态。 例如,我教授 JMP,许多新用户看到 JMP 数据表后会想:“这只是另一个电子表格而已。” 这个起点就是挫败感开始的地方。 (我并不是说这是你的第一印象,但这很常见。 BI 认为您了解统计分析和电子表格分析之间的区别,因为您使用 MINITAB。) 我上面提到的资源旨在揭示 JMP 思维方式,使其有意义,并且您可以快速预测 JMP 将如何帮助您解决新问题。
回复:给定分布的随机子集选择我知道这一点,但是对我正在寻找的东西的搜索使我得到了这个答案。我正在尝试确定切换到 JMP 来学习统计课程是否有意义。越来越明显的是,JMP 对于简单的事情来说并不直观且困难。即使您对一个简单示例给出的答案也不简单或直观。
到目前为止,我对 JMP 的看法是,学习曲线很高,但如果您正在进行更复杂的统计建模或实验设计,可能是值得的。但是,我不确定 JMP 相对于 R 或 SPSS 等其他产品是否有优势。 JMP 就像当今的许多产品一样,由专家或计算机程序员设计供专家或计算机程序员使用,但对于那些非这些领域的人来说仍然相对难以访问。 很少有产品能够很好地考虑和迎合广泛的用户群。
也许我的看法会改变,因为我还没有放弃 JMP,但到目前为止它让我欣赏 Minitab 的简单界面。
回复:给定分布的随机子集选择这里最初的请求不是对另一列进行简单的随机采样。
如果这就是您所需要的,您可以使用Col Shuffle() 函数从另一个列中随机选择生成一个新列。

回复:给定分布的随机子集选择你一定是在跟我开玩笑。从另一列中获取随机样本,并将其在单独的列中显示给您,是 Minitab 中的菜单选择。这个问题的答案需要两页的讨论和几十行代码。为什么简单的事情在 JMP 中却如此困难?
回复:给定分布的随机子集选择杰夫
您对 Ian 原始解决方案的修改非常有效。 我现在可以提取具有指定分布的随机数据。 很高兴看到这作为表子集下的一个选项......
我的问题100%解决了。
感谢您的支持。
回复:给定分布的随机子集选择该方法@ian_jmp find 是我尝试的第一件事,但我显然太早放弃了它,因为 Ian 找到了克服我遇到的一些缺点的方法。 不错的工作。
至于消除行的重新采样,我相信 Ian 建议添加以下行:
bv[Loc Min( dist )] = .;
到 for() 循环。 因此:
Names Default To Here( 1 );
// Make a big table
dt1 = New Table( "Big",
New Column( "Values", Numeric, Continuous, Formula( Random Uniform( -3, 3 ) ) ),
New Column("Row", Formula(Row()))
);
dt1 << addRows( 40000 );
dt1 << runFormulas;
Column( dt1, "Values" ) << deleteFormula;
// Make a small table
dt2 = New Table( "Small",
New Column( "Values", Numeric, Continuous, Formula( Random Normal( 0, 1 ) ) )
);
dt2 << addRows( 40 );
dt2 << runFormulas;
Column( dt2, "Values" ) << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column( dt1, "Values" ) << getValues;
sv = Column( dt2, "Values" ) << getValues;
selectedRows = J( N Row( sv ), 1, . );
For( i = 1, i <= N Row( sv ), i++,
dist = (bv - sv[i]) ^ 2;
selectedRows[i] = Loc Min( dist );
//the line below prevents rows from the "Big" table from being re-sampled
bv[Loc Min( dist )] = .;
);
// Subset dt1
dt3 = dt1 << subset( rows( selectedRows ), LinkToOriginalDataTable( 1 ) );
// Look at the distributions
New Window( "Compare Distributions",
H List Box(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
回复:给定分布的随机子集选择抱歉 - 由于放假,我有几天无法使用计算机。 但我确信其他人也能做到。 。 。
回复:给定分布的随机子集选择伊恩
我的目标是获取约 46K 的子样本数据,其中 44K 是重复的。
您能写信给我“bv”的那一行来表达您的建议吗?
再次感谢。
回复:给定分布的随机子集选择是的,我想知道这一点。 现在确实如此,但如果您不想重复,只需添加一行额外的行来设置已发现缺少“.”的向量“bv”的元素。
回复:给定分布的随机子集选择伊恩,
忘了问一个问题。 您的选择是从原始表中唯一完成的,还是有可能在子表中出现重复的选择?
谢谢
回复:给定分布的随机子集选择伊恩,
这太棒了。 我想到了类似的方法,但由于我的基本脚本知识而无法这样做。
我能够根据我的数据调整它并得到我想要的。 我也许可以将其扩展为 2 参数分布选择,我应该能够从您的脚本中做到这一点。
感谢您的支持。
回复:给定分布的随机子集选择杰夫,
谢谢你的努力。
你的建议有一点机会。 我将其应用于我的数据,不幸的是,由于选择是随机的,因此它不起作用。 我运行了大约 3000 次迭代,并在 10 小时后停止。 数据均值的变动微不足道。
这不是一个简单的技术(除非你的名字是伊恩).. 我想象某种优化器会尝试从更有意义的方向随机拉动。 GA 可能有点大材小用,但肯定可以做到这种优化。
从统计学的角度来看,这对于我所做的事情来说是完全可以的。 400+K代表着一个资产大数据。 我正在尝试查找与正在调查的子组类似的资产。
再次感谢。
回复:给定分布的随机子集选择如果 ”因此,底线是,我需要从 400K+ 行中子选择多个子样本,以便所选子样本的分布尽可能接近给定的分布“就是你想要的,也许你可以使用这种方法,或者类似的方法?
NamesDefaultToHere(1);
// Make a big table
dt1 = NewTable("Big", NewColumn("Values", Numeric, Continuous, Formula(RandomUniform(-3,3))));
dt1 << addRows(40000);
dt1 << runFormulas;
Column(dt1, "Values") << deleteFormula;
// Make a small table
dt2 = NewTable("Small", NewColumn("Values", Numeric, Continuous, Formula(RandomNormal(0,1))));
dt2 << addRows(40);
dt2 << runFormulas;
Column(dt2, "Values") << deleteFormula;
// For each value in dt2, find a value in dt1 that's closest
bv = Column(dt1, "Values") << getValues;
sv = Column(dt2, "Values") << getValues;
selectedRows = J(NRow(sv), 1, .);
for(i=1, i<=NRow(sv), i++,
dist = (bv - sv[i])^2;
selectedRows[i] = LocMin(dist);
);
// Subset dt1
dt3 = dt1 << subset(rows(selectedRows), LinkToOriginalDataTable(1));
// Look at the distributions
NewWindow("Compare Distributions",
HListBox(
dt1 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt2 << Distribution( Continuous Distribution( Column( :Values ) ) ),
dt3 << Distribution( Continuous Distribution( Column( :Values ) ) )
)
);
回复:给定分布的随机子集选择
根据您的目的,获取这样的子集可能在统计上存在问题,但一种方法是使用 Resample Freq() 生成随机样本,然后检查该样本以查看它是否满足您所需的特征,从而对其进行暴力破解。 这是一个原型,它生成一个表来模拟原始数据,然后对其进行重新采样,使用分发平台来测试样本。
dt = New Table( "original",
Add Rows( 1000 ),
//:parameter will have a random normal distribution with mean=0
//and a stddev=1
New Column( "parameter",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Random Normal() )
),
New Column( "Row", Numeric, "Continuous", Format( "Best", 12 ), Formula( Row() ) ),
//The Resample Freq() function generates a frequence count for sample with replacement
//the .05 argument is the sample rate, i.e. we want a sample size of 5% of the original table
New Column( "Resample Freq",
Numeric,
"Continuous",
Format( "Best", 12 ),
Formula( Resample Freq( 0.05 ) ),
)
);
//Generate a distribution of :parameter using the resample frequency as a Freq column to get
//Automatic Recalc will cause the Distribution to rerun when the Resample Freq column is re-evaluated
//to get a new sample
New Window( "Dist comparison",
H List Box(
dt << Distribution( Continuous Distribution( Column( :parameter ) ) ),
dist = dt << Distribution(
Automatic Recalc( 1 ),
Freq( :Resample Freq ),
Continuous Distribution( Column( :parameter ) )
)
)
);
//set the minimum mean value we will accept for the subsample
target_mean_min = .249;
//set the minimum mean value we will accept for the subsample
target_mean_max = .251;
//how many iterations are we willing to try before giving up?
max_iter = 1000;
iter = 1;
While(
//Report( dist )[Number Col Box( 2 )][1] is the mean value from the Distribution report
!(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <= target_mean_max) &
iter <= max_iter,
//get a new sample
Column( "Resample Freq" ) << eval formula;
iter++;
);
If(
//check to see if we exited because we hit max_iter or got a good sample
iter > max_iter & !(target_mean_min <= Report( dist )[Number Col Box( 2 )][1] <=
target_mean_max)
,
Print( "No result in " || Char( max_iter ) || " random samples." ),
//got a good sample so get the subset
dt << select where( :resample freq != 0 );
dt << Subset( Selected Rows( 1 ), Selected columns only( 0 ) );
);
回复:给定分布的随机子集选择我只是在这里自由思考,但也许您可以尝试的是使用分布平台确定分布形状,然后将数据转换为正态分布。然后输出级别,然后进行分层子集化。只是一个想法。
回复:给定分布的随机子集选择吉姆,谢谢你的建议。
但是您的提案没有办法根据给定的分布强制选择。 所以它不会产生我正在寻找的东西。 为了验证,我确实遵循了这些步骤,它生成了一个与原始版本非常相似的版本。
也许我没有解释清楚。
我有 400k+ 行 XN 列数据(巨大的矩阵)。 如果为了论证起见,我将 N 个参数之一称为“X”。
该数据的 X 分布 - 将其称为 X.dist1。
我有第二个数据集,其中有 Xagain,这次是 X.dist2
X.dist1 不太远,但与 X.dist2 不同。
鉴于我在第一个数据集中有大量数据(400k+),因此我尝试从 1 中子选择数据集,以便所选数据 X 分布是我能得到的最接近 X.dist2 的数据。
因此,我正在寻找“表子集”下的一些功能,我可以在其中指定正态分布特征或使用公式然后使用“表子集”。
对于公式,我将 dataset1 的密度与所需的 X.dist2 相对应。
但现在我需要一种从公式输出中采样的统一随机方式,以强制结果分布为 ~ X.dist2
或者任何其他方式...
如果我要使用表子集 - 解决方案需要指定要从中提取的参数的正态分布。
否则,我需要从参数中找到统一的随机选择(公式方法)。
回复:给定分布的随机子集选择我相信您可以通过简单的两步过程获得您想要的东西。
1. 打开您有问题的专栏的分发平台。然后
保存==>级别编号。
这将创建一个新列,其分布直接取自实际数据
2. 创建数据子集并指定
随机-采样率:
并且
分层,基于在上述步骤中创建的新级别列
回复:给定分布的随机子集选择我的真正目标是比较两个可用数据集中的 N(其他)参数,我并不是想创建一个虚构的分布。 (也许我误解了你的建议)。
给定的分布是对可能影响其他参数的重要参数的约束。 我试图从“数据”到给定的分布中选择具有相似分布的资产,以便最大限度地减少这个有影响力的参数的影响。 在这种情况下,“分布”仅适用于单个参数,而不适用于多个参数。
因此,底线是,我需要从 400K+ 行中子选择多个子样本,以便所选子样本的分布尽可能接近给定的分布。回复:给定分布的随机子集选择我明白了...我没有完全理解你原来的帖子。 你是对的,我的建议只会返回一个与原始分布具有非常相似参数的分布。 如果您想要观察具有所需参数估计值的随机变量,为什么不能只创建一个包含这些参数的列并继续。 当然,具体的观察结果不一定存在于原始专栏中,但这可能会或可能不会影响您试图在分析或实践上实现的目标? 它们至少是合理的观察结果,尽管不完全匹配。
回复:给定分布的随机子集选择彼得..谢谢你的建议。
但这似乎不起作用。
我的原始数据的平均值/标准差是:来自非常大的样本(400K +)的 12816 和 1726。
我正在尝试向下选择一个更接近 14300 和 2050 的子样本
我尝试了你对公式的建议(即数据的密度为 14300, 2050),除非我可以强制在密度中统一选择这个随机分布,否则我认为我无法得到我需要的东西。 事实上,二次抽样的结果符合原始分布的预期。回复:给定分布的随机子集选择一旦您获得了要从中采样的总体列,请尝试以下工作流程:
1. 选择要从中采样的列。
2. 从 JMP 主菜单栏中,选择行 -> 行选择 -> 随机选择 -> 然后选择样本大小或采样率。
这将返回原始数据表中选定的列,然后行子集将为您提供一个数据表。