Multidimensionale schaling uitvoeren in r (met voorbeeld)
In de statistiek is multidimensionale schaling een manier om de gelijkenis van waarnemingen in een dataset in een abstracte cartesiaanse ruimte (meestal 2D-ruimte) te visualiseren.
De eenvoudigste manier om multidimensionaal schalen in R uit te voeren, is door de ingebouwde functie cmdscale() te gebruiken, die de volgende basissyntaxis gebruikt:
cmdschaal(d, eig = ONWAAR, k = 2, …)
Goud:
- d : Een afstandsmatrix die doorgaans wordt berekend door de functie dist() .
- eig : het al dan niet retourneren van eigenwaarden.
- k : het aantal dimensies waarin de gegevens moeten worden bekeken. De standaardwaarde is 2 .
Het volgende voorbeeld laat zien hoe u deze functie in de praktijk kunt gebruiken.
Voorbeeld: multidimensionaal schalen in R
Stel dat we het volgende dataframe in R hebben dat informatie bevat over verschillende basketbalspelers:
#create data frame df <- data. frame (points=c(4, 4, 6, 7, 8, 14, 16, 19, 25, 25, 28), assists=c(3, 2, 2, 5, 4, 8, 7, 6, 8, 10, 11), blocks=c(7, 3, 6, 7, 5, 8, 8, 4, 2, 2, 1), rebounds=c(4, 5, 5, 6, 5, 8, 10, 4, 3, 2, 2)) #add row names row. names (df) <- LETTERS[1:11] #view data frame df points assists blocks rebounds A 4 3 7 4 B 4 2 3 5 C 6 2 6 5 D 7 5 7 6 E 8 4 5 5 F 14 8 8 8 G 16 7 8 10 H 19 6 4 4 I 25 8 2 3 D 25 10 2 2 K 28 11 1 2
We kunnen de volgende code gebruiken om multidimensionaal schalen uit te voeren met de cmdscale() functie en de resultaten in de 2D-ruimte te visualiseren:
#calculate distance matrix
d <- dist(df)
#perform multidimensional scaling
fit <- cmdscale(d, eig= TRUE , k= 2 )
#extract (x, y) coordinates of multidimensional scaling
x <- fit$points[,1]
y <- fit$points[,2]
#create scatterplot
plot(x, y, xlab=" Coordinate 1 ", ylab=" Coordinate 2 ",
main=" Multidimensional Scaling Results ", type=" n ")
#add row names of data frame as labels
text(x, y, labels=row. names (df))
Spelers in het oorspronkelijke dataframe die vergelijkbare waarden hebben in de oorspronkelijke vier kolommen (punten, assists, blocks en rebounds) staan in de plot dicht bij elkaar.
Spelers A en C zijn bijvoorbeeld gesloten voor elkaar. Hier zijn hun waarden uit het originele dataframe:
#view data frame values for players A and C df[rownames(df) %in% c(' A ', ' C '), ] points assists blocks rebounds A 4 3 7 4 C 6 2 6 5
Hun waarden voor punten, assists, blocks en rebounds zijn allemaal behoorlijk vergelijkbaar, wat verklaart waarom ze zo dicht bij elkaar liggen in de 2D-plot.
Neem daarentegen spelers B en K die ver uit elkaar staan in het plot.
Als we naar hun waarden in de originele gegevens verwijzen, kunnen we zien dat ze behoorlijk verschillend zijn:
#view data frame values for players B and K df[rownames(df) %in% c(' B ', ' K '), ] points assists blocks rebounds B 4 2 3 5 K 28 11 1 2
De 2D-plot is dus een goede manier om te visualiseren hoe vergelijkbaar elke speler is voor alle variabelen in het dataframe.
Spelers met vergelijkbare statistieken worden dicht bij elkaar gegroepeerd, terwijl spelers met zeer verschillende statistieken verder van elkaar verwijderd zijn in het plot.
Merk op dat je ook de exacte coördinaten (x, y) van elke speler in de plot kunt extraheren door fit te typen, wat de naam is van de variabele waarin we de resultaten van de cmdscale() functie hebben opgeslagen:
#view (x, y) coordinates of points in the plot
fit
[,1] [,2]
A -10.6617577 -1.2511291
B -10.3858237 -3.3450473
C -9.0330408 -1.1968116
D -7.4905743 1.0578445
E -6.4021114 -1.0743669
F -0.4618426 4.7392534
G 0.8850934 6.1460850
H 4.7352436 -0.6004609
I 11.3793381 -1.3563398
J 12.0844168 -1.5494108
K 15.3510585 -1.5696166
Aanvullende bronnen
In de volgende tutorials wordt uitgelegd hoe u andere veelvoorkomende taken in R kunt uitvoeren:
Hoe gegevens in R te normaliseren
Hoe datacenteren in R
Hoe uitschieters in R te verwijderen