STATISTIKHJÄLPEN | SV/EN

Centrera, standardisera och normalisera variabler

Att centrera, standardisera eller normalisera variabler är tre olika sorters omkodningar som man ibland kan göra för att underlätta jämförelser mellan variabler, särskilt vid regressionsanalys.

Centrera: Göra så att variabeln får ett medelvärde som är 0.
Standardisera: Göra så att variabeln får ett medelvärde som är 0, och en standardavvikelse som är 1.
Normalisera: Göra så att variabelns minsta värde är 0, och det högsta värdet är 1.

I inget av fallen ändras variabeln på något avgörande sätt: Rangordningen mellan olika observationer kommer att vara densamma, liksom de relativa avstånden. Det är bara skalorna som ändras.

Användningsområdena är lite olika. Om man använder dessa variabler som oberoende variabler i en regressionsanalys får man med standardiserade variabler regressionskoefficienter som visar vad en "normal" ökning av den oberoende variabeln (en standardavvikelse) ger för effekt. Använder man den normaliserade variabeln får man totaleffekten (från min till max).

Det finns vissa specialbyggda kommandon dessa omkodningar, till exempel kommandot center. Det kan man installera genom att skriva ssc install center. Men i det här inlägget kommer jag visa hur man gör omkodningarna "för hand". Det är inte svårt! Vi börjar med att ladda in QoG-datasetet, där vi ska titta på variabeln för genomsnittlig förväntad livslängd, wdi_lifexp. Vi börjar med att ta fram ett histogram för variabeln, med histogram wdi_lifexp.

In [8]:
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_cs_jan18.dta", clear
histogram wdi_lifexp
(Quality of Government Basic dataset 2018 - Cross-Section)

(bin=13, start=50.591049, width=2.5382121)

Vi kan se att det minsta värdet är strax över 50, och det högsta något över 80. Nu ska vi pröva att transformera variabeln på de tre olika sätten.

Centrera

Att centrera variabeln är det enklaste. Resultatet kommer vara en variabel som visar hur mycket den förväntade livslängden avviker från det globala medeltalet. Vi gör det genom att den ursprungliga variabeln, minus medelvärdet.

Först ska vi ta fram medelvärdet. Det gör vi enkelt med kommandot sum:

In [9]:
sum wdi_lifexp
    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
  wdi_lifexp |        185    71.25413    8.138066   50.59105   83.58781

Medelvärdet är 71.25413. Nu gör vi en ny variabel med kommandot generate (förkortat gen), som är den ursprungliga variabeln minus 71.25413. Vi låter den nya variabeln heta samma sak, fast med prefixet center.

In [17]:
gen center_wdi_lifexp = wdi_lifexp - 71.25413
(9 missing values generated)

Om vi nu kollar på medelvärdet för den ny variabeln ser vi att det är noll (fast pga avrundningen när vi tog fram medelvärdet blir det inte exakt exakt noll, utan ett väldigt litet tal, som visas med "vetenskaplig notation" - 2.73e-07 betyder att det är 2.73 med decimaltecknet sju steg åt vänster, alltså 0.000000273):

In [19]:
sum wdi_lifexp center_wdi_lifexp
    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
  wdi_lifexp |        185    71.25413    8.138066   50.59105   83.58781
center_wdi~p |        185    2.73e-07    8.138066  -20.66308   12.33368

Klart! Notera att de standardavvikelsen är exakt densamma. Min- och maxvärdena har förändrats, men avståndet dem emellan är detsamma som det var förut. Det enda som har hänt är att vi förskjutit skalan.

Standardisera

För att standardisera variabeln ska den ha medelvärdet noll, och standardavvikelsen (ett mått på spridningen) 1. Det åstadkommer vi genom en process i två steg - först drar vi bort medelvärdet för att centrera variabeln, och sedan delar vi med standardavvikelsen. På så sätt kommer den nya standardavvikelsen att bli ett.

Vi kollar först vad medelvärdet och standardavvikelsen är med sum wdi_lifexp och ser då att medelvärdet är 71.25413, och standardavvikelsen är 8.138066:

In [20]:
sum wdi_lifexp
    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
  wdi_lifexp |        185    71.25413    8.138066   50.59105   83.58781

Vi gör nu den standardiserade variabeln med ett kommando, men med hjälp av parenteser. Först utförs uträkningen i parentesen, sedan det utanför parentesen. Först subtraherar vi medelvärdet, och sedan delar vi med standardavvikelsen.

In [21]:
gen std_wdi_lifexp = (wdi_lifexp-71.25413)/8.138066
(9 missing values generated)

Om vi nu tittar på den nya variabeln ser vi återigen att medelvärdet är noll, men standardavvikelsen är nu 1. Min- och maxvärdena har också ändrats:

In [23]:
sum std_wdi_lifexp
    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
std_wdi_li~p |        185    3.83e-08           1  -2.539065   1.515554

Men återigen, det är bara skalan som ändrats. Om vi tittar på ett histogram ser vi att formen på fördelningen är densamma som i det första histogrammet.

In [24]:
histogram std_wdi_lifexp
(bin=13, start=-2.5390654, width=.31189378)

Normalisera

När vi normaliserar en variabel förskjuter vi skalan så att den börjar på noll, och trycker sedan ihop den så att den slutar på ett. Det gör vi genom att först subtrahera minvärdet, och sedan dela med det nya maxvärdet (dvs det gamla maxvärdet minus det gamla minvärdet).

Det går också att göra i ett kommando, om vi kommer ihåg minvärdet (50.59105) och maxvärdet (83.58781):

In [30]:
gen norm_wdi_lifexp = (wdi_lifexp-50.59105)/(83.58781-50.59105)
sum norm_wdi_lifexp
(9 missing values generated)


    Variable |        Obs        Mean    Std. Dev.       Min        Max
-------------+---------------------------------------------------------
norm_wdi_l~p |        185    .6262154    .2466323  -2.44e-08   .9999999

Återigen, bortse från avrundningsproblemen. Det nya miniminvärdet är 0, och det nya maxvärdet är 1. Men om vi tar fram ett histogram skulle vi än en gång se att mönstret är likadant. Det är bara skalan som ändrats.

Sammanfattning

För att sammanfatta. För att göra dessa omkodningar behöver man veta fyra saker: Medelvärdet, standardavvikelsen, minvärdet och maxvärdet. Formlerna för att göra omkodningarna är som följer:

Centrera
gen nyvariabel = gammalvariabel-medelvärde

Standardisera
gen nyvariabel = (gammalvariabel-medelvärde)/standardavvikelse

Normalisera
gen nyvariabel = (gammalvariabel-minvärde)/(maxvärde-minvärde)