标准化/缩放数据集
我有以下数据集:
dat<-as.data.frame(rbind(10,8,2,7,10,10,1,10,14,9,2,6,10,8,10,8,10,10,7,11,10)) colnames(dat)<-"Score" print(dat) Score 10 8 2 7 10 10 1 10 14 9 2 6 10 8 10 8 10 10 7 11 10
这些是学生获得的考试成绩, 在这个testing中学生可以得到最多15或最小0 (顺便说一下,没有人得到最大或最小), 但是在这个testing中得到的最低分数是1和最高的是14 。
现在,我想规范化/规模这个数据的规模0至20.如何在Excel中实现这一点? 或在R? 我的最终目标是把这个testing中的分数归一化到上面的规模,并将它们与另一组数据分别进行比较,最大值和最小值分别是5和0。 如何正确比较这两个不同的缩放数据集?
我试过的东西:我在互联网上经历了很多东西,然后想出了这个:
我从维基百科获得它。 这个方法可靠吗?
在Excel中,如果您希望归一化数据的最小值为0 ,最大值为20 ,那么我们需要解决:
y = A * x + b
两点。
将原始数据的最大值放在C1中 :
=MAX(A:A)
把原始数据的最小值放在C2中 :
=MIN(A:A)
将所需的最大值放在D1中 ,将所需的最小值放入D2中 。 把A系数的公式写成C3 :
=($D$1-$D$2)/($C$1-$C$2)
和C4中的B系数公式:
=$D$1-$C$3*$C$1
最后把缩放公式放在B1 :
=A1*$C$3+$C$4
并抄下来:
当然,如果你想缩放独立于原始的最大值或最小值,你可以在C1中使用15 ,在C2中使用0 。
在你的情况下,我会使用你发布在你的问题上的function比例公式。 (x - min(x)) / (max(x) - min(x))
将把您的testing标记转换为0-1之间的范围。
由于你的边缘确实是0和15而不是2和14,所以你的min(x)=0
,你的max(x)=15
。 一旦你有0-1之间的分数使用上述,你只需乘以20。
即
tests <- read.table(header=T, file='clipboard') tests2 <- (tests - 0) / (15 - 0) #or equally tests / 15
乘以20得到0-20之间的分数:
> tests2 * 20 Score 1 13.333333 2 10.666667 3 2.666667 4 9.333333 5 13.333333 6 13.333333 7 1.333333 8 13.333333 9 18.666667 10 12.000000 11 2.666667 12 8.000000 13 13.333333 14 10.666667 15 13.333333 16 10.666667 17 13.333333 18 13.333333 19 9.333333 20 14.666667 21 13.333333
结果直观,function可靠。 例如,得分14/15的人应该得到最高的分数(非常接近20),在这里就是这种情况(他们得分18.6666)。
您可以使用R中的此命令在0到20之间进行缩放:
newvalue <- 20/(max(score)-min(score))*(score-min(score))
math方法是相当简单的,如果所有的尺度的楼层是0。
new_value = new_ceiling * old_value / old_ceiling
下一个公式将在每个尺度上考虑不同的楼层:
new_value = new_floor + (new_ceiling - old_ceiling) * ((old_value-old_floor)/(old_ceiling-old_floor))
这实际上是从维基百科发布的公式。 ;)
希望这可以帮助!
这很简单。 由于这两个等级都是线性的,所以一个简单的倍数就可以完成这个工作。 或者换句话说,你们组中的每个年级都需要* 20/15。