4 votos

Generar dos variables con residuos heterocedásticos y una pendiente de regresión lineal de 1

Tengo un vector A, que comprende valores de ingresos predefinidos de 1000 empresas. Ahora quiero generar otro vector B, que comprende los ingresos de las empresas del año anterior. La intención es modelar B tomando A como el valor esperado y una desviación estándar que aumenta con el tamaño de A: Es decir, las empresas más grandes tienen diferencias absolutas más grandes entre A y B que las empresas más pequeñas. El propósito es lograr una relación para que una regresión lineal del predictor B sobre la variable dependiente A produzca una línea con una pendiente cercana a 1. Por lo tanto, la relación debería lucir como sigue:

lm(A~B)$coefficients  # debería producir  
                      #(Intercepto)          B 
                      #     0               1
plot(B,A)
abline(lm(A~B)$coefficients, col = "red")`  

Introducir descripción de la imagen aquí

Lo intenté de la siguiente manera:

set.seed(123)
A <- 1:1000
B <- rnorm(n=1000, mean = A, sd=0.4*A)

Sin embargo, para lm(A~B):

Coeficientes:
(Intercepto)          A
197.5979             0.6013

¿Tienes alguna idea de cómo puedo corregir la generación del vector B a partir de A, para que una regresión lineal de B sobre A produzca una pendiente de 1?

0 votos

¿Debe ser exactamente uno o es suficientemente cerca (como 1.0076)?

0 votos

Aproximadamente como 1.0076 es definitivamente suficiente. Sin embargo, es importante que B sea el predictor y A la variable dependiente y que B tenga que ser generado a partir de A antes.

0 votos

¿Quieres incluir la posibilidad de ingresos negativos en tu simulación? Ten en cuenta que ahora los tienes. Aunque no trabajo en economía o negocios, no consideraría que los ingresos se distribuyan normalmente, sino probablemente algo sesgado y con colas gordas.

3voto

j.k Puntos 150

Para obtener una estimación de $b$ igual a uno, debes cambiar la desviación estándar. Usé tu código y simplemente lo cambié. Mira esto:

set.seed(123)
A <- 1:1000
B <- rnorm(n=1000, mean = A, sd=1/A)

lm(A~B)

    Call:
lm(formula = A ~ B)

Coefficients:
(Intercept)            B  
 -0.0003096    1.0000004

lm(B~A)

Call:
lm(formula = B ~ A)

Coefficients:
(Intercept)            A  
  0.0003144    0.9999996

Supongo que esto es lo que quieres. Ten en cuenta que obtendrás resultados similares si usas una desviación estándar $sd = A^k$, para cada $k$ diferente de cero, por supuesto.

0 votos

¡Muchas gracias por tu respuesta y ajuste! Sin embargo, el propósito es que la desviación estándar de B aumente con A como se muestra en la ilustración anterior. Con tu sugerencia de sd=1/A, sucede lo contrario. Fue error mío, probablemente no hice suficientemente clara esa intención y lo editaré en la pregunta. También intenté sd=A^k, con (entre otros) k=0.8, lo cual causó el mismo problema de lm(A~B) resultando en una pendiente muy por debajo de 1.

0voto

Sean Hanley Puntos 2428

Ya casi llegas. Lo que necesitas recordar es que la regresión minimiza las distancias verticales de los datos a la línea. Es decir, pensamos en los errores como estando en la respuesta (ver mi respuesta aquí: ¿Cuál es la diferencia entre la regresión lineal en y con x y x con y?). Solo necesitas cambiar qué variable es tu respuesta aquí. Considera:

set.seed(123)
A <- 1:1000
B <- rnorm(n=1000, mean = A, sd=0.4*A)
summary(lm(A~B))$coefficients  # esta es tu regresión
#                Estimate Std. Error  t value      Pr(>|t|)
# (Intercept) 197.5978552 9.62892402 20.52128  2.361529e-78
# B             0.6012796 0.01535132 39.16794 5.465950e-204
summary(lm(B~A))$coefficients
#               Estimate  Std. Error     t value      Pr(>|t|)
# (Intercept) -0.5542773 14.86392934 -0.03729009  9.702612e-01
# A            1.0076260  0.02572579 39.16793538 5.465950e-204

windows()
  # plot(B,A)  #this is your plot
  plot(A,B)    # aquí cambié X e Y
  abline(0,1, col="red")
  abline(coef(lm(B~A)), col="blue")

enter image description here

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X