将变量的小数位数更改为0-100


20

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



logit模型中使用的logistic函数也可能派上用场。取决于特定目的。
Ondrej 2012年

2
将现有数据应用于将来(或其他)数据时,将现有数据缩放到0-100具有隐藏的风险。例如,请参阅consumerreports.org/cro/cars/…,其中,《消费者报告》写道:“ ...我们面临一个难题:特斯拉最初在《消费者报告》的评分系统中得分为103,根据定义,该得分不超过100。这款车树立了新的标杆,因此我们不得不对得分进行更改以解决这一问题。”
ub

Answers:


33

可以通过以下公式将具有观察到的和值(或这些值可以预设为值的潜在边界)的任何变量(单变量分布)重新缩放为到的范围:m i n o l d m a x o l d m i n n n e w m a x n e wv一世ñØd一种XØd一世ññËw一种XñËw

一种XñËw-一世ññËw一种XØd-一世ñØdv-一种XØd+一种XñËw

要么

一种XñËw-一世ññËw一种XØd-一世ñØdv-一世ñØd+一世ññËw


18

对于R rescalescales包中已经有可用的函数,它可以完全满足您的要求以及@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

7

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

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

4

只需添加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]

谢谢,这个公式也适用于负值吗?例如,如果我的原始变量的范围是-10到10。
Sohail Akram 2012年

是的-它适用于所有的值-例如, print rescale([-10, -9, -5, 2, 6]) # [0.0, 6.25, 31.25, 75.0, 100.0]
安德鲁·塔洛克

3

我建议不要将索引绑定到0-100间隔,因为它不能改善解释,但是会增加难度。如果指数成分数可以为负,则该指数可能变为负数,在我看来,它比0-100范围内的一些低值更好地反映了成分市场的状况。


0

对于加载了标准软件包的R,您可以仅使用'base'软件包中的scale():

x=c(2,4,8,16)
x.scaled = scale(x,FALSE,max(x))  # divide each value in x by max(x)
x.scaled = as.vector(x.scaled) 

使用'as.vector()'检索缩放后的x作为矢量。


3
由于原始值可以为负,因此除以最大值将不够。请更仔细地考虑这个问题,并且-鉴于David和Mikko已经发布了考虑到这一方面的答案-为了使大拇指朝上,您通常需要提供他们的答案所没有的东西。
Glen_b-恢复莫妮卡

您绝对正确,对此表示抱歉。
user161922
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.