Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Allgemeine Statistik mit R, die Test-Methode ist noch nicht bekannt, ich habe noch keinen Plan!

Moderatoren: EDi, jogo

pilmeni123
Beiträge: 5
Registriert: Mo Sep 30, 2019 1:17 pm

Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von pilmeni123 »

Hallo Liebe Community,

ich möchte bei meinen Rechnern die Laufzeiten und Variablenrestriktionen von R/Stata etc. testen. Hierzu brauche ich große Datensätze.

Die Laufzeit (von zB Logit) konnte ich bereits gut testen, hierüfr habe ich mir in R Samples mit vielen Beobachtungen erstellt.

Nun zu meiner Frage:
Wie kann ich mir (z.B. in R) einen Datensatz mit enorm vielen Variablen erstellen damit ich diese zB in ein Regressionsmodell mit sehr vielen Variablen einfügen kann.

(Ohne mich großartig damit auszukennen, habe ich gehört, dass R bei Anwendung alles in den Arbeitsspeicher läd. Hierfür wollte ich mal testen, ab welcher Variablenanzahl eine Fehlermeldung kommt)

Über jede Hilfe bin ich dankbar!
Liebe Grüße
bigben
Beiträge: 2777
Registriert: Mi Okt 12, 2016 9:09 am

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von bigben »

Einen großen Dataframe würde ich i. d. R. über den Zwischenschritt einer großen Matrix erstellen:

Code: Alles auswählen

bigmatrix <- matrix(1:1e6, ncol=1e4) # 10.000 Spalten, insgesamt 1.000.000 Werte in einer Matrix
big.df <- as.data.frame(bigmatrix) # aus der Matrix einen Dataframe machen
Da Du vorhast, die Größe Deines Speichers auszutesten ist das natürlich unfair, weil hier einmal Speicher für eine Matrix und dann nocheinmal Speicher für einen Dataframe gebraucht wird. Dieses Vorgehen ist als wahrscheinlich geeignet, auszuprobieren ob Standard-R mit hinreichend großen Datensätzen für Deine Anwendung umgehen kann, aber nicht dazu, eine Obergrenze zu bestimmen. Aber mit zehn hoch Beobachtungen in zehn hoch 6 Spalten klappt das auf meinem Rechner noch anstandslos und in weniger als einer Sekunde.

Wenn Du in Standard-R an Grenzen stoßen solltest, gibt es geeignete Zusatzpakete für R, die auch mit out-of-memory Daten umgehen können. Schau mal unter der Überschrift "Large memory and out-of-memory data" in folgender Übersicht: https://cran.r-project.org/web/views/HighPerformanceComputing.html
Auf der Seite findest Du auch einige andere Dinge die interessant werden können, wenn Du wirklich so große Datensätze verarbeiten willst. Du wirst danach zugeben müssen, dass sich auch im R-Umfeld viele schlaue Menschen Gedanken über sehr große Datensätze gemacht haben.
Magst Du kurz beschreiben, wie groß die Datensätze wären, die Dich interessieren?

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von Athomas »

ich möchte bei meinen Rechnern die Laufzeiten und Variablenrestriktionen von R/Stata etc. testen.
Vorsicht beim Testen der Performance von "R"!

Im R-Umfeld (R-base und über 14.000 Packages :shock: ) gibt es für jedes Problem eine Vielzahl von Lösungen.
Die Unterschiede sind für kleine Datensätze häufig marginal, bei großen gibt es aber riiiesige Unterschiede.

Ich benutze für diese großen Datensätze mit Begeisterung das package "data.table", das auch dann noch flott Ergebnisse liefert, wenn Alternativen crashen oder in einen tagelangen (scheinbaren) Dauerschlaf versinken.
pilmeni123
Beiträge: 5
Registriert: Mo Sep 30, 2019 1:17 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von pilmeni123 »

@bigben

danke das werde ich mal ausprobieren. Muss ich nur mal schauen, wie ich die Spalten dann geeignet befülle!

Also im Laufzeittest (Vergleich R und Stata) habe ich Logit-Regressionen durchgeführt. Dazu hatte ich mir bis jetzt u.a. folgende Datensätze erstellt:
-1 unabh. Var (20Mio Beobachtungen)
-5 unabh. Var (5Mio. Beobachtungen)
-[Multinomiell:] 5 Ausprägungen der abh. Var./ 10 unabh. Var (100k Beobachtungen)

Falls interessant: Stata13(IC) lief dabei ca. 3 mal so schnell wie R. (Windows 10Pro / Intelcore i7 6700CPU @ 3,40GHz / 8 GB RAM)
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von Athomas »

Also im Laufzeittest (Vergleich R und Stata) habe ich Logit-Regressionen durchgeführt.
Falls interessant: Stata13(IC) lief dabei ca. 3 mal so schnell wie R. (Windows 10Pro / Intelcore i7 6700CPU @ 3,40GHz / 8 GB RAM)
Also, damit testest Du speziell die Performance einer logistischen Regression, wahrscheinlich durch irgendein GLM!? In dem Zusammenhang ist mein Hinweis auf data.table uninteressant - es sei denn, Du machst größere Klimmzüge, um die Daten zusammen zu bekommen.

Ich bin von den GLM-Möglichkeiten von R bei größeren Datenmengen auch nicht begeistert, aber ein Faktor 3 - hmm, hmm..
Die Verwendung von MKL als "Lineare Algebra Bibliothek" soll einiges bringen - habe ich aber noch nicht gemacht.

Welche der vielen in R möglichen Varianten hast Du verwendet? Sind die Daten/das Testprogramm geheim oder willst Du sie zeigen?
pilmeni123
Beiträge: 5
Registriert: Mo Sep 30, 2019 1:17 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von pilmeni123 »

Ich habe mir eigentlich ganz simpel einfach irgendeinen Datensatz erstellt und den abgespeichert, um in Stata den selben zu verwenden.

Zum Beispiel:

x1<-c(0,1)
a<-sample(x1,5000000,replace=TRUE)

b1<-rnorm(5000000, mean=50, sd=10)
b2<-rnorm(5000000, mean=10, sd=1)
b3<-rnorm(5000000, mean=0, sd=0.4)
b4<-rnorm(5000000, mean=2, sd=0.9)
b5<-rnorm(5000000, mean=11, sd=5)
b6<-rnorm(5000000, mean=22, sd=1.1)
b7<-rnorm(5000000, mean=2, sd=0.1)
b8<-rnorm(5000000, mean=16, sd=1)
b9<-rnorm(5000000, mean=77, sd=10)
b10<-rnorm(5000000, mean=100, sd=12)
test2 <- data.frame(a,b1,b2,b3,b4,b5,b6,b7,b8,b9,b10)


Angewendet habe ich eigentlich nur glm(modell,binomial) für logit und multinom für die multinomielle logit. Viel mehr wurde noch nicht getestet, bin ziemlich neu in der Anwendung mit R.

Die Laufzeit wurde zB wie folgt gemessen:

start.time <- Sys.time()

glm(test2$a ~ test2$b1+test2$b2+test2$b3+test2$b4+test2$b5+test2$b6+test2$b7+test2$b8+test2$b9+test2$b10, binomial)

end.time <- Sys.time()
time.taken <- end.time - start.time
time.taken



Stata hat hierfür ca 8-10sek gebraucht / R ca 22-26sek
pilmeni123
Beiträge: 5
Registriert: Mo Sep 30, 2019 1:17 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von pilmeni123 »

Eine Frage zwischendurch :)

habe ich das richtig verstanden, dass die maximale Anzahl von unabh. Variablen in einem Modell sich in R komplett nach der Rechenleistung orientiert. Also es an sich keine Obergrenze gibt???
In Stata ist die Anzahl je nach Lizenz ja glaube ich limitiert.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von Athomas »

R ist komplettamente auf lau - wer sollte da ein Interesse an einer künstlichen Limitierung der Regressoren haben?
Für Vernunft ist aber der Benutzer selbst zuständig :) !
pilmeni123
Beiträge: 5
Registriert: Mo Sep 30, 2019 1:17 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von pilmeni123 »

Ja da hast du wohl recht :D

Nur zur Info, falls ihr euch fragt was ich überhaupt machen will:

Wir haben bei uns zurzeit eine Stata-Lizenz, überlegen jedoch umzusteigen. Ich soll für uns einen Vergleich verschiedener Software erstellen, wo ich auch die Punkte Rechenleistungsvergleich und Restriktionen zur Variablenanzahl untersuchen soll.
Athomas
Beiträge: 769
Registriert: Mo Feb 26, 2018 8:19 pm

Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen

Beitrag von Athomas »

Ich habe es bei mir mal laufen lassen (auf einem etwas schnelleren Prozessor, i7-6700K, aber 64 GB Speicher - letzteres sollte allerdings keine Rolle spielen) und habe 16,4 sec gebraucht, mit "speedglm" 10,8 sec - ein bisschen was geht also noch.

Ausserdem habe ich noch Microsoft R Open (mit "eingebautem" MKL) installiert, das war aber jeweils nur minimal schneller...
Antworten