Nach meinem besten Wissen gibt es keine dedizierte effiziente Implementierung der besten Teilmenge Auswahl für Beta-Regression (in R oder anders). Es gibt jedoch einige generische Implementierungen, die annähernde Lösungen dafür bereitstellen, z. B. basierend auf genetischen Algorithmen wie dem kofnGA
Paket (auf CRAN und veröffentlicht in JSS). Siehe das Beispiel unten. (Um vorwärts Suche anstelle von Best-Subset Auswahl zu benutzen, siehe meine andere Antwort.)
Alternativ können Sie ein (verallgemeinerte) lineares Modell verwenden, das in etwa, was betareg
tut und verwenden Sie die Subgruppenauswahl für die . Zum Beispiel könnten Sie die Antwort logit-transformieren (d. H., qlogis(y)
) und dann die Auswahl der besten Untergruppe unter Verwendung einer linearen Regression über leaps
(CRAN) oder lmSubsets
(R-Forge). Oder Sie könnten einen GLM mit family = quasibinomial
verwenden und glmulti
(CRAN, JSS) verwenden. Und dann könnten Sie das Ergebnis der besten Teilmenge aus diesem ungefähren Modell verwenden und es in einer Beta-Regression verwenden. Natürlich gibt dies nicht das beste Beta-Regressionsergebnis, aber es könnte ein nützlicher Ausgangspunkt für weitere Analysen sein.
Daher zurück zum direkten genetischen Algorithmus für die Beta-Regression. Um darzustellen, wie dies mit kofnGA
wir erste Lastpakete und Beispieldaten erreicht werden:
library("betareg")
library("kofnGA")
data("FoodExpenditure", package = "betareg")
Dann bauen wir eine Liste mit den Antwortvariablen y
und einer Regressormatrix x
. Beachten Sie, dass wir den Abschnitt hier weglassen, um ihn später in das Modell zu zwingen (d. H. Der Abschnitt sollte nicht der Auswahl unterliegen).
fe_data <- list(
y = with(FoodExpenditure, food/income),
x = model.matrix(~ income + persons, data = FoodExpenditure)[, -1]
)
Zusätzlich zu den beiden Regressoren oben Wir richten nun 40 Zufallsrauschen Variablen auf den Regressormatrix
fe_data$x <- cbind(fe_data$x,
matrix(rnorm(40 * nrow(fe_data$x)), ncol = 40))
colnames(fe_data$x)[3:42] <- paste0("x", 1:40)
Nun fügen wir kofnGA
verwenden, um das beste Modell mit 2 Regressoren aus der Auswahl mögliche 42 Regressoren (plus der immer eingeschlossene Abschnitt). Als kofnGA
minimiert eine Obejctive wir verwenden die negative Log-Likelihood von betareg
zur Verfügung gestellt. Die Arbeitspferd Funktion betareg.fit
statt betareg
verwendet wird unnötige Formel zu vermeiden Parsen usw.
nll <- function(v, data) -betareg.fit(x = cbind(1, data$x[, v]),
y = data$y)$loglik
Schließlich führen wir den genetischen Algorithmus nur für 100 Generationen eine gewisse Rechenzeit in diesem kurzen Beispiel zu speichern:
set.seed(1)
ga <- kofnGA(n = 42, k = 2, OF = nll, data = fe_data, ngen = 100)
die resultierende Ausgabe ist
summary(ga)
## Genetic algorithm search, 100 generations
## Number of unique solutions in the final population: 1
##
## Objective function values:
## average minimum
## Initial population -36.56597 -41.74583
## Final population -45.33351 -45.33351
##
## Best solution (found at generation 1):
## 1 2
So wird in dieser sehr einfachen künstlichen Einrichtung in der Tat den genetischen Algorithmus pi cks die ersten 2 Regressoren (von den echten Daten) und nicht irgendwelche der irrelevanten zufälligen 40 Regressoren, die wir hinzufügten. So konnten wir gehen jetzt voran und setzen ein richtiges Beta Regressionsmodell mit den Regressoren
colnames(fe_data$x)[ga$bestsol]
## [1] "income" "persons"
usw. Beachten Sie, dass die Beta-Regression hier einfach verwendet wird, verwendet einen festen Präzisionsparameter (mit Log-Link). Wenn Sie eine variable Dispersion wünschen, müssen Sie nll
entsprechend ändern.
ist dies nicht ein bester Teilmengenalgorithmus? was wird für p groß sehr ineffizient sein? Würde das Ersetzen von lm durch betareg das Ergebnis für das Beta-Regresson liefern? nicht sicher, warum Sie lm gewählt haben, wenn es so einfach wäre, betareg zu verwenden? Hat das etwas mit dem Paket Sprünge zu tun? – dimebucker91
Ich verwende nicht die beste Teilmengenfunktion, um die besten Teilmengen zu bestimmen. Stattdessen benutze ich es nur, um alle möglichen Kombinationen für Prädiktoren auszudrücken (daher die Methoden high nvmax und exhaustive/really.big). Es ist der effektivere Weg, um alle möglichen Formeln aufzuschreiben, wenn Sie eine große Anzahl von Prädiktoren haben (macht keinen Sinn, wenn es nur 3 Prädiktoren gibt). –
Was lm betrifft, ich habe es benutzt, weil ich zu faul bin, um auf betareg zu installieren/zu lesen. Ich weiß nicht, warum es so wichtig ist, so viele verschiedene Regressions-Pakete zu haben, wenn man bereits Beta-Koeffizienten aus dem Statistik-Paket extrahieren konnte. –