Как запустить модель линейной регрессии для каждого отраслевого года, исключая наблюдения фирмы i в R? - PullRequest
0 голосов
/ 23 апреля 2020

Вот выходная мощность моего набора данных в R ......

data1<-structure(list(Year = c(1998, 1999, 1999, 2000, 1996, 2001, 1998, 
1999, 2002, 1998, 2005, 1998, 1999, 1998, 1997, 1998, 2000), 
    `Firm name` = c("A", "A", "B", "B", "C", "C", "D", "D", "D", 
    "E", "E", "F", "F", "G", "G", "H", "H"), Industry = c("AUTO", 
    "AUTO", "AUTO", "AUTO", "AUTO", "AUTO", "AUTO", "AUTO", "AUTO", 
    "Pharma", "Pharma", "Pharma", "Pharma", "Pharma", "Pharma", 
    "Pharma", "Pharma"), X = c(1, 2, 5, 6, 7, 9, 10, 11, 12, 
    13, 15, 16, 17, 18, 19, 20, 21), Y = c(30, 31, 34, 35, 36, 
    38, 39, 40, 41, 42, 44, 45, 46, 47, 48, 49, 50), Z = c(23, 
    29, 47, 53, 59, 71, 77, 83, 89, 95, 107, 113, 119, 125, 131, 
    137, 143)), row.names = c(NA, -17L), class = c("tbl_df", 
"tbl", "data.frame"), na.action = structure(c(`1` = 1L), class = "omit"))
37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50), Z = c(23, 
29, 35, 41, 47, 53, 59, 65, 71, 77, 83, 89, 95, 101, 107, 113, 
119, 125, 131, 137, 143)), row.names = c(NA, -21L), class = c("tbl_df", 
"tbl", "data.frame"), na.action = structure(c(`1` = 1L), class = "omit"))

Здесь я пытаюсь регрессировать Y~ X+Z для каждого года в отрасли, но без учета фирмы i наблюдения. Для каждой фирмы я хочу оценить модель линейной регрессии , используя наблюдения всех отраслевых коллегиальных фирм, но исключая собственные наблюдения фирмы . Например, для фирмы A я хочу регрессировать Y ~ X + Z путем используя все наблюдения своих отраслевых аналогичных фирм (B, C & D) во времени, но исключая наблюдения фирмы A. Точно так же я хочу запустить модель для фирмы B, используя все наблюдения фирмы A, C & D (часть той же отрасли, что и B) во времени, за исключением наблюдений фирмы B. И такая же процедура для фирмы C & D. Я хочу сделать это упражнение для каждой фирмы в каждой отрасли. Пожалуйста, помогите.

Ответы [ 2 ]

1 голос
/ 23 апреля 2020

Как уже упоминалось @bonedi, вы можете использовать вложенную l oop для выполнения sh этого. Если вы хотите создать модели для отдельных отраслевых комбинаций, вам нужно будет поднастроить свои данные на Industry и Year. Вы можете l oop сверх Firm name и исключить эту фирму перед созданием модели. Результаты могут быть сохранены в списке, названном отраслевой фирмой года. Это не симпатичное решение, но оно должно приблизить вас.

lst <- list()

for (ind in unique(data1$Industry)) {
  for (year in unique(data1[data1$Industry == ind, ]$Year)) {
    for (firm in unique(data1[data1$Industry == ind & data1$Year == year, ]$`Firm name`)) {
      sub_data <- data1[data1$Industry == ind & data1$Year == year & data1$`Firm name` != firm, ]
      if (nrow(sub_data) > 0) {
        name <- paste(ind, year, firm, sep = '-')
        lst[[name]] <- lm(Y ~ X + Z, data = sub_data)
      }
    }
  }
}
0 голосов
/ 23 апреля 2020

Отображаемый код не подходит для чтения. Но из того, что вы пишете, я бы порекомендовал вложенный l oop, например:

for(y in year){
    for(comp in FirmName){
      # transform data : select only companys in this industry, but exclude comp
       lm(..)
     }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...