Wenn Formeln mit Faktoren verwendet werden, benennen die angepassten Modelle die Koeffizienten XY, wobei X der Name des Faktors ist und Y eine bestimmte Ebene davon ist. Ich möchte eine Formel aus den Namen dieser Koeffizienten erstellen können.
Der Grund: Wenn ich ein Lasso an eine dünn besetzte Entwurfsmatrix anpasse (wie ich es unten tue), möchte ich ein neues Formelobjekt erstellen, das nur Terme für die Koeffizienten ungleich Null enthält.
%Vor%Davon möchte ich eine Formel haben
%Vor%Ich habe formula () und all.vars () vergeblich ausgecheckt. Auch das Schreiben einer Funktion, um dies zu analysieren, ist wegen der verschiedenen Arten von Begriffen, die auftreten können, ein wenig schmerzhaft. Zum Beispiel für x: Buchstabe, wenn x ein numerischer Wert und Buchstabe ein Faktor ist, oder I (x & gt; 5): Buchstabe als weiterer ärgerlicher Fall.
Ist mir also keine Funktion bekannt, die zwischen Formel und ihrer Zeichendarstellung und wieder zurück konvertiert?
Als ich den Code ausführte, bekam ich etwas anderes, da set.seed () nicht angegeben wurde. Anstatt den Variablennamen "letter" zu verwenden, habe ich "letter_" als praktisches Trennzeichen verwendet:
%Vor%Dann machte die Aufteilung und verpackt in eine Zeichenmatrix:
%Vor%fnewmtx [, 1] [, 2]
Buchstabe_c "c" "Buchstabe" letter_d "d" "Buchstabe" letter_e "e" "Buchstabe" letter_f "f" "letter" hat den Rest abgeschnitten
Und die Einfügefunktion (en) wurden in as.formula () umbrochen, was die Hälfte der Antwort darauf ist, wie man "zwischen Formel und ihrer Zeichendarstellung und zurück" umwandelt. Die andere Hälfte ist as.character ()
%Vor%Und die Ausgabe ist jetzt ein passendes Klassenobjekt:
%Vor%Ich finde es interessant, dass die as.formula-Umwandlung die einfachen Anführungszeichen um die Buchstaben in doppelte Anführungszeichen gesetzt hat.
Bearbeiten: Jetzt, da das Problem eine oder zwei zusätzliche Dimensionen hat, überspringe ich die Neuerstellung der Formel. Beachten Sie, dass die rownames von myfit $ beta genau die gleichen wie die Spaltennamen von X sind. Verwenden Sie stattdessen die nicht-null-rownames als Indizes, um Spalten in der X-Matrix auszuwählen:
%Vor% Christopher, nach was Sie fragen, erscheint nach einiger Überlegung und Prüfung von sparse.model.matrix
etc etwas involviert zu sein. Sie haben nicht erklärt, warum Sie nicht die vollständige Matrix für spärliche Modelle für X_test
bilden möchten, so dass es schwierig ist, einen anderen Weg als die beiden folgenden Optionen anzugeben.
Wenn Sie eine große Anzahl von Beobachtungen in X_test
haben und daher aus Rechengründen nicht die vollständige Sparse-Matrix für die Verwendung in predict()
erstellen möchten, ist es möglicherweise sinnvoller, X_test
in zwei oder mehr aufzuteilen Chunks von Samples und bilden die spärlichen Modellmatrizen für jedes einzelne und verwerfen es nach dem Gebrauch.
Andernfalls müssen Sie den Code aus dem Matrix-Paket genau studieren. Beginnen Sie mit sparse.model.matrix
und beachten Sie, dass es dann Matrix:::model.spmatrix
aufruft und Aufrufe von Matrix:::fac2Sparse
in dieser Funktion findet. Wahrscheinlich müssen Sie Code aus diesen Funktionen übernehmen, aber verwenden Sie eine modifizierte fac2Sparse
, um das zu erreichen, was Sie erreichen möchten.
Entschuldigung, ich kann dafür kein Standardskript bereitstellen, aber das ist eine wesentliche Programmieraufgabe. Wenn Sie diesen Weg gehen, schauen Sie sich die Vignette Sparse Model Matrizen im Matrix-Paket an und holen Sie sich die Paketquellen (von CRAN), um zu sehen, ob die erwähnten Funktionen im Quellcode besser dokumentiert sind sind keine Rd-Dateien für fac2Sparse
zum Beispiel). Sie können auch die Autoren von Matrix (Martin Maechler und Doug Bates) um Rat fragen, obwohl zu beachten ist, dass diese beiden Chaps in diesem Zeitraum eine besonders hohe Lehrbelastung hatten.
Viel Glück!
Tags und Links r formula sparse-matrix