将变量的比例更改为 0-100

机器算法验证 数据转换
2022-01-29 20:07:57

我使用 PCA 技术构建了一个社会资本指数。该指数包括正值和负值。我想将此索引转换/转换为 0-100 比例以使其易于解释。请建议我一个最简单的方法。

4个回答

任何具有观察到值(或者这些可以是值的预设潜在界限)的变量(单变量分布)都可以通过以下公式vminoldmaxoldminnewmaxnew

maxnewminnewmaxoldminold(vmaxold)+maxnew

或者

maxnewminnewmaxoldminold(vminold)+minnew

对于 R,还有scalesrescale包中的可用功能它完全符合您的要求以及@AndrewTulloch 和@ttnphns 所描述的功能:

library(scales)
rescale(c(-10, -9, -5, 2, 6), to = c(0, 100)) ## Use scales:::rescale() if you have several packages loaded using the same function name
[1]   0.00   6.25  31.25  75.00 100.00

首先,让我们获取一些示例数据:

x <- runif(20, -10, 10)

这里有两个可以在 R 中工作的函数

rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
rescale(x)

或者,您可以使用其他转换。例如,@ondrej 提到了 logit 变换

plogis(x)*100

或者,其他转换:

pnorm(x)*100
pnorm(x, 0, 100) * 100
punif(x, min(x), max(x))*100

只是为了添加到 ttnphnss 的答案,在 Python 中实现这个过程(例如),这个函数可以解决问题:

from __future__ import division

def rescale(values, new_min = 0, new_max = 100):
    output = []
    old_min, old_max = min(values), max(values)

    for v in values:
        new_v = (new_max - new_min) / (old_max - old_min) * (v - old_min) + new_min
        output.append(new_v)

    return output

print rescale([1, 2, 3, 4, 5])
# [0.0, 25.0, 50.0, 75.0, 100.0]