Domanda

Il mio set di dati è abbastanza grande, quindi sto solo usando 10 righe di dati come esempio (ho elaborato la risposta in Excel ma non riesco a replicare in R-come ho bisogno di aiuto con il codice): < / P >.

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.salany è la variabile dipendente. La risposta che dovresti ottenere è:

intercept-  6.474922
beta1-      -0.15026
beta2-      0.002769
.

Il mio problema è che in R, se utilizzo la funzione LM, non sa che la mia intercettazione ha i valori sopra. Utilizza solo 1,1,1,1,1,1,1,1,1,1,1 invece di 6,10,5.12, ecc.

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

non funziona perché genera questa risposta:

intercept-   207.1706
beta1-       -3.13214
beta2-        0.064416
.

In sostanza, ho preso i dati e ho cercato di adattarsi per l'eteroscidateità. Nel passo finale, ho la mia stella costante e le mie variabili X trasformtate. L'ultimo passo è di regredire ln.salary sulle variabili costanti e x per darmi la risposta che dovresti ottenere come sopra.

Posso farlo in Excel ma non in r e so che non sto ottenendo il codice giusto. Conosco la funzione LM che genera intercetta (1,1,1 ...) è il problema. Per favore, ti aiuterebbe.

Cordiali saluti D

È stato utile?

Soluzione

Se si desidera variare "intercettazioni" per ogni riga, è necessario utilizzare un 'offset' piuttosto che 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  
.

Non sono così colpito dal fatto che questo non è d'accordo con Excel.Il programma di regressione lineare del programma è noto per essere piuttosto più pallido.Se d'altra parte sei sicuro di essere necessario utilizzare pesi, è necessario chiarire quale delle tre diverse interpretazioni possibili del termine viene utilizzata.(Scelte: replica, campionamento, varianza inversa).L'interpretazione lm di un "peso" è la versione inverso della varianza.(È descritto nella sua pagina di aiuto come "inversamente proporzionale alla varianza), quindi se quei" costanti "-Terms sono varianti, allora forse vuoi:

> (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  
.

Altri suggerimenti

Se si desidera "risolvere" un'intercettazione a una particolare costante, è necessario sottrarre il valore di quella costante dalla risposta, quindi montare un modello di non intercettazione.Ad esempio

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

Qui sottraiamo il termine di intercettazione, e quindi aggiungiamo +0 alla formula per indicare di non adattarsi a un termine di intercettazione.Con quel modello ottengo

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  
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top