创建 Rsquared 值表的快速方法我有一个脚本可以找到一个参数与多个参数的 Rsquared 值。一旦进入表格,就可以很容易地对最佳值进行排序。多年来它一直运行良好,但是当我尝试推动它找到数万个或更多参数的值时,它需要很长时间。我想知道是否有人知道 JSL 中执行此操作的快速方法。
我尝试过但都花费太长时间的事情:
1. 制作双变量报告并从显示树中读取 Rsq。
xyp =双变量(Y(柱子(分别)), X(评估(fact)), Fit Polynomial(degree), 不可见);
该命令实际上运行速度比我预期的要快,但大部分时间都是通过显示树循环获取值。
2. 使用 Fit Model -> StepWise -> 1 项的所有可能模型。
这似乎只适合所有项都没有缺失数据的数据行,而且我可能有一些项有很多缺失数据。所以不符合我的需求。
3. 使用如下函数对正方形求和。
GetRsquared = function ({x,y}, {sx,sy,ssxx,ssyy,ssxy,nr,np,i},
sx=0;
sy=0;
ssxx=0;
ssyy=0;
ssxy=0;
nr=nrows(y);
np=nr;
for( i=1, i<=nr, i++,
if(is missing(x[i]),np--,
if(is missing(y[i]),np--,
sx=sx+x[i];
sy=sy+y[i];
ssxx=ssxx+x[i]*x[i];
ssyy=ssyy+y[i]*y[i];
ssxy=ssxy+x[i]*y[i]
)));
ssxx=ssxx-sx*sx/np;
ssyy=ssyy-sy*sy/np;
ssxy=ssxy-sx*sy/np;
r2=ssxy*ssxy/ssxx/ssyy
);
回复:创建 Rsquared 值表的快速方法感谢大家的帮助。在此总结一下,为以后的JMP探索者做一个记录。
我试图找到一种方法来快速确定一个项与多个项(最多约 100,000 个项)的所有 R 平方值。
在我的试用中,我使用装有 Windows 7、64 位操作系统、Intel Core i5-4300U CPU @190 GHz 2.50 Ghz、16 GB RAM 的 HP EliteBook 拟合了 2,000 个术语。
我最初的方法是 1) 循环双变量拟合并从显示树中读取 R 平方,或 2) 强制计算,这两种方法在我的笔记本电脑上都花费了大约 37 秒。100,000 个术语大约需要 30 分钟!并且想要对多个响应项执行此操作!
使用 Multivariate 平台的方法消耗了我所有的计算机资源约 15 分钟,然后由于内存不足而崩溃。不要在家里尝试这个。
使用 KarenC 的 Response Screening 的方法只用了 1 秒!这显然是解决方案。我将 mikedriscoll 的回复标记为解决方案,只是因为他总结了讨论并展示了要使用的代码。
为了完整起见,这是我最后使用的代码。
dt 是我原来的数据表。
resp 是命名感兴趣的 y 列的字符串。
fact 是命名感兴趣的 x 列的字符串列表。
dt1 = dt << Response Screening(Y(column(resp)), X(eval(fact)));
// Note: This is not a normal table and JMP will not recognize dt1 as a table
// The 'table' is called "Pvalues". Hopefully you don't already have a table of that name.
// Of course you can write more code to make this error proof.
// To immediately move this information to a normal JMP table I took a subset.
dt2 = Data Table( "PValues" ) << Subset( All rows, Selected columns only( 0 ) );
// Now I can do other things, like ...
dt2 << Sort( By( :RSquare ), Order( Descending ), Replace Table );
rsq = dt2:RSquare<< get as matrix;
回复:创建 Rsquared 值表的快速方法您可以从 JSL 调用响应筛选平台...从那里我的 JSL 技能帮不了您。
回复:创建 Rsquared 值表的快速方法为了回答您关于我的脚本的第一个问题,多变量只有“Y”变量,所以我连接 X 和 Y 并让它计算它。 我不记得我为重叠做了什么,但我想我以某种方式处理它。
Karen 指出的响应筛选对我尝试做的事情更有意义。显然可以编写脚本。 将其作为测试运行,然后查看报告输出中的红色三角形,而不是表格。 顶部的红色三角形。 点击save script -> to script window就可以看到了。 我不知道如何获取表的引用和 r 值,但我可能会在执行脚本之前获得打开表的列表……然后在生成新表后找到它。
响应筛选( Y( .... ), X(.... ) )
回复:创建 Rsquared 值表的快速方法我也很惊讶新数据表上没有“来源”条目。我建议您在 JMP 愿望清单中添加一个条目,要求添加此条目。
回复:创建 Rsquared 值表的快速方法凯伦,
这非常快,似乎获得了我想要的所有参数。
我的应用程序是对结果执行其他操作的脚本的一部分。
你认为它可以编写脚本吗?
我很惊讶该表没有 Source 变量。
回复:创建 Rsquared 值表的快速方法麦克风,
感谢您的回复。我试过了。这是否仅记录了所有数据中通用项的 R?我想知道它是否对不良数据列具有鲁棒性。
拍
回复:创建 Rsquared 值表的快速方法最近我一直在使用 Analyze>Screening>Resposne Screening(不是 JSL,只是 UI)来获取 RSq 值。这适用于一个与多个参数或多个与多个参数。 它很快。 您最终会得到其他信息,但是,RSq 值位于生成的 pvalue 表中。 额外提示:在 P 值表中,您可以选择行(参数对)并运行“拟合选定项”表 scritp 以获得双变量拟合。 我喜欢这个,因为在我真正相信它之前,我总是希望看到一种在数字上看起来很强大的关系。
回复:创建 Rsquared 值表的快速方法我有一个脚本几乎可以做同样的事情。 过去使用双变量,现在我使用多变量(参见下面脚本的子集)。我最近发现了一个我还没有修复的错误,列名中可能有特殊字符。 但总的来说,这应该有效。 我不记得我是否在如此大的数据集上使用过它,但对于我处理的数据,它要快得多。请注意,要获得通用的 x 数与通用的 y 数,它实际上是在计算 (num_x + num_y) 与 (num_x + num_y),这仍然比遍历双变量更快。
编辑:Karen 的方法看起来比这个更有效/更优雅。 如果我需要更新我的脚本,我肯定会检查该方法。
numX = nitems(xParamNames);
numy = nitems(yParamNames);
yxParamNames = concat(yParamNames, xParamNames);
mvObj = Multivariate(
// Y(evallist(yParamList)
Y(evallist(yxParamNames)
),
Estimation Method( "Row-wise" ),
Matrix Format( "Square" ),
Scatterplot Matrix(0
)
);
corrMatrixObj = mvObj << xpath( "//OutlineBox[ text() = 'Correlations']//MatrixBox");
corrMatrix = corrMatrixObj << get();
corrMatrix = corrMatrix[1];
corrMatRows = 1::numY;
corrMatCols = (numY+1)::(numY+numX);
sub_corrMatrix = corrMatrix[corrMatRows,corrMatCols];
myRsqr = aslist(power(sub_corrMatrix,2)); // rsqr is corr matrix to the power 2. rest of script expects a list.
mvObj<< closewindow();