Ich versuche, einen Datensatz zu simulieren, der mit meinen empirischen Daten übereinstimmt, bin mir jedoch nicht sicher, wie ich die Fehler in den Originaldaten abschätzen soll. Die empirischen Daten beinhalten Heteroskedastizität, aber ich bin nicht daran interessiert, sie weg zu transformieren, sondern ein lineares Modell mit einem Fehlerterm zu verwenden, um Simulationen der empirischen Daten zu reproduzieren.
Nehmen wir zum Beispiel an, ich habe einen empirischen Datensatz und ein Modell:
n=rep(1:100,2)
a=0
b = 1
sigma2 = n^1.3
eps = rnorm(n,mean=0,sd=sqrt(sigma2))
y=a+b*n + eps
mod <- lm(y ~ n)
Mit plot(n,y)
bekommen wir folgendes.
Wenn ich jedoch versuche, die Daten zu simulieren, simulate(mod)
wird die Heteroskedastizität entfernt und nicht vom Modell erfasst.
Ich kann ein verallgemeinertes Modell der kleinsten Quadrate verwenden
VMat <- varFixed(~n)
mod2 = gls(y ~ n, weights = VMat)
Das bietet eine bessere Modellanpassung basierend auf AIC, aber ich weiß nicht, wie ich Daten mithilfe der Ausgabe simulieren soll.
Meine Frage ist, wie ich ein Modell erstelle, mit dem ich Daten simulieren kann, die mit den ursprünglichen empirischen Daten übereinstimmen (n und y oben). Insbesondere brauche ich eine Möglichkeit, Sigma2, den Fehler, mithilfe eines Modells abzuschätzen.
quelle
Antworten:
Um Daten mit einer variierenden Fehlervarianz zu simulieren, müssen Sie den Datengenerierungsprozess für die Fehlervarianz angeben. Wie in den Kommentaren erwähnt, haben Sie dies getan, als Sie Ihre Originaldaten generiert haben. Wenn Sie echte Daten haben und dies versuchen möchten, müssen Sie nur die Funktion identifizieren, die angibt, wie die Restvarianz von Ihren Kovariaten abhängt. Die Standardmethode hierfür besteht darin, Ihr Modell anzupassen, zu überprüfen, ob es angemessen ist (abgesehen von der Heteroskedastizität), und die Residuen zu speichern. Diese Residuen werden zur Y-Variablen eines neuen Modells. Unten habe ich das für Ihren Datengenerierungsprozess getan. (Ich sehe nicht, wo Sie den zufälligen Startwert festgelegt haben, daher sind dies nicht buchstäblich dieselben Daten, sondern sollten ähnlich sein, und Sie können meinen genau reproduzieren, indem Sie meinen Startwert verwenden.)
Beachten Sie, dass
R
‚s ? Plot.lm geben Ihnen einen Plot (vgl hier ) der Quadratwurzel der absoluten Werte der Residuen, helfend mit einem Lowess fit überlagert, was genau das , was Sie brauchen. (Wenn Sie mehrere Kovariaten haben, möchten Sie dies möglicherweise für jede Kovariate separat bewerten.) Es gibt den geringsten Hinweis auf eine Kurve, aber dies sieht so aus, als ob eine gerade Linie die Daten gut anpasst. Passen wir also explizit dieses Modell an:Wir brauchen uns keine Sorgen zu machen, dass die Restvarianz auch für dieses Modell im Skalenortungsdiagramm zuzunehmen scheint - das muss im Wesentlichen geschehen. Es gibt wieder den geringsten Hinweis auf eine Kurve, sodass wir versuchen können, einen quadratischen Term anzupassen und zu sehen, ob dies hilft (aber nicht):
Wenn wir damit zufrieden sind, können wir diesen Prozess jetzt als Add-On verwenden, um Daten zu simulieren.
Beachten Sie, dass bei diesem Prozess nicht mehr garantiert wird, dass er den tatsächlichen Datengenerierungsprozess findet als bei jeder anderen statistischen Methode. Sie haben eine nichtlineare Funktion verwendet, um die Fehler-SDs zu generieren, und wir haben sie mit einer linearen Funktion approximiert. Wenn Sie den tatsächlichen Datengenerierungsprozess a priori kennen (wie in diesem Fall, weil Sie die Originaldaten simuliert haben), können Sie ihn auch verwenden. Sie können entscheiden, ob die Annäherung hier für Ihre Zwecke gut genug ist. Wir kennen jedoch normalerweise den tatsächlichen Prozess der Datengenerierung nicht und verwenden basierend auf Occams Rasiermesser die einfachste Funktion, die den Daten, die wir angesichts der verfügbaren Informationsmenge angegeben haben, angemessen entspricht. Sie können auch Splines oder schickere Ansätze ausprobieren, wenn Sie dies bevorzugen. Die bivariaten Verteilungen sehen mir ziemlich ähnlich,
quelle
Sie müssen die Heteroskedastizität modellieren. Ein Ansatz ist das R-Paket (CRAN)
dglm
, ein dispersionsverallgemeinertes lineares Modell. Dies ist eine Erweiterung von glm's, die zusätzlich zu den üblichenglm
glm ein zweites glm zur Dispersion aus den Resten des ersten glm passt. Ich habe keine Erfahrung mit solchen Modellen, aber sie scheinen vielversprechend ... Hier ist ein Code:Das simulierte Diagramm ist unten dargestellt:
Das Diagramm sieht so aus, als hätte die Simulation die geschätzte Varianz verwendet, aber ich bin mir nicht sicher, da die Funktion simulate () keine Methoden für dglms ...
(Eine andere Möglichkeit, dies zu untersuchen, ist die Verwendung des
R
Paketsgamlss
, das einen anderen Ansatz zur Modellierung der Varianz als Funktion von Kovariablen verwendet.)quelle