现在,我有一个包含23个测验问题的数据集,受访者必须将命名的步骤按正确的顺序排列。我使用Qualtrics,因此数据输出的方式可以告诉我受访者将每个步骤放在23个问题列表中的哪个位置。下面是数据的精简版本
ResponseID | Step1| Step2 |Step3|.....|Step22|Step23
p1 | 1 | 2 | 3 |.....|22 |23
p2 | 2 | 3 | 4 |.....|23 |1
p3 | 2 | 23 | 7 |.....|12 |17
字符串
正确的顺序是数字,所以任何人如果有一排从1到23的答案,那么所有的步骤都是正确的顺序。
最初,我通过分配点值来给它打分,如下所示:
dissdata <- dissdata %>%
mutate(retention1score = ifelse(dissdata$Q9.2_1 == 1, 1, 0) +
ifelse(dissdata$Q9.2_2 == 2, 1, 0) +
ifelse(dissdata$Q9.2_3 == 3, 1, 0) +
ifelse(dissdata$Q9.2_4 == 4, 1, 0) +
ifelse(dissdata$Q9.2_5 == 5, 1, 0) +
ifelse(dissdata$Q9.2_6 == 6, 1, 0).................
ifelse(dissdata$Q9.2_23 == 23, 1, 0))
型
因此,基于此,上表中的受访者p1得到了100%或23/23的分数。受访者p2和p3得到了0分。但正如你所看到的,受访者2比受访者3稍微正确一些。受访者p2在整个测验中是一次性的,而受访者3完全错误。
这个if else方法适用于非常严格的,全或无的评分,但它不适用于那些可能差了一步的人,比如把第一步当作第二步,我希望能够为差了12或3步的人分配部分学分,或者对于那些可能有大部分正确的人。
我如何在R中实现这一点?如果有人能猜到他们是如何实现的,这个链接似乎是一个很好的解决方案:Programmatic Partial Credit Put In Order Grading
谢谢你,谢谢
1条答案
按热度按时间uinbv5nw1#
“距离”
我们可以考虑一个距离函数,其中“完全正确”的距离为零,其他任何东西都小于100%。在解释这种方法时有很大的回旋余地,但是任何部分的学分而不是“错误!0%”可以被认为是一种更令人安慰的教学方法。
字符串
第一个距离函数严重地惩罚了(例如)
Step23
对于回答者2,因为绝对差是23 - 1 = 22
。数学上简单地是n-dim数据的毕达哥拉斯。我将使用quux[,-1]
排除ResponseID
列。型
这里,
0.000
显然是100%,其他都是各种程度的“不对”,在这个5题的情况下,最差的是刚刚超过45.7,其中Step1=23,Step2=22,...,Step23=1;如果23都是完全反向的,那么这里的罚分是型
如果你认为
22.09072
值得一个线性偏导数,那么就交给你了,型
这是草率的,在接受全权委托之前真的应该考虑清楚。
另一个想法是,你采取的是正确/错误的存在,而不是距离。也就是说,
Step23=1
的值为1,Step23=22
的值为1,但正确的值为0。型
注意,我们这里不需要
^2
,因为它总是0
或1
,所以平方什么也不做。(如果它让你对这个方法的毕达哥拉斯性质感觉更好,你可以随意保留它。)我们可以很容易地用
==
代替!=
,100%的值是2.236
,但我想我会和第一部分开始的反演一致。完全错误的(所有23个都是1个或更多)仅仅是
“最长序列”
你链接的文章倾向于从数字中找到“最长的正确排序的链”。如果你看https://www.r-bloggers.com/2014/09/compute-longest-increasingdecreasing-subsequence-using-rcpp/,这是一个在数字序列中找到最长链的方法。
使用其功能:
然后,我们可以找到(每行中)有多少个数字是正确的顺序:
并将其自动化,
在这种情况下,回答者1以正确的顺序拥有所有五个(这些);回答者2和3只有一个不符合首选的相对顺序。
这种方法提供了一个更清晰的评分:所有23个顺序是100%