Seite 2 von 2

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

Verfasst: Mo Sep 30, 2019 10:19 pm
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

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

Verfasst: Mo Sep 30, 2019 11:53 pm
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.

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

Verfasst: Di Okt 01, 2019 10:44 am
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

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

Verfasst: Di Okt 01, 2019 12:42 pm
von bigben
@Athomas Tut es als Formel auch ein schlichtes y~. ?

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

Verfasst: Di Okt 01, 2019 12:54 pm
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: ...)

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

Verfasst: Di Okt 01, 2019 4:30 pm
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