De `schaal` in R begrijpen

Ik probeer de definitie van scaledie R biedt te begrijpen. Ik heb gegevens (mydata) waarmee ik een warmtekaart wil maken, en er is een ZEER sterke positieve scheeftrekking. Ik heb een heatmap gemaakt met een dendrogram voor zowel scale(mydata)als log(my data), en de dendrogrammen zijn voor beide verschillend. Waarom? Wat betekent het om mijn gegevens te schalen, in plaats van mijn gegevens te loggen? En wat zou meer geschikt zijn als ik naar het dendrogram wil kijken dat de relatie tussen de kolommen van mijn gegevens illustreert?

Bedankt voor alle hulp! Ik heb de definities gelezen, maar ze gaan me te boven.


Antwoord 1, autoriteit 100%

logneemt gewoon de logaritme (standaard e) van elk element van de vector.
scale, met standaardinstellingen, berekent het gemiddelde en de standaarddeviatie van de hele vector, en “schaalt” vervolgens elk element met die waarden door het gemiddelde af te trekken en te delen door de sd. (Als u scale(x, scale=FALSE)gebruikt, wordt alleen het gemiddelde afgetrokken, maar niet gedeeld door de standaarddeviatie.)

Merk op dat dit u dezelfde waarden geeft

  set.seed(1)
   x <- runif(7)
   # Manually scaling
   (x - mean(x)) / sd(x)
   scale(x)

Antwoord 2, autoriteit 22%

Het biedt niets anders dan een standaardisatievan de gegevens. De waarden die het creëert zijn bekend onder verschillende namen, waaronder z-scores(“Z” omdat de normale verdeling ook bekend staat als de “Z-verdeling”).

Meer is hier te vinden:

http://en.wikipedia.org/wiki/Standard_score


Antwoord 3, autoriteit 8%

Dit is een late toevoeging, maar ik was zelf op zoek naar informatie over de schaalfunctie en misschien kan iemand anders er ook iets aan hebben.

Om het antwoord van Ricardo Saportaeen beetje aan te passen.
Schalen gebeurt nietmet standaarddeviatie, althans niet in versie 3.6.1 van R, ik baseer dit op “Becker, R. (2018). De nieuwe S-taal.CRC Druk op.” en mijn eigen experimenten.

X.man.scaled <- X/sqrt(sum(X^2)/(length(X)-1))
X.aut.scaled <- scale(X, center = F)

Het resultaat van deze rijen is exact hetzelfde, ik laat het vanwege de eenvoud zonder centreren zien.

Ik zou reageren in een opmerking, maar had niet genoeg reputatie.


Antwoord 4, autoriteit 4%

Ik dacht dat ik zou bijdragen door een concreet voorbeeld te geven van het praktische gebruik van de schaalfunctie. Stel dat u 3 testscores heeft (wiskunde, wetenschappen en Engels) die u wilt vergelijken. Misschien wilt u zelfs een samengestelde score genereren op basis van elk van de 3 tests voor elke observatie. Uw gegevens kunnen er als volgt uitzien:

student_id <- seq(1,10)
math <- c(502,600,412,358,495,512,410,625,573,522)
science <- c(95,99,80,82,75,85,80,95,89,86)
english <- c(25,22,18,15,20,28,15,30,27,18)
df <- data.frame(student_id,math,science,english)

Het is duidelijk niet logisch om de gemiddelden van deze 3 scores te vergelijken, aangezien de schaal van de scores enorm verschilt. Door ze echter te schalen, heb je meer vergelijkbare score-eenheden:

z <- scale(df[,2:4],center=TRUE,scale=TRUE)

U kunt deze geschaalde resultaten vervolgens gebruiken om een samengestelde score te maken. Bijvoorbeeld het gemiddelde van de waarden en een cijfer toekennen op basis van de percentielen van dit gemiddelde. Ik hoop dat dit heeft geholpen!

Opmerking: ik heb dit voorbeeld geleend uit het boek “R In Action”. Het is een geweldig boek! Zou het zeker aanraden.

Other episodes