Estoy tratando de simular un conjunto de datos que coincida con los datos empíricos que tengo, pero no estoy seguro de cómo estimar los errores en los datos originales. Los datos empíricos incluyen la heterocedasticidad, pero no estoy interesado en transformarlos, sino en utilizar un modelo lineal con un término de error para reproducir simulaciones de los datos empíricos.
Por ejemplo, supongamos que tengo un conjunto de datos empírico y un modelo:
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)
usando plot(n,y)
obtenemos lo siguiente.
Sin embargo, si trato de simular los datos simulate(mod)
, la heterocedasticidad se elimina y el modelo no la captura.
Puedo usar un modelo generalizado de mínimos cuadrados
VMat <- varFixed(~n)
mod2 = gls(y ~ n, weights = VMat)
eso proporciona un mejor ajuste del modelo basado en AIC, pero no sé cómo simular datos usando la salida.
Mi pregunta es, ¿cómo creo un modelo que me permita simular datos para que coincidan con los datos empíricos originales (ny e anteriores). Específicamente, ¿necesito una forma de estimar sigma2, el error, usando cualquiera de los dos usando un modelo?
fuente
Respuestas:
Para simular datos con una variación de error variable, debe especificar el proceso de generación de datos para la variación de error. Como se ha señalado en los comentarios, lo hizo cuando generó sus datos originales. Si tiene datos reales y desea probar esto, solo necesita identificar la función que especifica cómo la varianza residual depende de sus covariables. La forma estándar de hacerlo es ajustar su modelo, verificar que sea razonable (aparte de la heterocedasticidad) y guardar los residuos. Esos residuos se convierten en la variable Y de un nuevo modelo. A continuación lo he hecho para su proceso de generación de datos. (No veo dónde establece la semilla aleatoria, por lo que estos no serán literalmente los mismos datos, pero deberían ser similares, y puede reproducir los míos exactamente usando mi semilla).
Tenga en cuenta que
R
s ? Plot.lm le dará un gráfico (cf., aquí ) de la raíz cuadrada de los valores absolutos de los residuos, útilmente superpuestos con un ajuste bajo, que es justo lo que necesita. (Si tiene múltiples covariables, es posible que desee evaluar esto en relación con cada covariable por separado). Existe el más mínimo indicio de una curva, pero parece que una línea recta hace un buen trabajo al ajustar los datos. Entonces, ajustemos explícitamente ese modelo:No debemos preocuparnos de que la varianza residual parece estar aumentando también en la gráfica de ubicación de escala para este modelo, eso esencialmente tiene que suceder. Hay una vez más el menor indicio de una curva, por lo que podemos intentar ajustar un término al cuadrado y ver si eso ayuda (pero no es así):
Si estamos satisfechos con esto, ahora podemos usar este proceso como un complemento para simular datos.
Tenga en cuenta que este proceso no está más garantizado para encontrar el verdadero proceso de generación de datos que cualquier otro método estadístico. Usó una función no lineal para generar las SD de error, y la aproximamos con una función lineal. Si realmente conoce el verdadero proceso de generación de datos a priori (como en este caso, porque simuló los datos originales), también podría usarlo. Puede decidir si la aproximación aquí es lo suficientemente buena para sus propósitos. Sin embargo, generalmente no conocemos el verdadero proceso de generación de datos y, según la maquinilla de afeitar de Occam, utilizamos la función más simple que se ajusta adecuadamente a los datos que hemos proporcionado la cantidad de información disponible. También puede probar splines o enfoques más elegantes si lo prefiere. Las distribuciones bivariadas se parecen razonablemente a mí,
fuente
Necesitas modelar la heterocedasticidad. Un enfoque es a través del paquete R (CRAN)
dglm
, modelo lineal generalizado de dispersión. Esta es una extensión de glm que, además de la habitualglm
, se ajusta a una segunda glm para dispersarse de los residuos de la primera glm. No tengo experiencia con tales modelos, pero parecen prometedores ... Aquí hay un código:El diagrama simulado se muestra a continuación:
El gráfico parece que la simulación ha utilizado la varianza estimada, pero no estoy seguro, ya que la función simulate () no tiene métodos para dglm's ...
(Otra posibilidad a considerar es usar el
R
paquetegamlss
, que usa otro enfoque para modelar la varianza en función de las covariables).fuente