Pregunta

Mi conjunto de datos es bastante grande, así que solo estoy usando 10 líneas de datos como ejemplo (he resuelto la respuesta en Excel pero no puedo replicarla en R, ya que necesito ayuda con el código):

constant<-c(6.10,5.12,5.04,4.97,4.89,4.89,4.87,4.87,4.88,4.99)
years.star<-c(219.87,153.69,146.19,139.35,127.27,127.27,121.91,121.91,112.28,99.98)
years.sq.star<-c(7915.41,4610.71,4239.78,3901.93,3309.27,3309.27,3047.95,3047.95,2582.58,1999.62)
ln.salary<-c(28.43,23.12,21.59,21.44,22.71,23.33,20.29,21.76,21.48,22.92)

try<-data.frame(constant,years.star,years.sq.star,ln.salary)

Ln.salario es la variable dependiente.La respuesta que deberías obtener es:

intercept-  6.474922
beta1-      -0.15026
beta2-      0.002769

Mi problema es que en R, si uso la función lm, no sabe que mi intersección tiene los valores anteriores.solo usa 1,1,1,1,1,1,1,1,1,1 en lugar de 6.10,5.12,etc.

Entonces test<-lm(ln.salary~years.star+years.sq.star,data=try,weights=constant)

no funciona porque simplemente generará esta respuesta:

intercept-   207.1706
beta1-       -3.13214
beta2-        0.064416

En esencia, tomé datos y traté de ajustarlos según la heterocedasticidad.En el paso final, tengo mi estrella constante y mis variables x transformadas.El último paso es hacer una regresión de ln.salary en las variables constante y x para darme la respuesta que debes obtener según lo anterior.

Puedo hacerlo en Excel pero no en R y sé que no estoy entendiendo bien el código.Sé que la función lm que genera la intersección (1,1,1...) es el problema.Por favor podrías ayudar.

Saludos cordiales D

¿Fue útil?

Solución

Si desea variar las "intersecciones" para cada fila, entonces necesita usar un "desplazamiento" en lugar de un "peso":

 test<-lm(ln.salary~years.star+years.sq.star+0,data=try,offset=constant)

Call:
lm(formula = ln.salary ~ years.star + years.sq.star + 0, data = try, 
    offset = constant)

Coefficients:
   years.star  years.sq.star  
     0.236355      -0.003881  

No estoy tan impresionado con el hecho de que esto no concuerde con Excel.Se sabe que el programa de regresión lineal de ese programa es bastante inestable.Si, por el contrario, está seguro de que necesita utilizar pesos, entonces debe aclarar cuál de las tres posibles interpretaciones diferentes del término se está utilizando.(Opciones:replicación, muestreo, varianza inversa).El lm La interpretación de un "peso" es la versión de varianza inversa.(Se describe en su página de ayuda como "inversamente proporcional a la varianza), por lo que si esos términos "constantes" son variaciones, entonces quizás desee:

> (test<-lm(ln.salary~years.star+years.sq.star+0, data=try, weights=1/constant) )

Call:
lm(formula = ln.salary ~ years.star + years.sq.star + 0, data = try, 
    weights = 1/constant)

Coefficients:
   years.star  years.sq.star  
     0.309391      -0.005189  

Otros consejos

Si desea "arreglar" una intercepción a una constante particular, debe restar el valor de esa constante de la respuesta y luego ajuste un modelo de no intercepción.Por ejemplo

test <- lm( ln.salary - 6.474922 ~ years.star + years.sq.star + 0,
    data=try, weights=constant)

Aquí restamos el término de intercepción, y luego agregamos +0 a la fórmula para indicar que no se ajuste a un término de intercepción.Con ese modelo que recibo

Call:
lm(formula = ln.salary - 6.474922 ~ years.star + years.sq.star + 
    0, data = try, weights = constant)

Coefficients:
   years.star  years.sq.star  
     0.197384      -0.002842  

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top