获取最短半范围的值有没有办法从离群值箱线图中的最短半可见度中获取实际值?
回复:获取最短半范围的值你好@vince_faller
后来有人问了这个问题的更广泛版本https://community.jmp.com/t5/Discussions/Finding-the-X-range-that-will-include-a-certain-portion-of-the-Y/td-p/225474/jump-to/第一条未读消息
我的解决方案如下。如果它很强大,有人可以破解吗?谢谢。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
// this is just in case wewant to bring the data back to original row order later.
rowcol = New Column("Row", Numeric, "Continuous", Format("Best", 12), Formula(Row()));
dt << run formulas();
rowcol << suppress eval( true );
// now we start working
dt << Sort( By( :weight ), Order( Ascending ), replace table );
// here is where we define the share of included range (0.5)
difcol = New Column("dif", Numeric, "Continuous", Format("Best", 12), Formula(Abs(:weight - Lag(:weight, -(N Rows() * 0.5)))));
dt << run formulas();
difcol << suppress eval( true );
start = (dt<<GET rows="" where="">= start, row()<=end),1 ,0 ));</GET>回复:获取最短半范围的值嗨托尼娅,
你能想到的任何理由我都会得到价值
邻近的(0,0,0,0)
?
绝对不是0-0这样的最短射程。 抱歉,我无法发布实际数据。 我看看是否可以匿名。
*编辑*没关系。 由于某种原因,我的相邻对象转到 Framebox(1),而所有 Framebox(2) 均为 0。
回复:获取最短半范围的值嗨托尼娅,
你能想到的任何理由我都会得到价值
邻近的(0,0,0,0)
?
绝对不是0-0这样的最短射程。 抱歉,我无法发布实际数据。 我看看是否可以匿名。
回复:获取最短半范围的值感谢您分享<<获取日记主意。 对我来说真的很聪明而且很新鲜。
这是通过原始计算获得限制的尝试。 在我有限的测试中,它与期刊数字相比较。 它似乎按预期处理缺失的值和关系(但我可能错过了一些东西)。
// Function for calculating the lower and upper limits of
// Shortest Half Range of a numeric column.
shorth = Function({col}, {M, n, d, i = 0},
M = col << get values;
M = Sort Ascending(M[Loc Nonmissing(M)]);
n = N Row(M) / 2 + Mod(N Row(M), 2);
d = Loc Min(J(1, n, M[(i++) + n] - M[i]));
lo = M[d];
hi = M[d + n - 1];
);
// Test
dt = Open("$SAMPLE_DATA/Big Class.jmp");
shorth(Column(dt, "weight"));
Show(lo, hi);
回复:获取最短半范围的值这并不是真正的答案,但在某些情况下可能有用。 如果您只想查看最短的半值,可以另存为交互式 HTML 并将鼠标悬停在红色括号上。
Interactive HTML Box Plot Shortest Half ValuesInteractive HTML Box Plot Shortest Half Values交互式 HTML 箱线图最短半值
在移动浏览器中查看时,只需点击红色括号即可。
回复:获取最短半范围的值感谢您完成我的剧本,马克!我从来都不是使用角色功能最高效的。
回复:获取最短半范围的值托尼亚的解决方案很聪明,也切中要害。 剧本的其余部分实际上并没有那么糟糕。 变量 jrn 包含分布平台的字符串表示形式(不仅仅是离群值箱线图)。 因此,让我们使用字符串函数来找出所需的红色括号末端。 我们使用 Contains() 找到参数,并通过连续调用 Word() 来提取位:
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dist = dt << Distribution( Y( :weight ) );
rpt = dist << Report;
jrn = rpt[FrameBox(2)] << Get Journal;
pos = Contains( Upper Case( jrn ), "ADJACENTS" );
adj = Word( 2, Sub Str( jrn, pos ), "()" );
lo = Num( Word( 3, adj, "," ) );
hi = Num( Word( 4, adj, "," ) );
回复:获取最短半范围的值是的,但这并不是特别容易。这些值将自身显示为日志相邻部分中的最后两个数字。首先,您需要获取箱线图的日志。
dt=Open("$SAMPLE_DATA/Big Class.jmp");
obj=dt<<DISTRIBUTION></DISTRIBUTION>
接下来,您必须解析 jrn 的相邻项。如果您还不知道如何操作,也许具有更多 JSL 经验的人可以帮助您。我不熟悉解析的来龙去脉。
回复:获取最短半范围的值无论如何我看不到检索此类信息。 我尝试了一种真正简单的方法,从最低到最高查看 50% 数据的范围,看看是否匹配,但失败了。 能够“<<获得更短的半值”将是一个很好的增强。
我会将其转发至 support@jmp.com