Многие индивидуальные зависимые переменные, код для одной линейной регрессии - PullRequest
1 голос
/ 31 мая 2019

У меня есть два набора данных «медведь» и «лягушка», и я пытаюсь написать функцию, которая бы брала столбцы один за другим из «медведя» как зависимую переменную в линейной регрессии с одними и теми же регрессорами во всех случаях, напечатайте имястолбца в каждом случае и резюме линейной регрессии с коэффициентами, стандартными ошибками, t-значением, R в квадрате и остаточными стандартными ошибками. Я хочу получить 25 отдельных выходных данных

Я попробовал следующий код

  print(lm(bear[,i]~frog$MK_RF+frog$SMB+frog$HML))
  print(colnames(bear[,i])) 
  summary (lm(bear[,i]~frog$Mkt.RF+frog$SMB+frog$HML))}

Я написал эту функцию, но вместо имени столбца я получаю NULL, а в сводке показаны только коэффициенты, а не сообщение об ошибке.Для воспроизводимых примеров:

# dput(head(frog, 10))
frog <- structure(list(date = c(192607L, 192608L, 192609L, 192610L, 192611L, 
192612L, 192701L, 192702L, 192703L, 192704L), Mkt.RF = c(2.96, 
2.64, 0.36, -3.24, 2.53, 2.62, -0.06, 4.18, 0.13, 0.46), SMB = c(-2.3, 
-1.4, -1.32, 0.04, -0.2, -0.04, -0.56, -0.1, -1.6, 0.43), HML = c(-2.87, 
4.19, 0.01, 0.51, -0.35, -0.02, 4.83, 3.17, -2.67, 0.6), RF = c(0.22, 
0.25, 0.23, 0.32, 0.31, 0.28, 0.25, 0.26, 0.3, 0.25)), row.names = c(NA, 
10L), class = "data.frame")

и для набора данных медведя

# dput(head(bear[, 1:3], 10)) 
bear <- structure(list(date = c(192607L, 192608L, 192609L, 192610L, 192611L, 
192612L, 192701L, 192702L, 192703L, 192704L), SMALL.LoBM = c(3.5582, 
-2.4574, -6.4413, -8.9441, 3.1644, 13.6658, 0.1974, 2.2284, 6.0998, 
5.5863), ME1.BM2 = c(-0.6319, -8.9775, -0.5289, -4.0732, 6.3376, 
-2.2572, -8.5499, -0.5649, -2.0464, 7.5611)), row.names = c(NA, 
10L), class = "data.frame")

Ответы [ 2 ]

1 голос
/ 31 мая 2019

Произошла ошибка, потому что вы использовали неправильное имя для одной из переменных (нет frog$MK_RF).Правильный вызов будет

lm(as.matrix(bear) ~ frog$Mkt.RF+frog$SMB+frog$HML)

или

mmod <- lm(as.matrix(bear) ~ Mkt.RF + SMB + HML, data=frog)
summary(mmod)

Это дает точно такие же коэффициенты, стандартные ошибки, t-значения и т. Д., Как если бы вы зациклились на столбцах в bear индивидуально.Однако выполнение этого способа имеет несколько преимуществ.

Попробуйте, например:

anova(mmod)
coef(mmod)
residuals(mmod)

Очень удобно.

1 голос
/ 31 мая 2019

Я настоятельно рекомендую объединить ваши фреймы данных: полагаться на согласованность порядка строк опасно.Единственная причина этого не делать, если ваши наборы данных огромны, и вы не можете позволить себе дополнительное потребление памяти.

bear_vars <- names(bear)[-1]
frog_vars <- names(frog)[-1]
bf <- merge(bear, frog, by = "date")

Цикл Now, используя reformulate() для построения формулы линейной модели со значениями в frog_vars в качестве предикторных (независимых) переменных и каждое значение в bear_vars в качестве ответной (зависимой) переменной:

for (b in bear_vars) {
    m <- lm(reformulate(frog_vars, response=b), data=bf)
    cat(b,"\n")
    print(m)
    print(summary(m))
}

Вы можете использовать методы tidyverse, если хотите, но это должно работать ОК.

...