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%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.
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.
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:
sd.value
betrifft. 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?
Tags und Links r