Регресс матрицы против вектора столбца в R
Я пытаюсь регрессировать каждый столбец матрицы (зависимая переменная) против одного вектора столбца (независимая переменная), и сохранить коэффициенты и остатки. Вот пример данных и мой код:
gwthRatesAllCities06To08 <- matrix(1:60, nrow = 4, ncol = 15)
natGwthRates06To08 <- c(2,1,3,5)
for (i in 1 : ncol(gwthRatesAllCities06To08)) {
OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}
Однако приведенный выше код не дает мне того, что я хочу, не могли бы вы помочь мне выяснить причину? Спасибо заранее!
3 ответа
lm
может регрессировать несколько векторов Y на одной правой стороне. Просто укажите левую часть, чтобы быть матрицей, столбцы которой являются векторами Y.
y <- matrix(1:60, nrow = 4, ncol = 15)
x <- c(2,1,3,5)
fm <- lm(y ~ x)
coef(fm) # the 15 columns of coef are the 15 sets of coefficients
resid(fm) # the 15 columns of resid are the 15 sets of residuals
Я думаю, что ваш код работает хорошо, я могу получить коэффициенты и остатки:
OLSEst <- list()
for (i in 1 : ncol(gwthRatesAllCities06To08)) {
OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}
mod <- OLSEst[[15]]
> mod$coefficients
(Intercept) natGwthRates06To08
56.7714286 0.6285714
> mod$residuals
1 2 3 4
-1.02857143 0.60000000 0.34285714 0.08571429
Вам нужно сначала создать список вне цикла for. Затем добавьте в список свои результаты.
gwthRatesAllCities06To08 <- matrix(1:60, nrow = 4, ncol = 15)
natGwthRates06To08 <- c(2,1,3,5)
OLSEst <- list()
for (i in 1 : ncol(gwthRatesAllCities06To08)) {
OLSEst[[i]]<- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
}
Если вы просто хотите получить коэффициенты, попробуйте взять те части объектов регрессии, которые вам нужны. Проверьте ниже, чтобы начать.
test <- lm(formula = gwthRatesAllCities06To08[,i] ~ natGwthRates06To08)
test$coefficients