Frage

Mein Datensatz ist ziemlich groß, daher verwende ich nur 10 Datenzeilen als Beispiel (ich habe die Antwort in Excel ausgearbeitet, kann sie aber nicht in R replizieren, da ich Hilfe beim Code benötige):

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.salary ist die abhängige Variable.Die Antwort, die Sie erhalten sollten, lautet:

intercept-  6.474922
beta1-      -0.15026
beta2-      0.002769

Mein Problem ist, dass in R, wenn ich die lm-Funktion verwende, nicht weiß, dass mein Achsenabschnitt die oben genannten Werte hat.es verwendet nur 1,1,1,1,1,1,1,1,1,1 anstelle von 6.10,5.12 usw

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

funktioniert nicht, da nur diese Antwort generiert wird:

intercept-   207.1706
beta1-       -3.13214
beta2-        0.064416

Im Wesentlichen habe ich Daten genommen und versucht, die Heteroskedastizität auszugleichen.Im letzten Schritt habe ich meinen konstanten Stern und meine transformierten x-Variablen.Der letzte Schritt besteht darin, ln.salary anhand der Konstanten und x-Variablen zu regressieren, um die Antwort zu erhalten, die Sie wie oben erhalten sollten.

Ich kann es in Excel machen, aber nicht in R und ich weiß, dass ich den Code nicht richtig hinbekomme.Ich weiß, dass die lm-Funktion, die intercept (1,1,1...) generiert, das Problem ist.Bitte helfen Sie mir.

Freundliche Grüße d

War es hilfreich?

Lösung

Wenn Sie unterschiedliche „Achsenabschnitte“ für jede Zeile wünschen, müssen Sie einen „Offset“ anstelle einer „Gewichtung“ verwenden:

 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  

Ich bin nicht so beeindruckt von der Tatsache, dass dies nicht mit Excel übereinstimmt.Es ist bekannt, dass das lineare Regressionsprogramm dieses Programms ziemlich unzuverlässig ist.Wenn Sie hingegen sicher sind, dass Sie Gewichtungen verwenden müssen, sollten Sie klären, welche der drei verschiedenen Interpretationsmöglichkeiten des Begriffs verwendet wird.(Auswahlmöglichkeiten:Replikation, Stichprobenziehung, inverse Varianz).Der lm Die Interpretation eines „Gewichts“ ist die Version der inversen Varianz.(Auf der Hilfeseite wird es als „umgekehrt proportional zur Varianz“ beschrieben. Wenn es sich bei diesen „konstanten“ Termen also um Varianzen handelt, möchten Sie vielleicht Folgendes:

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

Andere Tipps

Wenn Sie einen Schnittpunkt bei einer bestimmten Konstante „fixieren“ möchten, sollten Sie den Wert dieser Konstante von der Antwort subtrahieren und dann ein Modell ohne Schnittpunkt anpassen.Zum Beispiel

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

Hier subtrahieren wir den Intercept-Term und addieren dann +0 zur Formel hinzufügen, um anzugeben, dass ein Intercept-Term nicht passt.Mit diesem Modell bekomme ich

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  
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top