Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
-
- Beiträge: 5
- Registriert: Mo Sep 30, 2019 1:17 pm
Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
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
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
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
Einen großen Dataframe würde ich i. d. R. über den Zwischenschritt einer großen Matrix erstellen:
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
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
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
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
Vorsicht beim Testen der Performance von "R"!ich möchte bei meinen Rechnern die Laufzeiten und Variablenrestriktionen von R/Stata etc. testen.
Im R-Umfeld (R-base und über 14.000 Packages ) 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.
-
- Beiträge: 5
- Registriert: Mo Sep 30, 2019 1:17 pm
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
@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)
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)
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
Also im Laufzeittest (Vergleich R und Stata) habe ich Logit-Regressionen durchgeführt.
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.Falls interessant: Stata13(IC) lief dabei ca. 3 mal so schnell wie R. (Windows 10Pro / Intelcore i7 6700CPU @ 3,40GHz / 8 GB RAM)
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?
-
- Beiträge: 5
- Registriert: Mo Sep 30, 2019 1:17 pm
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
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
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
-
- Beiträge: 5
- Registriert: Mo Sep 30, 2019 1:17 pm
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
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.
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.
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
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 !
Für Vernunft ist aber der Benutzer selbst zuständig !
-
- Beiträge: 5
- Registriert: Mo Sep 30, 2019 1:17 pm
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
Ja da hast du wohl recht
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.
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.
Re: Großen Datensatz mit vielen Variablen(Spalten) selbst erstellen
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...
Ausserdem habe ich noch Microsoft R Open (mit "eingebautem" MKL) installiert, das war aber jeweils nur minimal schneller...