| 扬声器 |
抄本 |
| 曼迪 |
好的,欢迎参加我们今天的讨论。我们来聊聊表格。我叫 Mandy Chambers,是 JMP 测试团队的首席测试工程师。 |
| |
今天和我一起的是我的同事兼朋友Kelci Miclaus。她是JMP生命科学团队的研发高级经理。 |
| |
事实上,几年前,Kelci 和我开始合作,当时临床产品开始成为我碰巧测试的所有产品的大量消费者。 |
| |
因此,我非常了解她的团队,并与他们密切合作,共同完成他们试图实施的不同任务。 |
| |
对于我来说,能够看到客户真正使用我在 JMP 中测试过的东西的实际应用,以及他们如何将它们应用到临床产品中,这真的很有价值。 |
| |
过去我们做过这样的演示。它比现在长得多,我们决定最好的做法是 |
| |
给你完整的文档。这就是随录音附上的内容,以及两组数据和压缩文件。你应该有数据表、脚本、 |
| |
一些期刊和你需要的不同内容,并且能够逐步浏览每个应用程序,即使我最终没有向你展示,或者 Kecli 没有向你展示其中的内容。你应该能够做到这一点。所以,让我先在这里分享我的屏幕截图。 |
| |
这样你们就能明白我今天要讲的内容了。正如我之前所说,如果我要完整地展示我的日记,那它的内容应该是关于连接表以及连接表的不同方法。 |
| |
这部分我不会讲得很详细,只是讲一下基本的表连接。如果我点击这个, |
| |
笔记本电脑运行和笔记本电脑主题。在表格菜单下,如果您是 JMP 新手,或者之前没有这样做过, |
| |
你可以进行表连接,这是一个物理连接。这会将表连接在一起。所以我会将笔记本电脑运行情况与笔记本电脑主题连接起来。 |
| |
在这个对话框中,你可以选择要连接的内容。你可以使用匹配连接、笛卡尔连接、行连接,然后连接表。我现在不打算这么做,只是为了 |
| |
时间消耗,但这就是你要做的。另外,在表格菜单下,我还想讲一下 JMP 查询生成器。 |
| |
而且它还能把更多桌子连接在一起。如果你有3、4、5、6张桌子,无论多少张,你都可以把它们连接在一起,组成一张包含所有内容的桌子。不过,我今天其实不打算这么做。 |
| |
所以如果我 |
| |
回到这里,我关闭这些桌子。 |
| |
让我们先了解一下虚拟连接是如何产生的。首先,我们来谈谈表连接。 |
| |
你必须决定要使用哪种类型的连接。所以……如果你的表很小,最简单的方法可能是进行物理连接。就像我给你展示的那两个不太大的表一样,直接进行表连接。 |
| |
如果您引入三到四个甚至更多的表,JMP 查询生成器是一个构建表的绝佳工具。 |
| |
你可能希望所有数据都放在同一张表中,这可能正是你想要的。你只需要注意磁盘空间 |
| |
和性能,并且要明白,如果您有五六张分开的桌子,然后将它们物理地连接在一起,那么您就在制作重复的副本。 |
| |
所以,这些方法可以帮助你确定要使用哪种方法。虚拟连接功能出现在 JMP 13 中,它添加了以下功能: |
| |
使用一个链接(一个通用的链接 ID)将多个表连接在一起。这有点像“无连接”的概念。它节省空间,也避免了数据重复。 |
| |
所以……我们在 13 版中就从这个功能入手。然后在 14 到 15 版中,我们添加了更多功能,满足了客户的需求。例如,同步行和状态的链接表。您可以缩短列名。我们还添加了自动打开链接表的功能。 |
| |
能够在同一列上使用链接 ID 和链接引用。我们还添加了一些悬停小提示,我会向你展示它如何告诉你哪个来源是你的列源表。 |
| |
这些就是我们添加的内容,我会尝试设置并演示给大家看。我得到了这些数据,实际上是从…… |
| |
它只是一家虚构的高科技公司。它包含人力资源数据,包括薪酬、员工人数、多样性和合规性等信息。 |
| |
教育历史和其他就业因素。所以,如果你仔细想想,这是一种完美的关联数据,因为你有 |
| |
通常是一个唯一的 ID 变量,例如员工 ID 或可以链接在一起的变量,并且可能为位于不同地方的人力资源团队提供各种数据。 |
| |
因此,我将打开这两个表,并简单地介绍一下如果您想将它们链接在一起,您需要做什么。 |
| |
这张表是“员工成绩 1”,后面还有“薪酬主表 1”。这些表中,“员工成绩 1”是我的源表。 |
| |
薪酬主表是我的参考表。所以你可以在这个表中看到这些ID,也就是ID变量。它也在薪酬主表中。 |
| |
我要设置我的链接 ID。有几种不同的方法可以设置。您可以进入列属性。 |
| |
您可以在下面看到链接 ID 和参考信息。最简单的方法是右键单击,这样就能看到链接 ID。 |
| |
如果我看这里,我可以看到这个 ID 键已经分配给该列。 |
| |
然后我要进入我的薪酬主表。然后我要进入这一列。同样,您可以使用列属性来执行此操作。 |
| |
但最简单的方法是直接在这里找到链接引用,表格里有ID。它会显示在这个列表中。我点击它,瞧,这就是我的链接引用 |
| |
图标就在那里。现在我可以看到,这张表里的所有列……都在这里了。你可以看到,你有很多列。 |
| |
您还可以在这里看到...它们是很长的列名,您有列名,加上这里的标识符,它向您显示这是一个引用列。 |
| |
因此,我将运行我在这里保存的这个简单的小表格,并非常简要地向您展示这是一份报告,只是简单地向您展示这是一个虚拟的服务年限列。 |
| |
薪酬类型实际上是我的薪酬表的一部分,性别是一个虚拟列。所以我用虚拟列以及表中的列来构建它。 |
| |
我想快速向你们指出的一件事是,在这个红色小三角形下面……假设你正在处理这些数据,并且你决定, |
| |
“哦,我真的想创建这个表。我真的希望所有列都在一个表中。”这里有一个小秘密工具,称为合并引用数据。 |
| |
很多人不知道这个功能。但如果我愿意,我可以点击它,然后把所有列合并到 |
| |
这张桌子。不过,为了节省时间,我现在不打算这么做,但我想指出它的位置。 |
| |
让我快速地在日志里展示一下。这可以通过脚本来实现,所以你可以设置属性链接引用,并指向你的表格, |
| |
列出要使用的链接列。所以我要快速关闭它,然后回到我之前使用的同一个应用程序 |
| |
同样是这两张表,我在这里保存了一些额外的脚本,还有一些我想展示的内容。再次强调,我得到了员工分数。这是我的源表。 |
| |
然后我得到了薪酬主数据,它们已经关联起来了,你可以在这里看到。我想重新运行一下那个表格,并向你展示一些东西。 |
| |
大家可以看到,这些列名现在更短了。我想展示一下我们在 JMP 14 中添加的内容。如果我右键点击,弹出列信息对话框, |
| |
我看到这里说的是使用链接列名。这意味着这些名称会更短 |
| |
这确实是一个很好的功能,因为当你最终与某人分享这份报告时,他们并不真正关心列在哪里 |
| |
这些数据来自哪里,无论它们是在主表还是虚拟表中。所以,这会是一份简洁美观的报告。脚本已保存,您可以在脚本中看到…… |
| |
它保存了显示引用表的脚本。所以如果我看一下这个,我就能明白。所以你会知道这一列来自哪里,但是 |
| |
你共享的对象不一定需要知道。所以我想向你展示一下我们在调度行状态时添加的另一个功能。 |
| |
举个简单的例子,我要运行这个分布。你马上就会注意到,在这个分布中,我有一个标题,说这些数字是错误的。 |
| |
那么,让我来解释一下我的意思。“员工分数”是我的员工数据库表,里面大约有 3600 名员工。 |
| |
这是对员工的唯一引用,假设它是一个当前员工数据库。我的薪酬主表更像是一个历史记录表,它有 12,000 条记录 |
| |
其中的行,因此该表中可能有对同一员工的多个引用,比如说,一名员工换了工作,加薪了,或者调动了工作。 |
| |
或者可能有一些员工已经离职。因此,从这个表运行此报告 |
| |
没有呈现我真正想要的信息。我在这里看到我的计数不对,计数值更大,我没有找到我想要的信息。 |
| |
这就是我们创建此行状态同步的原因之一,Kelci 也将在实际应用中对此进行更多讨论。 |
| |
我只是简单地向你展示如何设置调度行状态。我所做的就是批量处理, |
| |
选择颜色标记。我实际上是将薪酬主数据发送到员工分数, |
| |
我将信息发送到该表是因为(对不起),这是我希望运行信息的表。 |
| |
所以如果我回去重新运行那个分布,我现在会得到这个分布(列略有不同),但我有这个分布。如果我看看这里的数字, |
| |
我有员工数据库的准确数据。这正是我想要看到的。所以你需要谨慎处理派遣和接收,Kelci 会详细介绍这一点。但这只是一个简单的例子,说明如何做到这一点。 |
| |
我会很快向你展示,有一个在线帮助链接显示 |
| |
这是一个虚拟连接列并显示行状态的示例。它会引导你完成。这里还有一些其他示例 |
| |
使用虚拟连接。如果您需要更多关于设置的信息,请再次提醒您,所有这些都是可以编写脚本的。因此,您可以在这里编写脚本,设置行状态以及您想要的各种功能。 |
| |
升级到 JMP 15 后,我们又添加了几个功能。其中之一就是自动打开表格,以及将鼠标悬停在列上并查看其来源的功能。我会解释一下这些功能的具体含义。 |
| |
如果我点击这些。我们为 JMP 15 创建了一些新表,employeemaster.jmp,它仍然是人力资源数据的一部分。如果我稍微追溯一下,我会指出关于这个表的几点。 |
| |
它有一个链接ID和一个链接引用。这是我们在JMP 15中添加的另一个功能,可以在同一列中显示链接ID和链接引用。 |
| |
如果我查看这个,然后去查看我的主窗口,我可以看到还有两张桌子是打开的。它们是自动为我打开的。 |
| |
我要把它们打开,因为我想把它们串联起来,这样你就能明白它是怎么运作的。但是这个员工主表链接到 |
| |
一个……把它们叠在一起……它链接到教育历史表,而教育历史表又链接到我的预计离职表。你可以看到 |
| |
有一个员工 ID,它有一个链接引用,链接 ID 就是员工 ID。同样,然后预测确定只有一个 ID。 |
| |
如果您还有另外一两个表包含员工 ID 的唯一数据,并且需要将其提取出来,您可以在此处分配链接引用来继续执行该字符串,这样您就可以继续执行下去。所以我……只是快速演示一下,如果我右键单击并查看此处的列, |
| |
我可以看到我的链接 ID 已设置,链接引用也已设置。它还显示教育历史记录是此表所链接的表。 |
| |
我已将其设置为自动打开,并使用了较短的名称。我没有调度行状态,所以那里什么也没有设置。因此,对于我这里引用的表(称为“员工主表”),我可以使用另外两个表中的所有列。 |
| |
很快,您就会发现这里有大量可用的列,并且链接列在这里显示为分组列。 |
| |
因此,客户提出的另一个问题是,正如他们所说,您能告诉我们这些列来自哪里吗? |
| |
这样是不是更清楚一些?所以我们添加了这个很棒的悬停提示。如果我将鼠标悬停在 |
| |
这告诉我,这一列的残疾标记来自预测终止。所以它实际上来自我系列中最后一个表格。 |
| |
如果我到这里并点击其中一个,它会说学位课程代码来自教育历史。 |
| |
所以,这是一个很好的小功能,它可以在您挑选专栏时为您提供帮助,也许在您尝试使用平台运行的内容时也可以提供帮助。 |
| |
但如果我运行这个分布,这只是一个简单的分布示例,显示了员工级别 |
| |
实际上来自我的员工主表。学位描述来自教育历史表,绩效评估来自我的预测离职表。然后你可以使用 |
| |
这里还有一些其他的例子。我确实构建了 |
| |
这里有一个仪表板上下文窗口,其中显示了一个显示箱线图的图形生成器。这里有一个分布图、一个表格和一个热图。 |
| |
使用所有虚拟列,有些列来自表格,但虚拟列也有一个过滤器。所以,如果我想查看女性和专业人士的数据。 |
| |
我总是喜欢指出这里的一些奇怪之处。所以,如果我走进这里,看看这两个小地方,它们似乎都在这里闲逛。这对我来说非常有趣,因为薪酬比率反映了人们的薪酬水平。 |
| |
基本上,他们的薪酬比例是否合适,都与他们的职位描述有关。看起来这两个例外 |
| |
持续超出预期,看起来他们的薪水可能偏低。就像上面这个 |
| |
一切都是独立的,而且看起来他们很少能达到预期,但他们的薪水可能略高,也可能是失误。但无论如何,当你关注这些的时候,你也会看到他们正在进行的选择 |
| |
就在这里。所以,在这张热图中,我可以看到有一些绩效资金和培训资金被花费了。所以也许可以培训一下这个人。所以这其实很好,很好。 |
| |
所以那是 |
| |
关于我想展示的所有内容。我确实想展示这一点,只是为了提醒一下,重申一下。教育历史可以访问预计终止的列。 |
| |
这样,这两个表就可以分别互相通信了。如果我运行这个图表脚本, |
| |
我有类似的绩效和培训费用,但我正在查看平均绩点、班级排名,以及人们在这里的哪个位置落入了限制,只需使用这两个表中的列组合即可。 |
| |
所以我要把这个传下去。我相信这就是我想分享的大部分内容了。我要停止分享我的屏幕了。我会把这个传回给凯尔西,她会继续处理。 |
| 凯尔西·J·米克劳斯 |
谢谢,曼迪。 |
| |
Mandy 说我们已经做过几次这样的演讲了,实际上,这是 |
| |
我所在的团队负责生命科学领域的 JMP Clinical 和 JMP Genomics 垂直解决方案, |
| |
并找到真正利用虚拟连接的完美示例,并与开发团队密切合作,了解这些功能在 JMP 的最后几个版本中是如何发布的。 |
| |
因此,在本节中,我将介绍一些特定于我们的临床研究的示例,以及我们如何真正利用围绕行状态同步的会说话的表格想法。 |
| |
正如 Mandy 提到的那样,现在,如果我们还有时间的话,这个虚拟连接与行状态同步的想法现在是驱动 JMP Clinical 报告和评论使用方式的整个架构 |
| |
用于评估早期疗效和安全性,以及与客户合作的临床试验报告。它如此契合的原因之一在于其典型的临床试验数据格式。 |
| |
因此,我将使用的数据示例与行状态同步或行状态传播(我有时这样称呼)有关, |
| |
是来自一项约有 900 名患者的临床试验的示例数据。这是一项大约 20-30 年前进行的真实临床试验 |
| |
观察蛛网膜下腔出血以及这些患者的尼卡地平治疗。 |
| |
临床数据的优点在于,我们使用非常标准的规范化数据结构,这意味着临床试验的每个组成部分都会被收集,类似于 Mandy 向我们展示的 HR 数据…… |
| |
是标准化的,以便每个表都有自己的内容,我们可以分别跟踪,然后使用虚拟连接来创建综合的故事。 |
| |
我将要讲解的三个数据集是这个人口统计数据表,其中包含大约 900 名患者 |
| |
临床试验的数据,这里我们用一行来记录临床试验中每个病人的情况。这被称为人口统计数据,其中包含了他们的出生、年龄、性别、种族、接受的治疗以及临床试验期间发生的任何特定事件的信息。 |
| |
同样,我们可以有单独的表格。在临床试验中,他们通常会在每次访视时收集患者在新药研发过程中发生的不良事件。 |
| |
药物或研究。这个表大约有 5,000 条记录。我们仍然保留这个唯一的受试者标识符,但当然有重复。所以它记录了所有事件或不良事件 |
| |
这是我们临床试验中每位患者的报告。最后,我还会使用实验室数据集, |
| |
它也遵循了我们在不良事件中看到的类似记录堆叠格式。 |
| |
这里我们考虑的是定期访问,他们会进行几项实验室测量,我们可以在整个临床试验过程中跟踪这些测量结果,以寻找异常情况等。 |
| |
因此,这三个表格是所谓的临床试验数据国际 CDISC 标准的标准规范格式。 |
| |
它非常适合我们使用虚拟连接。正如Mandy所说,创建实验室合并表很容易。 |
| |
但是,我们有 6,000 条实验室记录,如果将其与人口统计数据合并,会导致所有单个人口统计描述实例重复。因此,我们想建立一个虚拟连接,这很容易做到。 |
| |
如果我们在人口统计表中创建,我们将设置唯一的主题标识符作为我们的链接 ID。 |
| |
然后很快,因为我们通常希望查看实验室结果并使用他们所在的治疗组之类的数据来查看实验室是否存在差异, |
| |
我们现在可以参考这些数据并创建可视化图表或报告,以实际评估和查看实验室结果中的治疗组差异。 |
| |
所以我们不需要进行合并。我们只需通过简单的两步设置虚拟连接的列属性,就能从人口统计表中访问这些……计划分支列。 |
| |
观察实验室检查结果异常也很容易。以下是临床试验中各个不同组别或治疗组在各次访视中实验室检查结果异常高的病例的图表。 |
| |
我们可能也想对不良事件进行相同类型的分析,看看不良事件中是否存在不同的情况 |
| |
在这些治疗组之间。因此,我们再次将此表与我们参考的人口统计数据联系起来,并快速地统计出分别发生在尼卡地平(活性治疗药物)和安慰剂组中的不良事件的分布情况。 |
| |
所以现在我们希望它们能够真正地沟通。接下来我想用这些数据展示的两个例子就是我们拥有的行状态同步选项。 |
| |
因此,您很快从 Mandy 的部分中看到,她展示了在列属性上我们现在能够在表之间同步行状态。 |
| |
这就是为什么我们的讨论被称为“对话表”,因为这就是它们现在通信的方式。你可以调度行状态,这意味着你设置了对某个链接ID的引用的表可以将该表中的信息发送回其引用ID表。 |
| |
我会举一个简单的例子,但正如 Mandy 提到的,这是迄今为止最 |
| |
有时这是一个危险的情况,因为很容易遇到得到不确定结果的情况,但我将展示一个它有效且有用的案例。 |
| |
正如您所注意到的,仅从这个分析来看,比如说不良事件,我们很容易通过设置链接引用的表格(ID 表)来访问其中的列,并查看该表中治疗组的差异。 |
| |
但实际上并没有什么相反的情况。正如 Mandy 所说,你不会想用这张新的连接表来查看某个治疗组的分布, |
| |
因为实际上你得到的数字是不匹配的。看起来有 5000 个受试者,但实际上,如果你回到我们的 |
| |
人口统计表中,我们只有不到 900 人。这是按治疗组划分的大约 900 名受试者的真实分布 |
| |
以及所有其他分布。现在,这张表就是你想要用作分析表或创建分析的目标。 |
| |
你想从那些与之实际关联的表格中获取信息,例如实验室信息和不良事件信息。 |
| |
因此,我们实际上要使用这个表格来创建一个可视化图表,用这个表格中的受试者来注释任何有异常实验室测试或严重不良事件的人。 |
| |
现在我作弊了,因为我准备了这些数据。你会注意到我的不良事件数据 |
| |
我已经完成分析,找到任何被认为是严重的不良事件的案例,并且我已经使用行状态标记来注释那些......是严重不良事件的记录。 |
| |
同样,在实验室数据集中, |
| |
我用红色来注释……注释任何实验室结果 |
| |
异常高。例如,我们可以看到所有异常值较高的数据。我把大部分数据都标成了红色,只是选择行状态,然后控制行状态。 |
| |
因此,有了这些数据(其中有这两个行状态),我们就可以回到人口统计表 |
| |
并创建一个视图 |
| |
这是临床试验中患者年龄按地点的分布情况。 |
| |
现在,如果我们回到每个链接表,我们可以通过行状态同步来控制引入这些注释信息。 |
| |
所以我们要把这个选项从“带引用表的行状态”改为“无”,实际上是“调度”。在这种情况下,我需要小心一点。我只想让这个表告诉链接引用表一个标记集。 |
| |
我要点击“应用” |
| |
您会注意到,我根据人口统计表创建的可视化图表现在具有来自另一个表格的经历过不良事件的任何受试者的标记。 |
| |
我们现在可以在实验室做同样的事情。 |
| |
选择调度。在本例中,我们只想调度颜色。 |
| |
现在,只需控制列属性,我们就可以根据人口统计数据表进行可视化或分析,该表可以使用调度行状态同步或传播来访问这些虚拟连接表中的信息。 |
| |
这真的很酷。我认为这是一个非常强大的功能。但是,使用调度选项时,有很多陷阱和需要注意的地方。 |
| |
也就是说,虚拟连接的整个工作方式是 |
| |
链接 ID 表、日期……您设置的数据表(在本例中为人口统计数据)每个 ID 占一行,您可以使用它来合并或虚拟连接到 |
| |
数据表包含该使用 ID 的多个副本。所以我们建立的是一对多关系;没问题。Dispatch 建立的是多对一关系 |
| |
对话。所以在文档中我们有一个……在这个视频提供的资源中,有很多 |
| |
关于谨慎使用的评论。它不应该是高度交互的东西。 |
| |
如果您随后决定更改行状态,则很容易变得混乱或无意义, |
| |
也就是说,如果我用颜色和记号笔标记了这两个元素,它就不知道该做什么了,因为有些行可能会说“把这个涂成红色”, |
| |
但另一个链接表可能会显示蓝色或黑色。所以你必须非常小心,不要混合搭配,也不要与多对一合并的概念进行过多的交互。 |
| |
但在这个例子中,这是一个非常非常有价值的工具,需要大量的数据操作才能达到这一点。 |
| |
因此,我将结束调度虚拟连接示例的这些示例,并继续讨论可能更常用的接受... |
| |
虚拟连接会话表的接受行状态。在本例中,我实际上将使用脚本来完成此操作。因此,与其以交互方式引导我完成虚拟连接,不如 |
| |
行状态列属性,我们将查看该脚本的结果。 |
| |
这里的例子,我们想要做的是能够使用这三个表(再次强调,临床试验中的人口统计、不良事件和实验室数据)来真正创建所谓的 |
| |
全面的安全性。这正是我们为客户提供 JMP Clinical 的理由和依据。 |
| |
我们希望能够获取这些数据集,将它们分开,但允许它们用于全面的单一分析,这样它们就不会显得孤立。 |
| |
在这个例子中,我们希望能够打开人口统计数据并将其设置为链接 ID。这类似于我刚才以交互方式执行的操作,即创建人口统计表,并在唯一主题标识符上创建链接 ID 列属性。 |
| |
好了,到这里就完成了。你可以看到那里的键值,它显示现在是链接 ID 属性。接下来我们要打开实验室数据集。 |
| |
我们将在该表中的唯一主题标识符上设置一个属性,以使用人口统计表的链接引用。 |
| |
这里有几个选项。我们想展示使用较短名称的属性。使用链接的列名称来缩短我们的 |
| |
将来自人口统计学表的列导入到实验室表中。在这里,我们要设置行状态同步,以接受选择、排除和隐藏。 |
| |
我们也要对 AE 表进行同样的操作。所以我将运行下面这两段代码, |
| |
这将打开我的 AE 和我的实验台。现在你会看到,这里的属性不是 dispatch,而是设置为 accept。 |
| |
使用这些选择、排除和隐藏。同样,不良事件表也有完全相同的接受度。所以在这种情况下,我们非常小心地只调度了 |
| |
从一个表获取一种类型的行状态,从另一个表获取另一种类型的行状态,并将其返回到我们的链接 ID 引用表。在这里,我们将让链接 ID 引用表的人口统计数据广播它发生了什么 |
| |
到另外两个表,这就是 accept 函数的作用。它会从人口统计表中接受行状态。 |
| |
我稍微作弊了一下,实际上我只是在我们的人口统计表上附加了一个脚本 |
| |
这实际上只是设置一些我已经展示过的可视化效果,这些可视化效果是附加在单个窗口中每个表格上的脚本。 |
| |
以上就是您可以考虑的安全概况。我们提供了患者人口统计信息的分布。这些信息来源于人口统计表。 |
| |
您会看到服用安慰剂的 443 名患者和服用尼卡地平的 427 名患者的计数是正确的。 |