加权卡帕斯您好,我们有一项研究,两名评估者对 50 个项目的质量进行 1-4 级评分。我们想在 JMP 中进行加权 kappa;我输入了数据,将数据类型设置为序数,但当我用 X 拟合 Y 并查看一致性统计量时,JMP 似乎只生成简单的 Kappa。
JMP 是否能够计算加权 kappa?
提前致谢!
回复:加权 Kappas你真的有列联表吗?我没有看到您在表中指定 X 和 Y。以下代码适用于我的系统(V17.2.0,Windows 10)
Names Default To Here( 1 );
Include("Weighted Kappa Function.jsl" );
dt = Open( "$SAMPLE_DATA/Prime Minister Ratings.jmp" );
CT = dt << Contingency(
Y( :Second Survey ),
X( :First Survey ),
Freq( :Count ),
Tests( 0 ),
Agreement Statistic( 1 )
);
WeightedKappa(CT);
回复:加权 Kappas我一开始确实尝试过,但没有成功。我将其更改为“没有功能”,因为这是我的脚本的名称。我更改了脚本以匹配 Weighted Kappa Function.jsl,但它仍然不起作用。我遇到了同样的错误
加权 Kappa.jsl 通过闭合路径包含自身:
加权 Kappa.jsl 访问或评估 'Include' ,
Include/*###*/("加权 Kappa 函数.jsl")
这是我使用该函数放置的代码:
Names Default to Here(1);
dt = open("Subset of Data for Kappa index.jmp");
Include("Weighted Kappa Function.jsl" );
CT = dt << Contingency(
Contingency Table(
Count( 1, Format( "Fixed Dec", 8, 0 ) ),
Total %( 1, Format( "Fixed Dec", 8, 2 ) ),
Col %( 1, Format( "Fixed Dec", 8, 2 ) ),
Row %( 1, Format( "Fixed Dec", 8, 2 ) ),
Expected( 1, Format( "Best", 8 ) ),
Deviation( 0, Format( "Best", 8 ) ),
Cell Chi Square( 0, Format( "Fixed Dec", 8, 4 ) ),
Col cumulative( 0, Format( "Fixed Dec", 8, 0 ) ),
Col cumulative %( 0, Format( "Fixed Dec", 8, 2 ) ),
Row cumulative( 0, Format( "Fixed Dec", 8, 0 ) ),
Row cumulative %( 0, Format( "Fixed Dec", 8, 2 ) )
),
Agreement Statistic( 1 )
);
WeightedKappa(CT);
回复:加权 Kappas你需要说
include("Weighted Kappa Function.jsl");
回复:加权 Kappas抱歉,我在 Mac 上使用 JMP Pro 17.0.0。我尝试了你的方法,但它不断重复路径。所以我把它改为:
dt = open("Subset of Data for Kappa index.jmp");
Include("Weighted Kappa.jsl" );它确实打开了文件(我首先在此处尝试该文件,我的文件有点复杂,我想确保它与此处的文件一起使用),但随后我收到如下错误:
加权 Kappa.jsl 通过闭合路径包含自身:
加权 Kappa.jsl 访问或评估 'Include' ,
Include/*###*/("加权 Kappa.jsl")
回复:加权 Kappas见附件
回复:加权 Kappas@lcmaley ,
我必须清除一些锈迹,因为从那以后我已经很多年没有看过我的剧本了。
您应该始终提及您正在使用的 JMP 版本。也就是说,我建议您使用@ghartel在 2021 年发布的解决方案。
下载@ghartel帖子中提供的 Weighted Kappa Function.jsl,并将其保存到脚本的驱动器中。
请注意,加权 Kappa 函数解包括标准误差和置信限,以及 By 变量;我的脚本没有。 @ghartel的解决方案是一个更好的解决方案。
下面是我用来运行加权 Kappa 函数的 JSL,用于我的原始脚本提供的示例表。请参阅随附的 JMP 表 slip58.jmp 结果屏幕截图。
笔记:
- Udir 可以是您想要的任何驱动器,数据表和函数可以位于不同的目录中。
- 您不需要调出应急方案的每个选项,很可能您已经设置了默认值。但是,计数和预期需要包含在应急平台选项中或在脚本中调用。
感谢@ghartel的出色功能!
Names Default to Here(1);
Udir ="C:\temp";
dt = open(Udir || "\slide58.jmp");
Include( Udir || "\Weighted Kappa Function.jsl" );
CT = dt << Contingency(
Y( :Y ),
X( :X ),
Freq( :n ),
Contingency Table(
Count( 1, Format( "Fixed Dec", 8, 0 ) ),
Total %( 1, Format( "Fixed Dec", 8, 2 ) ),
Col %( 1, Format( "Fixed Dec", 8, 2 ) ),
Row %( 1, Format( "Fixed Dec", 8, 2 ) ),
Expected( 1, Format( "Best", 8 ) ),
Deviation( 0, Format( "Best", 8 ) ),
Cell Chi Square( 0, Format( "Fixed Dec", 8, 4 ) ),
Col Cum( 0, Format( "Fixed Dec", 8, 0 ) ),
Col Cum %( 0, Format( "Fixed Dec", 8, 2 ) ),
Row Cum( 0, Format( "Fixed Dec", 8, 0 ) ),
Row Cum %( 0, Format( "Fixed Dec", 8, 2 ) )
),
Agreement Statistic( 1 )
);
WeightedKappa(CT);
回复:加权 Kappas我正在尝试使用你的脚本,我把它放在最后,
dt0 = Current Data Table();
CT = dt0 << Contingency(
Contingency Table( Expected( 1 )), Agreement Statistic( 1 ), Tests(0) );
WeightedKappa( CT );
它不起作用,没有附加任何内容。我究竟做错了什么?
我收到一条错误消息,说它不是列联表,然后没有附加任何内容。建议?
回复:加权 Kappas大家好,
我无法让这个脚本按原样运行,无论如何我想要一个在脚本中使用的函数而不是交互式的东西,所以我调整了这个代码来创建一个函数。我还添加了标准误差和渐近置信区间的计算以及 BY 变量的处理。
要使用它,只需将其包含在脚本中,运行应急分析并将其分配给变量,然后将其传递给函数。该函数将向每个 Kappa 表添加一个大纲项,给出线性和二次加权 Kappa。如果您发现任何错误,请告诉我。
Include( Udir || "\Weighted Kappa Function.jsl" );
CT = Contingency( Y( :Comparison ), X( :Reference ), Contingency Table(), Tests( 0 ) );
CT2 = Contingency( by( :Rater), Y( :Comparison ), X( :Reference ), Contingency Table(), Tests( 0 ) );
WeightedKappa(CT);
WeightedKappa(CT2);s
回复:加权 Kappas谢谢@gzmorgan0 ,
我确实设法逐行运行它,但不是作为一个函数。这是最大的惊喜。无论如何,我确实设法产生实际数字,而且我不需要多次这样做,所以我很好。
非常感谢,
罗恩
回复:加权 Kappas嗨罗恩, @ron_horne 。
这么晚才回复很抱歉。我运行了加权 Kappa 脚本,而您的子集表是当前数据表。我将 BP1 指定为 Y,将 BP2 指定为 X。结果作为 .jrn 文件附加。下面是一个片段。

当您运行脚本时:
- 列联表是否包含总计 %、列 %、行 % 和预期?
- 我建议您注释掉脚本的第 88 行,该行删除从列联表创建的表。然后运行脚本。是否创建了一个表并且它看起来像这样吗?

您报告的错误似乎无法执行 cmat = dt[idx,ccols]; idx 是 Cell == "Count" 或更高版本 "Expected" 的行索引,ccols 是连续列,应为列表 {"0", "0.25", "0.5", "0.75", "1"}。如果单元格名称不同,可能是额外的空格或可能导致脚本失效的内容,也许更可靠的解决方案是使用 where Contains(:Cell, "Count")
这里只是猜测。
回复:加权 Kappas@gzmorgan0
例如这个数据集。每个栏目对同一量表都有不同的评估。
如果您设法使用该脚本运行它,请告诉我。
非常感谢,
罗恩
回复:加权 Kappas@gzmorgan0 ,
这是我使用示例文件 Slide58 得到的结果,而不是我自己的数据。它也会在 JMP11 和 JMP 15 上产生相同的错误。
我所做的就是打开文件并运行脚本。
谢谢你,
罗恩
回复:加权 Kappas@ron_horne,
具体来说,我使用 JMP PRO。我在 JMP PRO 13.2.1 上进行了测试,得到了相同的结果。
回复:加权 Kappas@ron_horne ,你好。
我使用的是 JMP 14.3。您能否发送一个示例,一个匿名数据表。在宣布它是版本问题之前,我想检查一下。我的脚本包含一些检查,但是,我可能错过了一个极端情况。
回复:加权 Kappas谢谢@gzmorgan0的脚本,
由于某种原因,我在运行脚本时遇到错误。我正在使用 JMP 14.2。
任何线索如何修复它?

回复:加权 Kappas我没有找到您问题的内置解决方案。 JMP 当然有能力,但它需要一个脚本(除非 JMP 开发人员之一有替代解决方案)。
您没有报告您拥有哪个版本的 JMP 以及哪个操作系统,因此我不确定这是否适合您。附件是我在 JMP 12,13 和 14 上测试过的脚本。它使用向后兼容 JMP12 的方法。它 :
- 在当前数据表上运行并调用应急分析。换句话说,它使用 JMP UI。
- 该脚本是为一份应急报告编写的,即一个 Y 和一个 X 序数变量。
- 指定列联表中包含的预期值,以降低脚本错误的复杂性(和风险)。
- 从列联表创建一个表。
- 由此,它创建了观察到的和预期的概率。
- 它计算标准 kappa,其中权重矩阵是单位矩阵; a 线性权重 1- abs(i - j)/(k-1);以及二次权重,即 1 - square( (ij)/(k-1) )。请参阅脚本中报告的参考文献。
- k、kL 和 kQ 的值附加到 JMP 报告中(见下文)。
- 计算出的 kappa 将报告为检查,因为它应与 JMP 报告的 kappa 相匹配
- 此脚本中不计算加权误差和置信区间。
这可能是未来 JMP 版本的愿望清单项目。由于加权 kappa 的一些参考不仅仅包括序数类别的线性和二次权重,因此您应该指定此愿望清单项是否允许自定义权重。
附加了脚本和示例数据集,其中第n列应用作Freq。 Slide58.jmp 是第三个报告参考文献(第 58 页)的汇总表。它是用于测试脚本的 10 个表之一。我希望这有帮助。
回复:加权 Kappas抱歉,我正在旅行。这样我就无法得到列联表了。我尝试了指定 X 和 Y 的值,结果还是一样。我只是把 X 和 Y 去掉了,这样就可以用在任何表中了。它只会弹出一个对话框让我输入 X 和 Y。
dt = Open( "Subset of Data for Kappa index.jmp" );
Include( "Weighted Kappa Function.jsl" );
CT = dt << Contingency(
Contingency Table(
Y( :BP1),
X( :BP2 ),
Count( 1, Format( "Fixed Dec", 8, 0 ) ),
Total %( 1, Format( "Fixed Dec", 8, 2 ) ),
Col %( 1, Format( "Fixed Dec", 8, 2 ) ),
Row %( 1, Format( "Fixed Dec", 8, 2 ) ),
Expected( 1, Format( "Best", 8 ) ),
Deviation( 0, Format( "Best", 8 ) ),
Cell Chi Square( 0, Format( "Fixed Dec", 8, 4 ) ),
Col cumulative( 0, Format( "Fixed Dec", 8, 0 ) ),
Col cumulative %( 0, Format( "Fixed Dec", 8, 2 ) ),
Row cumulative( 0, Format( "Fixed Dec", 8, 0 ) ),
Row cumulative %( 0, Format( "Fixed Dec", 8, 2 ) )
),
Agreement Statistic( 1 )
);
WeightedKappa( CT );
当我运行这个程序时,我确实得到了一个列联表,但是没有附加任何内容:
dt0 = Current Data Table();
tsub = Subscribe to Data Table List( , On Open( WeightedKappa ) );
reportc = Contingency(
Contingency Table( Expected( 1 ) ),
Agreement Statistic( 1 ),
<
<MAKE into="" data="https://community.jmp.com/" table=""></MAKE>
<SPAN class="lia-inline-image-display-wrapper lia-image-align-inline" image-alt="lcmaley_0-1710247375077.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="lcmaley_0-1710247375077.png" style="width: 400px;"><SPAN class="lia-inline-image-display-wrapper" image-alt="lcmaley_0-1710247375077.png" style="width: 400px;"><span class="lia-inline-image-display-wrapper" image-alt="lcmaley_0-1710247375077.png" style="width: 400px;"><img src="https://us.v-cdn.net/6038925/uploads/images/62115i2A7C53339B71665F/lcmaley_0-1710247375077.png" role="button" title="lcmaley_0-1710247375077.png" alt="lcmaley_0-1710247375077.png" /></span></SPAN></SPAN></SPAN>
<BR /><BR />
回复:加权 Kappas我尝试了完全相同的代码,它确实能够报告列联表,但它显示“维度错误”,并且没有计算加权 kappa。(JMP18.01,Win11)
回复:加权 Kappas这似乎是 JMP 的语言问题。我把脚本中的“单元格”修改成了日语,现在可以正常工作了。谢谢你的辛勤付出。