Циклические подмножества в plm

Я пытаюсь запрограммировать что-то довольно простое (я думаю) в R, но я не могу понять, что это правильно. У меня есть набор данных из 50 стран (от 1 до 50) за 15 лет каждая и около 20 переменных на страну. Пока я тестирую только одну переменную (OS) на моей зависимой переменной (SMD). Я хотел бы сделать это с циклом по странам, чтобы получить общий результат для каждой страны вместо общего.

Я подумал, что было бы целесообразно сначала создать подмножество (чтобы можно было сначала посмотреть на страну 1, после чего мой цикл должен увеличить число для страны и тестовой страны 2). Я считаю, что мой регресс в нижней части страницы должен дать мне вывод для страны 1 вместо общего балла за весь набор данных. Однако я продолжаю получать эти ошибки:

> pdata <- plm.data(newdata, index=c("Country","Date"))
  series    are constants and have been removed
> pooling <- plm(Y ~ X, data=pdata, model= "pooling") 
  series Country, xRegion are constants and have been removed
  Error in model.matrix.pFormula(formula, data, rhs = 1, model = model,  : 
  NA in the individual index variable
> summary(pooling)
  Error in summary(pooling) : object 'pooling' not found

Возможно, я смотрю на все это неправильно, но я считаю, что без того, чтобы это сработало, нет смысла идти дальше с программированием самого цикла. Любые советы по решению моих ошибок, или другие способы программирования цикла действительно приветствуются.

Мой код:

rm(list = ls())
mydata <- read.table(file = file.choose(), header = TRUE, dec = ",")
names(mydata)
attach(mydata)

Y <- cbind(SMD)
X <- cbind(OS)

newdata <- subset(mydata, Country %in% c(1))

newdata

pdata <- plm.data(newdata, index=c("Country","Date"))
pooling <- plm(Y ~ X, data=pdata, model= "pooling") 
summary(pooling)

Редактировать: образец данных первых двух стран, который вызывает ту же ошибку

структура dput(mydata) (список (Region = структура (c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), .Label = c("NAF", "ЖЕ"), класс = "фактор"), Страна = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), Дата = c(1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1995L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L), OS = структура (c(19L, 25L, 27L, 15L, 22л, 20л, 23л, 9л, 7л, 5л, 2л, 1л, 4л, 3л, 6л, 10л, 11л, 13л, 11л, 8л, 26л, 25л, 31л, 29л, 28л, 21л, 30л, 24л, 24л, 16L, 11L, 14L, 12L, 17L, 18L, 29L, 32L, 32L, 33L, 34L), .Label = c("51,5", "52,2", "55,6", "56,4", "56,7", "57,7"). "," 57,8 "," 58. 3 "," 59 "," 59.2 "," 59.6 "," 59.9 "," 60.2 "," 60.4 "," 61.1 "," 61.2 "," 62.2 "," 62.3 "," 62.8 "," 63.2 ", "63,3", "63,8", "63,9", "64,2", "64,3", "64,5", "64,7", "65,3", "65,5", "65,6", "66,4", "68", " 69,6 "," 70,7 "), класс =" фактор "), SMD = структура (c(7L, 12L, 20L, 21L, 17L, 15L, 13L, 10L, 14L, 22L, 23L, 33L, 1L, 32L, 29L, 34L, 28L, 25L, NA, NA, 9L, 6L, 8L, 4L, 2L, 35L, 3L, 36L, 5L, 11L, 16L, 18L, 24L, 19L, 31L, 27L, 30L, NA, NA), .Label = c("100.3565662", "13.44788845", "13.45858747", "13.56815534", "15.05892471", "17.63789658", "18.04088718", "18.3101351", "19.34226196", "21.245" 21444 "212553088", "23.75898948", "24.08770926", "26.39817342", "29.44079001", "31.40605191", "34.46667996", "34.52913657", "35.66070947", "36.4419931", "39.16875621", "44.0126.749", "44.01261349", "44.01261349", 49.13062679 "," 54.83730247 "," 56.87886311 "," 59.80971583 "," 60.5658962 "," 69.20148901 "," 70.91362874 "," 72.64845214 "," 73.97139238 "," 75.20140919 "," 76.1837930 ", 936.1867", 931.368 ", 930, 837, 868, 868, 837, 837, 868, 837, 868, 837, 830, 837, 868, 868, 837, 830, 837, 830, 930, 837, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 830, 870), класс = "фактор")), .Names = c("Регион", "Страна", "Дата", "OS", "SMD"), class = "data.frame", row.names = c(NA, -40L))

1 ответ

Вы уверены, что вам нужно использовать plm?? Это дает список резюме по странам.

# convert factors to numeric
mydata$SMD <- as.numeric(mydata$SMD)
mydata$OS  <- as.numeric(mydata$OS)

# Using lapply(...)
smry <- lapply(unique(mydata$Country),
               function(cntry)
                 summary(lm(SMD~OS,data=mydata[mydata$Country==cntry,])))
# Same thing, using for loop
smry <- list()
for (cntry in unique(mydata$Country)) {
  smry <- list(smry, 
               summary(lm(SMD~OS,data=mydata[mydata$Country==cntry,])))
}

В вашем наборе данных, SMD а также OS это факторы, которые нужно сначала преобразовать в числовые.

Другие вопросы по тегам