用于保存样条拟合残差的脚本你好,
任何人都知道如何编写 sava 残差(或预测)的脚本作为样条拟合的新列? 如果我手动执行此操作,这很容易,只需在下拉红色三角形中选择“保存残差”即可。 我知道如何编写脚本以将残差保存为使用拟合模型进行线性拟合的新列。 但是,我经常需要使用标准化 x 样条拟合来拟合时间趋势数据,并且我不确定是否有更简单的方法来做到这一点。 我的最终目标是在循环中获取多个变量的残差或预测,因此一个简单的脚本会有很大帮助。
谢谢!!

回复:保存样条拟合残差的脚本嗨吉姆
有什么解决方案/修复可以让我们在 v14 中保存残差吗?
谢谢您的帮助
回复:保存样条拟合残差的脚本彭,
是的,这似乎不一致,但是,我猜测这是为了比较预测而故意这样做的(例如,男性是基于女性的预测的保留集,反之亦然。
要根据分组依据模型创建单列预测,请使用公式创建新列或设置每个值表达式
If( :sex=="M", 男性预测列, :sex=="F",男性预测栏);
如果您想要一个看起来像剩余列的列,请为男性创建一个列并使用类似的表达式
If( :sex=="M", 男性预测列,empty() );
然后对女性做同样的事情。
回复:保存样条拟合残差的脚本酷,这太棒了!!
还有一个问题:
当我做对象<SPAN class="token operator"><</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token punctuation"> (</SPAN>曲线<SPAN class="token punctuation">[</SPAN>我<SPAN class="token punctuation">]</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token operator"> <</SPAN><SPAN class="token messages">保存残差</SPAN><SPAN class="token punctuation">)</SPAN>并按 (:sex) 分组,JMP 计算“M”和“F”的残差,并保存在带有一些空单元格的不同列中。 这就是为什么需要“转置”才能将所有残差放在一列中。 但是,如果我执行 <
谢谢
回复:保存样条拟合残差的脚本我非常喜欢新的 JMP 13 表子集参考。 然而,仍然有一个简单的方法可以通过消息 Get as Matrix 来获取值。 关键语法是 dt << get as matrix( list | index )。没有行最大值函数,但有 VMax 函数,它是列最大值。我在 JMP 12 中对此进行了测试。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
cmat = Transpose(VMax(Transpose(dt << get as matrix(idx)))); //matrix _nby x nrow(dt)
/*the previous line of code is performing these tasks
- get the columns of residuals into a matrix of size nrow(dt) x _nby
- create the transpose: coloumns are rows and rows are columns, size _nby x nrow(dt)
- Vmax is a vertical maximum, it finds the max of each column (previously rows)
returns a 1 x nrow(dt) vector, a row vector
- transpose again so it is a column vector
*/
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous, Values( cmat )
);
回复:保存样条拟合残差的脚本谢谢大家的解决方案!! 这数据表多个子部分的语法在 JMP12 中不起作用。 我读了另一篇关于返回多行最大值的讨论,类似的方法也适用于 JMP13。 有没有更好的方法来获取 JMP12 中多行的最大值? 编写公式来比较未知行数的行值似乎效率不高。 谢谢!
回复:保存样条拟合残差的脚本吉姆,
我注意到 JMP 14 也存在同样的问题。JMP 支持声明该问题已在 JMP 14.1(8 月?)中修复。
这是对吉姆脚本的一个小修改。 它创建一列残差。 它对数据表的多个子部分使用新的(JMP 13 中)语法。 这是按行获取剩余列并找到最大值(实际上它获取唯一的非空值)。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ), GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
//Find how many in a group. We know it is 2 for Big Class
summarize(_by = By(:sex));
//Find out how many columns before adding residuals
ncpre = ncol(dt);
_nby = nitems(_by);
for(i=1, i<=_nby, i++,
obj << (Curve[i] << Save Residuals);
wait(0);
);
idx = ncpre+1::(ncpre+_nby);
//create a single column of residuals
resids = dt << New Column("Weight v Height Spline Residuals",
Numeric, Continuous,
<< Set Each Value( max(dt[row(),idx]) )
);
回复:保存样条拟合残差的脚本指定的每个单独的“拟合”都必须单独保存其残差。“Curve[]”引用上的 substript 就是处理这个问题的。下面的示例有一个 GroupBy(:Sex),它将生成适合女性的“F”和适合男性的“M”。因此,必须发出2次“Save Residuals”。
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
GroupBy( :sex),
Fit Spline( 0.1, Standardized )
);
obj << (Curve[1] << Save Residuals);
obj << (Curve[2] << Save Residuals);
当我为你的示例测试这段代码时。我发现 JMP 14 不适用于保存样条曲线拟合的残差。我会将其作为错误传递给 JMP 支持。
回复:保存样条拟合残差的脚本谢谢吉姆! 有用。 如果我需要在双变量中添加“GroupBy”是否可以保存所有残差? 看起来 JMP 只保留了最后一条拟合线。 谢谢!
<SPAN class="token function">Names Default To Here</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token number">1</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Open</SPAN><SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"$SAMPLE_DATA/Big Class.jmp"</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator">=</SPAN> Bivariate<SPAN class="token punctuation">(</SPAN>
Y<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Weight <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN>
X<SPAN class="token punctuation">(</SPAN> <SPAN class="token punctuation">:</SPAN>Height <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,<BR /></SPAN> GroupBy( :Team),
Fit Spline<SPAN class="token punctuation">(</SPAN> 0.1, Standardized <SPAN class="token punctuation">)</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
obj <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN> <SPAN class="token punctuation">(</SPAN>Curve<SPAN class="token punctuation">[</SPAN><SPAN class="token number">1</SPAN><SPAN class="token punctuation">]</SPAN> <SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token messages"> Save Residuals</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
回复:保存样条拟合残差的脚本您可以在脚本索引中找到这些类型的语法
帮助==>脚本索引==>双变量==>双变量曲线
这是该条目的脚本索引示例
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
obj = Bivariate(
Y( :Weight ),
X( :Height ),
Fit Polynomial( 3 )
);
obj << (Curve[1] << Save Residuals);