Schiefe Daten

Meine Daten sind nicht nicht ausreichend normalverteilt. In diesem Dokument werden einige Möglichkeiten zur Transformation vorgestellt, damit die Daten “besser” normalverteilt sind.

Rechtsschiefe Daten

Wenn die Daten etwas schief sind, können wir eine Transformation anwenden. Rechtsschiefe Daten können mit einem Logarithmus transformiert werden, um sie symmetrischer zu machen. Achtung: Sind negative Zahlen vorhanden, müssen die Daten vorschoben oder ein anderes Verfahren verwendet werden.

set.seed(100)
x <- rgamma(250, 3,0.5)
hist(x)

hist(log(x))

sehr rechtsschiefe Daten

Wenn die Daten stark rechtsschief sind, gibt einige Möglichkeiten. Achtung: Die Daten sollten nicht Null sein. Sollte die Zahl Null in den Daten vorkommen, müssen sie entweder zuerst verschoden werden oder eine andere Transformation verwendet werden.

1/VARIABLE, wobei VARIABLE durch den Namen der Variablen ersetzt werden muss.

par(mfrow=c(1,3)) 
set.seed(100)
x <- rgamma(250, 2,0.2)
hist(x, breaks= 20)
x<- x+3
hist(x, xlim = c(0,20), breaks = 20, main ="x+3")
hist(1/x, breaks= 20)

Alternative Strategie könnte sein:

par(mfrow=c(2,2)) 
hist(sqrt(x))
hist(log10(x))
hist(1/log(x))
hist(1/sqrt(x))

Umsetzung in R - library(bestNormalize)

Datzensatz


set.seed(100)

x <- rgamma(250, 3, 1)
hist(x, breaks =12)

library(bestNormalize)

Box-Cox Powertransformation

Die Mathematiker George Box und David Cox haben dieses Verfahren entwickelt.

boxcox_obj <- bestNormalize::boxcox(x)

Die Johnson Transformation

Der Algorithmus versucht die optimale Formal mit optimalen Parametern zu ermitteln.

yeojohnson_obj <- yeojohnson(x)

zwei Tranformationsarten

arcsinh_obj <- arcsinh_x(x) #Inverse hyperbolic functions
orderNorm_obj <- orderNorm(x)

Plots

xx <- seq(min(x), max(x), length = 100)
plot(xx, predict(arcsinh_obj, newdata = xx), type = "l", col = 1, ylim = c(-4, 4),
xlab = 'x', ylab = "g(x)")
lines(xx, predict(boxcox_obj, newdata = xx), col = 2)
lines(xx, predict(yeojohnson_obj, newdata = xx), col = 3)
lines(xx, predict(orderNorm_obj, newdata = xx), col = 4)

anzahl<-psych::describe(arcsinh_obj$x.t)
anzahl<-sqrt(anzahl$n)
par(mfrow=c(2,2)) 
hist(arcsinh_obj$x.t, main = "Arcsinh transformation" , breaks =  anzahl)
hist(boxcox_obj$x.t, main = "Box Cox transformation",  breaks =  anzahl)
hist(yeojohnson_obj$x.t, main = "Yeo-Johnson transformation", breaks =  anzahl)

hist(orderNorm_obj$x.t, main = "orderNorm transformation", breaks =  anzahl)

NA
NA

Wie füge ich dem Datensatz die transformierte Spalte hinzu?

Version_1 <- arcsinh_obj$x.t
Version_2 <- boxcox_obj$x.t
Version_3 <- yeojohnson_obj$x.t
Version_4 <- orderNorm_obj$x.t

WelcheVersionsollhinzufuegtwerden <- Version_2
datensatz<-data.frame(x)
datensatz <- cbind(datensatz, "t_Spalte" = WelcheVersionsollhinzufuegtwerden)
head(datensatz)
LS0tDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQoNCiMgU2NoaWVmZSBEYXRlbg0KDQpNZWluZSBEYXRlbiBzaW5kIG5pY2h0IG5pY2h0IGF1c3JlaWNoZW5kIG5vcm1hbHZlcnRlaWx0LiBJbiBkaWVzZW0gRG9rdW1lbnQgd2VyZGVuIGVpbmlnZSBNw7ZnbGljaGtlaXRlbiB6dXIgVHJhbnNmb3JtYXRpb24gdm9yZ2VzdGVsbHQsIGRhbWl0IGRpZSBEYXRlbiAiYmVzc2VyIiBub3JtYWx2ZXJ0ZWlsdCBzaW5kLiANCg0KDQojIyMgUmVjaHRzc2NoaWVmZSBEYXRlbg0KDQpXZW5uIGRpZSBEYXRlbiBldHdhcyBzY2hpZWYgc2luZCwga8O2bm5lbiB3aXIgZWluZSBUcmFuc2Zvcm1hdGlvbiBhbndlbmRlbi4gUmVjaHRzc2NoaWVmZSBEYXRlbiBrw7ZubmVuIG1pdCBlaW5lbSBMb2dhcml0aG11cyB0cmFuc2Zvcm1pZXJ0IHdlcmRlbiwgdW0gc2llIHN5bW1ldHJpc2NoZXIgenUgbWFjaGVuLiAqKkFjaHR1bmc6KiogU2luZCBuZWdhdGl2ZSBaYWhsZW4gdm9yaGFuZGVuLCBtw7xzc2VuIGRpZSBEYXRlbiB2b3JzY2hvYmVuIG9kZXIgZWluIGFuZGVyZXMgVmVyZmFocmVuIHZlcndlbmRldCB3ZXJkZW4uDQoNCg0KYGBge3J9DQpzZXQuc2VlZCgxMDApDQp4IDwtIHJnYW1tYSgyNTAsIDMsMC41KQ0KaGlzdCh4KQ0KaGlzdChsb2coeCkpDQpgYGANCiMjIyBzZWhyIHJlY2h0c3NjaGllZmUgRGF0ZW4NCg0KDQpXZW5uIGRpZSBEYXRlbiBzdGFyayByZWNodHNzY2hpZWYgc2luZCwgZ2lidCBlaW5pZ2UgTcO2Z2xpY2hrZWl0ZW4uICoqQWNodHVuZzoqKiBEaWUgRGF0ZW4gc29sbHRlbiBuaWNodCBOdWxsIHNlaW4uICBTb2xsdGUgZGllIFphaGwgTnVsbCBpbiBkZW4gRGF0ZW4gdm9ya29tbWVuLCBtw7xzc2VuIHNpZSBlbnR3ZWRlciB6dWVyc3QgdmVyc2Nob2RlbiB3ZXJkZW4gb2RlciBlaW5lIGFuZGVyZSBUcmFuc2Zvcm1hdGlvbiB2ZXJ3ZW5kZXQgd2VyZGVuLg0KDQogMS9WQVJJQUJMRSwgd29iZWkgVkFSSUFCTEUgZHVyY2ggZGVuIE5hbWVuIGRlciBWYXJpYWJsZW4gZXJzZXR6dCB3ZXJkZW4gbXVzcy4NCiANCmBgYHtyfQ0KcGFyKG1mcm93PWMoMSwzKSkgDQpzZXQuc2VlZCgxMDApDQp4IDwtIHJnYW1tYSgyNTAsIDIsMC4yKQ0KaGlzdCh4LCBicmVha3M9IDIwKQ0KeDwtIHgrMw0KaGlzdCh4LCB4bGltID0gYygwLDIwKSwgYnJlYWtzID0gMjAsIG1haW4gPSJ4KzMiKQ0KaGlzdCgxL3gsIGJyZWFrcz0gMjApDQpgYGANCiMjIyBBbHRlcm5hdGl2ZSBTdHJhdGVnaWUga8O2bm50ZSBzZWluOiANCiANCmBgYHtyfQ0KcGFyKG1mcm93PWMoMiwyKSkgDQpoaXN0KHNxcnQoeCkpDQpoaXN0KGxvZzEwKHgpKQ0KaGlzdCgxL2xvZyh4KSkNCmhpc3QoMS9zcXJ0KHgpKQ0KYGBgDQoNCg0KIyMjIFVtc2V0enVuZyBpbiBSIC0gbGlicmFyeShiZXN0Tm9ybWFsaXplKQ0KDQojIyMjIERhdHplbnNhdHoNCmBgYHtyfQ0KDQpzZXQuc2VlZCgxMDApDQoNCnggPC0gcmdhbW1hKDI1MCwgMywgMSkNCmhpc3QoeCwgYnJlYWtzID0xMikNCg0KYGBgDQoNCg0KDQoNCg0KYGBge3J9DQpsaWJyYXJ5KGJlc3ROb3JtYWxpemUpDQpgYGANCg0KIyMjIEJveC1Db3ggUG93ZXJ0cmFuc2Zvcm1hdGlvbg0KDQoNCkRpZSBNYXRoZW1hdGlrZXIgR2VvcmdlIEJveCB1bmQgRGF2aWQgQ294IGhhYmVuIGRpZXNlcyBWZXJmYWhyZW4gZW50d2lja2VsdC4NCg0KYGBge3J9DQpib3hjb3hfb2JqIDwtIGJlc3ROb3JtYWxpemU6OmJveGNveCh4KQ0KDQpgYGANCg0KDQojIyMgRGllIEpvaG5zb24gVHJhbnNmb3JtYXRpb24NCg0KRGVyIEFsZ29yaXRobXVzIHZlcnN1Y2h0IGRpZSBvcHRpbWFsZSBGb3JtYWwgbWl0IG9wdGltYWxlbiBQYXJhbWV0ZXJuIHp1IGVybWl0dGVsbi4NCg0KYGBge3J9DQp5ZW9qb2huc29uX29iaiA8LSB5ZW9qb2huc29uKHgpDQpgYGANCg0KDQojIyMgendlaSBUcmFuZm9ybWF0aW9uc2FydGVuIA0KDQpgYGB7cn0NCmFyY3Npbmhfb2JqIDwtIGFyY3NpbmhfeCh4KSAjSW52ZXJzZSBoeXBlcmJvbGljIGZ1bmN0aW9ucw0Kb3JkZXJOb3JtX29iaiA8LSBvcmRlck5vcm0oeCkNCmBgYA0KDQojIyMgUGxvdHMNCg0KYGBge3J9DQp4eCA8LSBzZXEobWluKHgpLCBtYXgoeCksIGxlbmd0aCA9IDEwMCkNCnBsb3QoeHgsIHByZWRpY3QoYXJjc2luaF9vYmosIG5ld2RhdGEgPSB4eCksIHR5cGUgPSAibCIsIGNvbCA9IDEsIHlsaW0gPSBjKC00LCA0KSwNCnhsYWIgPSAneCcsIHlsYWIgPSAiZyh4KSIpDQpsaW5lcyh4eCwgcHJlZGljdChib3hjb3hfb2JqLCBuZXdkYXRhID0geHgpLCBjb2wgPSAyKQ0KbGluZXMoeHgsIHByZWRpY3QoeWVvam9obnNvbl9vYmosIG5ld2RhdGEgPSB4eCksIGNvbCA9IDMpDQpsaW5lcyh4eCwgcHJlZGljdChvcmRlck5vcm1fb2JqLCBuZXdkYXRhID0geHgpLCBjb2wgPSA0KQ0KYGBgDQoNCg0KDQoNCmBgYHtyfQ0KYW56YWhsPC1wc3ljaDo6ZGVzY3JpYmUoYXJjc2luaF9vYmokeC50KQ0KYW56YWhsPC1zcXJ0KGFuemFobCRuKQ0KcGFyKG1mcm93PWMoMiwyKSkgDQpoaXN0KGFyY3Npbmhfb2JqJHgudCwgbWFpbiA9ICJBcmNzaW5oIHRyYW5zZm9ybWF0aW9uIiAsIGJyZWFrcyA9ICBhbnphaGwpDQpoaXN0KGJveGNveF9vYmokeC50LCBtYWluID0gIkJveCBDb3ggdHJhbnNmb3JtYXRpb24iLCAgYnJlYWtzID0gIGFuemFobCkNCmhpc3QoeWVvam9obnNvbl9vYmokeC50LCBtYWluID0gIlllby1Kb2huc29uIHRyYW5zZm9ybWF0aW9uIiwgYnJlYWtzID0gIGFuemFobCkNCg0KaGlzdChvcmRlck5vcm1fb2JqJHgudCwgbWFpbiA9ICJvcmRlck5vcm0gdHJhbnNmb3JtYXRpb24iLCBicmVha3MgPSAgYW56YWhsKQ0KDQoNCmBgYA0KDQojIyMgIFdpZSBmw7xnZSBpY2ggZGVtIERhdGVuc2F0eiBkaWUgdHJhbnNmb3JtaWVydGUgU3BhbHRlIGhpbnp1PyANCg0KYGBge3J9DQpWZXJzaW9uXzEgPC0gYXJjc2luaF9vYmokeC50DQpWZXJzaW9uXzIgPC0gYm94Y294X29iaiR4LnQNClZlcnNpb25fMyA8LSB5ZW9qb2huc29uX29iaiR4LnQNClZlcnNpb25fNCA8LSBvcmRlck5vcm1fb2JqJHgudA0KDQpXZWxjaGVWZXJzaW9uc29sbGhpbnp1ZnVlZ3R3ZXJkZW4gPC0gVmVyc2lvbl8yDQpkYXRlbnNhdHo8LWRhdGEuZnJhbWUoeCkNCmRhdGVuc2F0eiA8LSBjYmluZChkYXRlbnNhdHosICJ0X1NwYWx0ZSIgPSBXZWxjaGVWZXJzaW9uc29sbGhpbnp1ZnVlZ3R3ZXJkZW4pDQpoZWFkKGRhdGVuc2F0eikNCmBgYA0KDQoNCg==