Wie kann ich bei der Simulation multivariater Daten für die Regression das R-Quadrat setzen (Beispielcode enthalten)?

8

Ich versuche, einen Datensatz mit drei Variablen zu simulieren, damit ich lineare Regressionsmodelle darauf ausführen kann. 'X1' und 'X2' wären kontinuierliche unabhängige Variablen (Mittelwert = 0, sd = 1) und 'Y' wäre die kontinuierliche abhängige Variable.

Die Variablen werden ein Regressionsmodell sein, das Koeffizienten wie folgt erzeugt: Y = 5 + 3 (X1) - 2 (X2)

Ich möchte diesen Datensatz so simulieren, dass das resultierende Regressionsmodell einen R-Quadrat-Wert von 0,2 hat. Wie kann ich den Wert von 'sd.value' bestimmen, so dass das Regressionsmodell dieses R-Quadrat hat?

%Vor%     
Slyron 30.09.2013, 14:36
quelle

4 Antworten

6

Sehen Sie sich diesen Code an, er sollte nah genug an dem sein, was Sie wollen:

%Vor%

Im Grunde geht Ihre Frage darauf hinaus, den Ausdruck für var.epsilon herauszufinden. Da wir y = b1 + b2 * x1 + b3 * x2 + epsilon haben und Xs und Epsilon alle unabhängig sind, haben wir var [y] = b2 ^ 2 * var [x1] + b3 ^ 2 * var [x2] + var [eps], wobei var [Xs] = 1 nach Annahme ist. Sie können dann nach var [eps] als Funktion von R-Quadrat auflösen.

    
Adrian 30.09.2013, 15:01
quelle
2

Also ist die Formel für R ^ 2 1-var (residual) / var (gesamt)

In diesem Fall wird die Varianz von Y 3^2+2^2+sd.value^2 sein, da wir drei unabhängige Zufallsvariablen hinzufügen. Und asymptotisch wird die Restvarianz einfach sd.value^2 sein.

Sie können also rsquared explizit mit dieser Funktion berechnen:

%Vor%

Mit ein wenig Algebra können Sie die Umkehrung dieser Funktion berechnen:

%Vor%

Das Einstellen von sd.value<-rsqi(rsquared) sollte Ihnen also geben, was Sie wollen.

Wir können das wie folgt testen:

%Vor%

Es scheint also korrekt zu sein.

    
mrip 30.09.2013 15:03
quelle
2

So würde ich es machen ( blind iterative algorithm , vorausgesetzt, kein Wissen, wenn Sie rein interessiert sind an "wie man das simuliert"):

%Vor%

Ein paar Dinge zu beachten:

  • Ich lasse X1 und X2 variieren, da dies das gesuchte sd.value betrifft.
  • Die Toleranz gibt an, wie genau diese Schätzung sein soll. Geht es dir gut mit einem r-Quadrat von ~ 0.19 oder ~ 0.21? Haben Sie die Toleranz 0,01.
  • Beachten Sie, dass eine zu genaue Toleranz möglicherweise nicht zu einem Ergebnis führt.
  • Der Wert von 1 ist ein ziemlich schlechter Anfangswert, was diesen iterativen Algorithmus ziemlich langsam macht.

Der resultierende Vektor für 10 Ergebnisse lautet:

[1] 5.64 5.35 5.46 5.42 5.79 5.39 5.64 5.62 4.70 5.55 ,

Das dauert ungefähr 13 Sekunden auf meinem Rechner.

Mein nächster Schritt wäre, von 4.5 zu beginnen, statt 0.01 0,001 zur Iteration hinzuzufügen und vielleicht die Toleranz zu verringern. Viel Glück!

Alles klar, einige zusammenfassende Statistiken für nsim = 100, die 150 Sekunden benötigen, wobei die Stufen um 0,001 und die Toleranz immer noch bei 0,01 liegen:

%Vor%

Warum bist du daran interessiert?

    
PascalVKooten 30.09.2013 15:30
quelle
-1

Hier ist ein weiterer Code zum Erzeugen einer multiplen linearen Regression mit Fehlern, die der Normalverteilung folgen: OPS sorry dieser Code produziert nur mehrere Regressionen

%Vor%
    
TPArrow 26.09.2014 11:59
quelle

Tags und Links