PCA手法を使用して、ソーシャルキャピタルインデックスを作成しました。このインデックスは、正と負の両方の値で構成されます。このインデックスを0〜100のスケールに変換/変換して、解釈しやすくしたいと思います。最も簡単な方法を教えてください。
PCA手法を使用して、ソーシャルキャピタルインデックスを作成しました。このインデックスは、正と負の両方の値で構成されます。このインデックスを0〜100のスケールに変換/変換して、解釈しやすくしたいと思います。最も簡単な方法を教えてください。
回答:
最初に、いくつかのサンプルデータを取得します。
x <- runif(20, -10, 10)
Rで機能する2つの関数を次に示します。
rescale <- function(x) (x-min(x))/(max(x) - min(x)) * 100
rescale(x)
または、他の変換を使用することもできます。たとえば、ロジット変換は@ondrejによって言及されました
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]
print rescale([-10, -9, -5, 2, 6])
# [0.0, 6.25, 31.25, 75.0, 100.0]
For R with standard packages loaded, you may just use scale() from 'base' package:
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)
use 'as.vector()' to retrieve the scaled x as vector.