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

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 »

Neben speedglm gibt es dann noch fastglm und ganz bestimmt findet man noch mehr hacks. Dann müsste man für so einen Vergleich auch noch schauen, ob die Rechenpräzision und der Umgang mit missings gleich gut ist und ob einer der Competitoren zwischendurch mehr Speicher alloziert als der andere und ob man die Rechnung in einer von beiden Sprachen leichter parallelisieren kann. Kurzum: Kein einfacher Job, den Du da hast und Du solltest aufpassen, dass Du Deine Ergebnisse nicht überinterpretierst.

A propos Ergebnisse: Das hier kennst Du? https://github.com/matthieugomez/benchmark-stata-r

Wenn es war sein sollte, dass R schwerer zu erlernen ist als Stata, dann fände ich das bedeutend gewichtiger als dreifache Geschwindigkeit bei der logistischen Regression. Dann wiederum kann man mit den LIzenzkosten jeden Mitarbeiter mehrere Stunden etwas lernen lassen. Wenn nur eines der beiden Programme den Konkurrenzkampf überlebt, dann geht eher StataCorp pleite als dass hunderte begeisterter Universitätsangehörige aufhören, ihr Hobby zu pflegen.
danke das werde ich mal ausprobieren. Muss ich nur mal schauen, wie ich die Spalten dann geeignet befülle!
In meiner Vorlage werden die Spalten mit fortlaufenden Zahlen gefüllt. Das lässt sich mühelos abwandeln und mit Zufallszahlen befüllen, aber das dauert dann etwas länger. Gute Zufallszahlen bekommt man nicht so ganz schnell:

Code: Alles auswählen

large_random <- function(n, m){
  as.data.frame(matrix(rnorm(n*m), ncol=m))
}

a <- large_random(1000, 100000)
dim(a)
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 »

Weil ich selbst mal ab und zu mit GLMs herumbrassele (und mit den mir bekannten R-Möglichkeiten nicht glücklich bin) habe ich mir direkt mal "fastglm" angeguckt.

Das package ist sehr jung (1/2 Jahr, Version 0.0.1 :) ) und bietet noch reichlich Entwicklungsmöglichkeiten:
einerseits ist es kaum schneller als "speedglm" (ca. 10% mit method=3), andererseits verlangt es für die Eingabe der "unabhängigen" Variablen eine Matrix - was (so sehe ich das jedenfalls) eine gemischte Verwendung von Faktoren (ohne selbst geschriebene Umcodierung in Dummyvariablen) und Variates ausschließt...

Der eigentliche Fokus des Packages scheint - anders als der Name suggeriert - weniger auf der Geschwindigkeit als auf der Stabilität zu liegen.
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 »

Deine "Nonsens"-Daten (abhängige Variable unabhängig von den unabhängigen :D ) führt dazu, dass das GLM nach wenigen (bei mir i.a. drei) Iterationen fertig wird.
Ich habe deshalb eine Simulation von Zahlenmaterial geschrieben, das näher am theoretischen Erzeugungsmechanismus der logistischen Regression ist.
Das hat ausserdem den Vorteil, dass man im Besitz der "wahren" Parameter ist - und sie mit den Ergebnissen der Berechnungen vergleichen kann.
Die sind bei 5 Mio Beobachtungen natürlich sehr nahe dran...

Ich kenne STATA nicht - wie würde man das da machen, ginge es auch so kompakt?

Code: Alles auswählen

Anzahl    <- 5000000
Variablen <- 10

A         <- matrix(rnorm(Anzahl*Variablen), ncol=Variablen)

parmvekt  <- as.matrix(runif(Variablen, min=-3, max=3), ncol=1)                   # die "realen" Parameter

Mxp       <- as.vector(A %*% parmvekt)
p         <- exp(Mxp)/(1+exp(Mxp))
y         <- rbinom(Anzahl, 1, p)

DF        <- data.frame(y, A)

Formel    <- as.formula(paste0("y ~ ", paste(paste0("X", 1:Variablen), collapse=" + ")))  # Spielerei :)

start     <- Sys.time()
Modell    <- glm(Formel, data=DF, family=binomial())
Sys.time() - start

Abgleich  <- data.frame(berechnet=summary(Modell)$coefficients[1 + (1:Variablen), 1], wahr=parmvekt)
Abgleich
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 »

@Athomas Tut es als Formel auch ein schlichtes y~. ?
---
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 »

bigben hat geschrieben: Di Okt 01, 2019 12:42 pm @Athomas Tut es als Formel auch ein schlichtes y~. ?
Im vorliegenden Fall: ja!
(Wenn einem das nicht zu schlicht ist :lol: ...)
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 »

Athomas hat geschrieben: Di Okt 01, 2019 12:54 pm(Wenn einem das nicht zu schlicht ist :lol: ...)
Schon klar, Du versuchst Macht und Möglichkeiten von R prominent zur Schau zu stellen :lol:

LG,
Bernhard
---
Programmiere stets so, dass die Maxime Deines Programmierstils Grundlage allgemeiner Gesetzgebung sein könnte
Antworten