So normalisieren Sie Daten in R

Von Fabian
Kategorie: R
Tags: Operationen
Lesezeit: 6 Minuten

In den meisten Fällen bedeutet dies, dass Personen, die über das „Normalisieren“ von Variablen in einem Datensatz sprechen, die Werte so skalieren möchten, dass die Variable einen Mittelwert von 0 und eine Standardabweichung von 1 hat.

Der häufigste Grund für die Normalisierung von Variablen besteht darin, dass Sie eine multivariate Analyse durchführen (d.h. die Beziehung zwischen mehreren Prädiktorvariablen und einer Antwortvariablen verstehen möchten) und dass jede Variable gleichermaßen zur Analyse beitragen soll.

Wenn Variablen in verschiedenen Maßstäben gemessen werden, tragen sie häufig nicht gleichermaßen zur Analyse bei. Wenn beispielsweise die Werte einer Variablen im Bereich von 0 bis 100.000 und die Werte einer anderen Variablen im Bereich von 0 bis 100 liegen, erhält die Variable mit dem größeren Bereich in der Analyse ein größeres Gewicht.

Dies ist häufig der Fall, wenn eine Variable etwa das Gehalt (0 bis 100.000 US-Dollar) und eine andere Variable das Alter (0 bis 100 Jahre) misst.

Durch Normalisieren der Variablen können wir sicher sein, dass jede Variable gleichermaßen zur Analyse beiträgt. Zwei gebräuchliche Methoden zum Normalisieren (oder „Skalieren“) von Variablen sind:

  • Min-Max-Normalisierung: (X – min (X)) / (max (X) – min (X))
  • Z-Score-Standardisierung : (X – μ) / σ

Als nächstes zeigen wir, wie diese beiden Techniken in R implementiert werden.

Normalisieren (oder „Skalieren“) von Variablen in R

Für jedes der folgenden Beispiele verwenden wir die integrierte Iris des R-Datensatzes, um zu veranschaulichen, wie Variablen in R normalisiert oder skaliert werden:

#Die ersten sechs Zeilen des Iris- Datensatzes anzeigen
head(iris)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          5.1         3.5          1.4         0.2  setosa
#2          4.9         3.0          1.4         0.2  setosa
#3          4.7         3.2          1.3         0.2  setosa
#4          4.6         3.1          1.5         0.2  setosa
#5          5.0         3.6          1.4         0.2  setosa
#6          5.4         3.9          1.7         0.4  setosa

Min-Max-Normalisierung

Die Formel für eine Min-Max-Normalisierung lautet:

(X – min (X)) / (max (X) – min (X))

Für jeden Wert einer Variablen ermitteln wir einfach, wie weit dieser Wert vom Mindestwert entfernt ist, und dividieren ihn dann durch den Bereich.

Um dies in R zu implementieren, können wir eine einfache Funktion definieren und diese Funktion dann mit lapply auf die Spalten im Iris-Dataset anwenden, die wir möchten:

# Min-Max-Normalisierungsfunktion definieren
min_max_norm <- function(x) {
    (x - min(x)) / (max(x) - min(x))
  }

#Wenden Sie die Min-Max-Normalisierung auf die ersten vier Spalten im Iris-Datensatz an
iris_norm <- as.data.frame(lapply(iris[1:4], min_max_norm))
# Die ersten sechs Zeilen des normalisierten Iris-Datensatzes anzeigen
(head(iris_norm)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width
#1   0.22222222   0.6250000   0.06779661  0.04166667
#2   0.16666667   0.4166667   0.06779661  0.04166667
#3   0.11111111   0.5000000   0.05084746  0.04166667
#4   0.08333333   0.4583333   0.08474576  0.04166667
#5   0.19444444   0.6666667   0.06779661  0.04166667
#6   0.30555556   0.7916667   0.11864407  0.12500000

Beachten Sie, dass jede der Spalten jetzt Werte im Bereich von 0 bis 1 hat. Beachten Sie auch, dass die fünfte Spalte „Species“ aus diesem Dataframe entfernt wurde. Wir können es einfach wieder hinzufügen, indem wir den folgenden Code verwenden:

#Species Spalte wieder hinzufügen
iris_norm$Species <- iris$Species
# Die ersten sechs Zeilen von iris_norm anzeigen
head(iris_norm)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1   0.22222222   0.6250000   0.06779661  0.04166667  setosa
#2   0.16666667   0.4166667   0.06779661  0.04166667  setosa
#3   0.11111111   0.5000000   0.05084746  0.04166667  setosa
#4   0.08333333   0.4583333   0.08474576  0.04166667  setosa
#5   0.19444444   0.6666667   0.06779661  0.04166667  setosa
#6   0.30555556   0.7916667   0.11864407  0.12500000  setosa

Z-Score Standardisierung

Der Nachteil der Min-Max-Normalisierungstechnik besteht darin, dass die Datenwerte in Richtung des Mittelwerts gebracht werden. Wenn wir sicherstellen möchten, dass Ausreißer stärker gewichtet werden als andere Werte, ist eine Z-Score-Standardisierung eine bessere Implementierungstechnik.

Die Formel für eine Z-Score-Standardisierung lautet:

(X – μ) / σ

Für jeden Wert einer Variablen subtrahieren wir einfach den Mittelwert der Variablen und dividieren dann durch die Standardabweichung der Variablen.

Um dies in R zu implementieren, haben wir verschiedene Möglichkeiten:

1. Standardisieren Sie eine Variable

Wenn wir einfach eine Variable in einem Datensatz standardisieren möchten, z. B. Sepal.Width im Iris-Datensatz, können wir den folgenden Code verwenden:

#Sepal.Width standardisieren
iris$Sepal.Width <- (iris$Sepal.Width - mean(iris$Sepal.Width)) / sd(iris$Sepal.Width)
head(iris)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1          5.1  1.01560199          1.4         0.2  setosa
#2          4.9 -0.13153881          1.4         0.2  setosa
#3          4.7  0.32731751          1.3         0.2  setosa
#4          4.6  0.09788935          1.5         0.2  setosa
#5          5.0  1.24503015          1.4         0.2  setosa
#6          5.4  1.93331463          1.7         0.4  setosa

Die Werte von Sepal.Width sind jetzt so skaliert, dass der Mittelwert 0 und die Standardabweichung 1 ist. Wir können dies sogar überprüfen, wenn wir möchten:

#Mittelwert von Sepal.Width finden
mean(iris$Sepal.Width)
# [1] 2.034094e-16 # grundsätzlich Null

#Standardabweichung von Sepal.Width finden
sd(iris$Sepal.Width)

# [1] 1

2. Standardisieren Sie mehrere Variablen mit der Skalierungsfunktion

Um mehrere Variablen zu standardisieren, können wir einfach die Skalierungsfunktion verwenden. Der folgende Code zeigt beispielsweise, wie die ersten vier Spalten des Iris-Datasets skaliert werden:

#Standardisieren Sie die ersten vier Spalten des Iris-Datensatzes
iris_standardize <- as.data.frame(scale(iris[1:4]))
# Die ersten sechs Zeilen des standardisierten Datensatzes anzeigen
head(iris_standardize)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width
#1   -0.8976739  1.01560199    -1.335752   -1.311052
#2   -1.1392005 -0.13153881    -1.335752   -1.311052
#3   -1.3807271  0.32731751    -1.392399   -1.311052
#4   -1.5014904  0.09788935    -1.279104   -1.311052
#5   -1.0184372  1.24503015    -1.335752   -1.311052
#6   -0.5353840  1.93331463    -1.165809   -1.048667

Beachten Sie, dass die Skalierungsfunktion standardmäßig versucht, jede Spalte in einem Dataframe zu standardisieren. Daher würden wir einen Fehler erhalten, wenn wir versuchen würden, die scale(iris) zu verwenden, da die Spalte “ Spezies“ nicht numerisch ist und nicht standardisiert werden kann:

scale(iris)
#Error in colMeans(x, na.rm = TRUE): 'x' must be numeric

Es ist jedoch möglich, nur bestimmte Variablen in einem Dataframe zu standardisieren und gleichzeitig alle anderen Variablen mit dem Paket dplyr gleich zu halten. Der folgende Code standardisiert beispielsweise die Variablen Sepal.Width und Sepal.Length, während alle anderen Variablen gleich bleiben :

#Laden der dplyr Bibliothek
library(dplyr)
#Sepal.Width und Sepal.Length standardisieren
iris_new% mutate_each_(list(~scale(.) %>% as.vector),
                                  vars = c("Sepal.Width","Sepal.Length"))

# Die ersten sechs Zeilen des neuen Dataframes anzeigen
head(iris_new)

#  Sepal.Length Sepal.Width Petal.Length Petal.Width Species
#1   -0.8976739  1.01560199          1.4         0.2  setosa
#2   -1.1392005 -0.13153881          1.4         0.2  setosa
#3   -1.3807271  0.32731751          1.3         0.2  setosa
#4   -1.5014904  0.09788935          1.5         0.2  setosa
#5   -1.0184372  1.24503015          1.4         0.2  setosa
#6   -0.5353840  1.93331463          1.7         0.4  setosa

Beachten Sie, dass Sepal.Length und Sepal.Width so standardisiert sind, dass beide Variablen einen Mittelwert von 0 und eine Standardabweichung von 1 haben, während die anderen drei Variablen im Dataframe unverändert bleiben.

Statistik: Der Weg zur Datenanalyse

* Amazon Affiliate Link


Das könnte Sie auch interessieren: