如何快速识别随机响应包含许多项目的自我报告心理测试的参与者?

机器算法验证 异常值 心理测量学 心理学
2022-03-24 05:34:55

许多心理学研究涉及让参与者回答一百个或更多封闭式问题。一个标准的上下文将是一个包含 100 个项目的性格测试,其中每个项目都以 1 到 5 的等级回答。项目旨在衡量各种规模,并且项目的措辞是积极的还是消极的。

我经常想快速识别出随机或以其他有问题的方式回答测试的参与者。我不想在纯粹的统计意义上删除异常值。例如,心理量表上非常低或非常高的参与者可能会被一些多元距离测量标记为极端。我想删除没有认真完成测试的参与者(例如,随机响应)。

在在线环境中,项目响应时间可以非常有效地识别项目跳过者。但是,假设您只有一个参与者样本的项目响应:

  • 标记潜在随机响应者的良好基本程序是什么?
  • 一旦确定了此类案例,确定他们是随机响应者还是有点不寻常的好策略是什么?
  • R 中是否有任何简单的函数可以实现所提出的方法?
2个回答

杰罗米自己的答案比我的更有用,但由于我自己正在研究这个,我收集了一些方便的 R 代码位,它们也可以帮助或引导一个正确的方向来检测“可疑”响应。

这里的假设是参与者经常(我发现)以某种模式做出反应。在较长的问卷中尤其如此。

例如,如果参与者从给定量表的顶部到底部选择中间响应类别,您可以使用以下方法检查量表(甚至整个调查)中有多少响应是唯一的:

table(apply(data,1, function(X) {length(unique(X))}))

如果您想知道数据中的哪些案例呈现这种模式,而不是每个类别的总数,您可以使用以下代码:

 apply(data, 1, function(X) all(abs(diff(X)) == abs(1)))

另一种看待这个问题的方法是观察那些响应以对角线交替响应类别的参与者(例如,1、2、3、4、5、4、3、2、1 或 2、3、4、3、 2, 3, 4 仅使用中心响应类别。)对于这些受访者,需要使用以下代码计算响应之间的滞后差异:

apply(data, 1, function(X) all(abs(diff(X)) == abs(2)))

carelessgithub 上的R 包包含一些不错的功能。

https://github.com/ryentes/careless

粗心响应指标的实现集合... [它] 提供支持粗心响应指标计算的功能。初始索引包括偶数/奇数、心理测量同义词、异常值和长字符串,如 Meade & Craig (2012) 中所述

Meade, AW 和 Craig, SB (2012)。识别调查数据中的粗心响应。心理方法, 17(3), 437. PDF

github上另一个同名但代码不同的包可以在这里找到: https ://github.com/mattsigal/careless