Frage:
Lineares Modell mit Einschränkungen
Vytautas
2010-09-28 22:03:17 UTC
view on stackexchange narkive permalink

Ich bin ziemlich neu in R und habe ein folgendes Problem:

Ich habe ein einfaches lineares 2-Faktor-Modell:

  # factor1 hat 8 kategoriale Werte , Faktor2 hat 6 KategorienRate ~ Faktor1 + Faktor2 Modell1 <-lm (Rate ~ Faktor1 + Faktor2, Daten = myData)  

Faktor 2.

Keines der Handbücher gibt einen Hinweis darauf, wie dies zu tun ist.

Ich habe hier einen Link zu einem ähnlichen Problem gefunden, aber es ist anders und ich konnte nicht herausfinden, wie ich es ändern kann. ..

Bitte ** nicht gleichzeitig ** hier und auf SO posten.
Sicherlich :)
Vier antworten:
#1
+20
shabbychef
2010-09-28 22:48:38 UTC
view on stackexchange narkive permalink

Hier gibt es einen Trick. Angenommen, Sie versuchen der Einfachheit halber, ein Modell der Form $$ y = b_1 x_1 + b_2 x_2 + b_3 x_3, $$ vorbehaltlich $ b_1 + b_2 + b_3 = 0 $ zu erstellen. Drücken Sie $ b_3 $ einfach erneut als $ b_3 = - b_1 - b_2 $ aus, dh Sie versuchen, ein Modell der Form $$ y = b_1 x_1 + b_2 x_2 - (b_1 + b_2) x_3 = b_1 ( x_1 - x_3) + b_2 (x_2 - x_3). $$ Erstellen Sie also neue Variablen $ \ tilde {x} _1 = x_1 - x_3, $ und $ \ tilde {x} _2 = x_2 - x_3 $ und führen Sie Ihre Regression mit aus diese transformierten Variablen als unabhängige Variablen.

Sie sollten diesen Trick unabhängig auf die Kategorien factor1 und factor2 anwenden können. (Ich habe angenommen, dass die Daten als 0/1-Indikatoren für die Mitgliedschaft in den einzelnen Kategorien angegeben sind.)

Huh, Faktoren werden mit dem Befehl `factor` gut behandelt, sodass Sie sich nicht auf die Dummy-Codierung verlassen müssen (andernfalls ist sie für mein Spielzeugbeispiel über` model.matrix (lm (x ~ a * b)) `zugänglich).
@chl danke. Ich kenne sehr wenig R, vermutete aber, dass dieser einfache algebraische Trick auf jeden Fall angewendet werden könnte oder zumindest veranschaulichen würde, was "unter der Haube" vor sich geht.
Ja definitiv! Das war nur eine Präzision. (und du hast meine +1)
#2
+8
ars
2010-09-28 22:47:41 UTC
view on stackexchange narkive permalink

Sie können dies mit Kontrasten tun:

  -Optionen (contrasts = c ('contr.sum', 'contr.sum'))  

Weitere Informationen finden Sie unter ? Contr.sum .

UPDATE: Ein wenig googeln zeigt eine Seite, die möglicherweise etwas klarer ist:

Vielen Dank! Es hat funktioniert, Frage: Es hat nicht die Bedingung erzwungen, dass Koeffizienten sich zu 0 summieren, sondern die Summen für beide Faktoren minimiert. Gibt es eine Möglichkeit, die == 0-Bedingung zu erzwingen, oder wird dies einfach nicht getan, da dies den Fehler beeinflussen würde?
@Vytautas: Ich denke, Sie vergessen den Referenzwert für Ihren Faktor, der nicht angezeigt wird (da dies die Basis für die anderen ist).
@Vytautas oder werfen Sie einen Blick auf * Interpretieren von Modellmatrixspalten bei Verwendung von contr.sum *, http://j.mp/9pNFQe.
#3
+2
tflutre
2011-08-10 01:57:50 UTC
view on stackexchange narkive permalink

Am einfachsten ist es, die entsprechende integrierte Funktion zu verwenden:

  myContrasts <- list (factor1 = contr.sum (Länge (Ebenen (Faktor1))) ), Faktor2 = contr.sum (Länge (Ebenen (Faktor2)))) Modell1 <-lm (Rate ~ Faktor1 + Faktor2, Daten = myData, Kontraste = myContrasts)  
#4
+1
Datageek
2014-07-29 19:00:40 UTC
view on stackexchange narkive permalink

Es gibt Pakete dafür.

Ein Beispiel ist glmc - Verallgemeinerte lineare Modelle, die Einschränkungen unterliegen.

Siehe Dokumentation hier: http : //cran.r-project.org/web/packages/glmc/glmc.pdf

Eine gute Übersicht über Optimierungstechniken unter Verwendung von Einschränkungen finden Sie hier: http://zoonek.free.fr/blosxom/R/2012-06-01_Optimization.html

Beispielcode (aus der glmc-Dokumentation):

  Bibliothek (glmc) # Geben Sie die Daten an.n <-Bindung (c (5903,230), c (5157,350)) mat <-Matrix (0, nrow = Summe (n), ncol = 2) mat <- rbindung (Matrix (1, nrow = n [1,1], ncol = 1)% *% c (0,0), Matrix (1, nrow = n [1,2], ncol = 1)% *% c (0,1), Matrix (1, nrow = n [2,1], ncol = 1)% *% c (1,0), Matrix (1, nrow = n [2,2], ncol = 1) % *% c (1,1)) # Angabe der Populationsbeschränkungen.gfr <- .06179 * Matrix (1, nrow = nrow (mat), ncol = 1) g <- Matrix (1, nrow = nrow (mat) , ncol = 1) amat <-Matrix (mat [, 2] * g-gfr, ncol = 1) hrh <-data.frame (Geburt = mat [, 2], Kind = mat [, 1], Einschränkungen = amat ) gfit <-glmc (Geburt ~ Kind, Daten = Stunde, Familie = "Binomial", emplik.method = "Owen", Kontrolle = glmc.control (maxit.glm = 10, maxit.weights = 200, itertrace.weights = TRUE, gradtol.weights = 10 ^ (- 6))) summary.glmc (gfit)  


Diese Fragen und Antworten wurden automatisch aus der englischen Sprache übersetzt.Der ursprüngliche Inhalt ist auf stackexchange verfügbar. Wir danken ihm für die cc by-sa 2.0-Lizenz, unter der er vertrieben wird.
Loading...