Does R have a function for weighted least squares? Specifically, I am looking for something that computes intercept and slope.
Data sets
The dependent variable is dataset 3 and dataset 1 and 2 are the independent variables.
Yes, of course, there is a weights=
option to lm()
, the basic linear model fitting function. Quick example:
R> df <- data.frame(x=1:10)
R> lm(x ~ 1, data=df) ## i.e. the same as mean(df$x)
Call:
lm(formula = x ~ 1, data = df)
Coefficients:
(Intercept)
5.5
R> lm(x ~ 1, data=df, weights=seq(0.1, 1.0, by=0.1))
Call:
lm(formula = x ~ 1, data = df, weights = seq(0.1, 1, by = 0.1))
Coefficients:
(Intercept)
7
R>
so by weighing later observations more heavily the mean of the sequence 1 to 10 moves from 5.5 to 7.
First, create your datasets. I'm putting them into a single data.frame but this is not strictly necessary.
dat <- data.frame(x1 = c(1,3,5,7,9,11,14,17,19,25, 29)
, x2 = c(17, 31, 19, 27, 31, 62, 58, 35, 29, 21, 18)
, y = c(102153, 104123, 96564, 125565, 132255, 115454
, 114555, 132255, 129564, 126455, 124578)
)
Second, estimate the model:
> lm(y ~ x1 + x2, data = dat)
Call:
lm(formula = y ~ x1 + x2, data = dat)
Coefficients:
(Intercept) x1 x2
104246.37 906.91 85.76
Third, add your weights as necessary following @Dirk's suggestions.
Fourth and most importantly - read through a tutorial or two on regression in R. Google turns this up as a top hit: http://www.jeremymiles.co.uk/regressionbook/extras/appendix2/R/
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With