查找每日值模式的公式你好,
我有一个数据表,其中有多个样本跟踪这些样本中不同系统集合的不同参数(1 个样本将有 1 个系统,但另一个样本也可能具有相同的系统)。 每个样本在接近结束时都有不同的状态。 这些状态是我试图预测的。 我使用单独的数据表中的一些不同样本创建了一个决策树算法,然后将其添加到该数据表中。 这个决策树试图做的是预测系统在不同时间点的状态。 然后,我将根据这些时间点的系统已知状态测量这些预测状态(该算法是用不同的样本创建的,因此这是“新”数据)
现在您可以想象,在一天的过程中,这个公式可能会发送成百上千个不同的预测,但并非所有预测都是正确的,所以我想要一个可以按样本数和日期查看所有这些预测的列公式,并输出最常预测的设备状态(Mode)
换句话说,我想要一列计算每个数据样本的每一天的模式警报评级,并将其预测的警报评级输出到这些行中的每一行
在我附上的示例数据表中,我想要一个公式,可以自动化标题为“当天的警报预测”的列,我不介意使用 LogTime 列或自启动以来的时间列来创建它的每日预测。
谢谢你的帮助
回复:查找每日值模式的公式非常感谢,我一直在努力弄清楚如何做到这一点。
我将更多地了解它的工作原理,以便我可以针对我拥有的其他项目进行调整。 我必须稍微调整一下才能让它在我的数据集上工作,所以我已经开始理解它了,这很好。 但还有更多需要学习
再次感谢你的帮助
回复:查找每日值模式的公式请记住,这是针对您的情况的,应该这样做。 您可以使用“帮助 > 脚本索引”和编辑器工具提示来帮助了解它的工作原理。
NamesDefaultToHere(1);
// Starting table
dt = DataTable("Example Datatable for Summarising Alert Ratings.jmp");
// Add required columns
dt << NewColumn("Date", Character, Formula(Short Date( :Logtime )));
dt << NewColumn("Group", Character, Formula((:System || " ") || :Date));
// Find the mode of :Decision Tree Prediction for each level in :Group, and fill in 'modeVals'
vals = Column(dt, "Decision Tree Prediction") << getValues;
gVals = Column(dt, "Group") << getValues;
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
modeVals = J(NRow(dt), 1, .);
for(i=1, i<=NItems(levs), i++,
rows = Loc(AsList(gVals), levels[i]);
modes[i] = Mode(vals[rows]);
modeVals[rows] = modes[i];
);
// Build the final column in dt using 'modeVals'
vl = Column(dt, "Decision Tree Prediction") << getProperty("Value Labels");
nc = dt << NewColumn("Modes for Decision Tree Prediction", Numeric, Nominal, Values(modeVals));
nc << valueLabels(Arg(vl, 1));
回复:查找每日值模式的公式短日期* 抱歉,不是短代码
回复:查找每日值模式的公式如此有效的逻辑如下所示:
对于每个 Sample -> 将它们拆分为天数(可以使用 datetime 列或我已经创建的列,该列对于每一行都有自该特定样本开始以来的天数。 是的,谢谢,使用简码可能是一种使日期分组更容易的方法)
然后对于每个样本,查看预测警报状态的列,然后对于该样本的每一天,查看所做的每个预测并找到它的模式值(这是序数)。 然后获取该输出模式值并将其重新插入到该样本当天的新列每一行的数据表中(因此我最初希望将其作为公式)。 我认为当您阅读本文查看数据表时会更清楚
这有助于更有意义吗?
回复:查找每日值模式的公式如果我理解正确,您想为“System”的每个值定义一个组,并结合“Logtime”的“日期部分”(可能使用“ShortDate()”函数将其放入新列)。
如果是这种情况,您可以将上面的代码概括为使用多个“by”变量,否则(可能更简单)只需将两个字符列连接在一起并使用它来定义组。 最后,正如您所指出的,当“gVals”是字符时,您需要调整代码以使其工作。 也许:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = {};
for(i=1, i<=NItems(levs), i++, InsertInto(modes, Mode(vals[Loc(AsList(gVals), levs[i])])));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = {"1", "1", "1", "1", "2", "2", "2"};
Print(modeWithBy(l, g));
回复:查找每日值模式的公式
@ian_jmp写道:
如果两列都是数字,你可以这样做:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
for(i=1, i<=NItems(levs), i++, modes[i] = Mode(vals[Loc(AsList(gVals), levs[i])]));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = [1, 1, 1, 1, 2, 2, 2];
Print(modeWithBy(l, g));
“Sample”组可以是连续的,但它绝对是一个名义数据集。 如果不使用值标签,组 System 就无法连续,它也是一个标称数据集。 那么这将如何与组织它以找到所有组(系统和样本)的模式有关,然后将数据组织成每天为它们的每个组合的基础
此外,我希望将这些值合并回数据表中,以便您可以查看每天预测的警报是什么
谢谢你的帮助
回复:查找每日值模式的公式“Sample”组可以是连续的,但它绝对是一个名义数据集。 如果不使用值标签,组 System 就无法连续,它也是一个标称数据集。 那么这将如何与组织它以找到所有组(系统和样本)的模式有关,然后将数据组织成每天为它们的每个组合的基础
此外,我希望将这些值合并回数据表中,以便您可以查看每天预测的警报是什么
谢谢你的帮助
回复:查找每日值模式的公式如果两列都是数字,你可以这样做:
NamesDefaultToHere(1);
ClearLog();
// Given a set of values ('vals') and group membership ('gVals'),
// returns the distinct levels in 'gVals' and the mode of each group
modeWithBy =
Function({vals, gVals}, {Default Local},
levs = AssociativeArray(gVals) << getKeys;
modes = J(NItems(levs), 1, .);
for(i=1, i<=NItems(levs), i++, modes[i] = Mode(vals[Loc(AsList(gVals), levs[i])]));
EvalList({levs, modes});
);
l = [1, 2, 1, 1, 2, 2, 3];
g = [1, 1, 1, 1, 2, 2, 2];
Print(modeWithBy(l, g));回复:查找每日值模式的公式最初我想要一个公式,但我绝对理解你的观点并认为总体而言更有效的解决方案肯定是最好的。 所以是的,一个脚本会非常有用,谢谢
回复:查找每日值模式的公式解决方案是否必须是公式,或者是否可以接受进行计算并将结果连接回原始表的脚本? 我问的原因是,我相信使用公式的效率会低很多倍,因为每行都会进行所有复制工作。