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
.
use "https://www.qogdata.pol.gu.se/dataarchive/qog_bas_cs_jan18.dta", clear
histogram wdi_lifexp
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.
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
:
sum wdi_lifexp
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.
gen center_wdi_lifexp = wdi_lifexp - 71.25413
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):
sum wdi_lifexp center_wdi_lifexp
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.
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:
sum wdi_lifexp
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.
gen std_wdi_lifexp = (wdi_lifexp-71.25413)/8.138066
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:
sum std_wdi_lifexp
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.
histogram std_wdi_lifexp
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):
gen norm_wdi_lifexp = (wdi_lifexp-50.59105)/(83.58781-50.59105)
sum norm_wdi_lifexp
Å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.
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)