【问题标题】:Looping subsets in plm在 plm 中循环子集
【发布时间】:2014-03-28 08:15:14
【问题描述】:

我正在尝试在 R 中编写一些非常简单的东西(我认为),但我似乎无法做到正确。我有一个包含 50 个国家(1 到 50 个)的数据集,每个国家有 15 年,每个国家有大约 20 个变量。现在我只在我的因变量(SMD)上测试一个变量(OS)。我想按国家/地区循环执行此操作,以便获得每个国家/地区的输出而不是整体输出。

我认为首先创建一个子集是明智的(以便能够先查看国家/地区 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)

编辑:导致相同错误的前 2 个国家/地区的数据样本

输入(我的数据) 结构(列表(区域=结构(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), .Label = c("NAF", "SAME"), class= "factor"), Country = 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, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L, 1995L, 1996L, 1997L, 1998L, 1999L, 2000L, 2001L, 2002L, 2003L, 2004L, 2005L, 2006L, 2007L, 2008L, 2009L, 2010L, 2011L, 2012L, 2013L, 2014L ), OS = 结构(c(19L, 25L, 27L, 15L, 22L, 20L, 23L, 9L, 7L, 5L、2L、1L、4L、3L、6L、10L、11L、13L、11L、8L、26L、25L、31L、 29L、28L、21L、30L、24L、24L、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”)、class=“因子”)、 SMD =结构(c(7L,12L,20L,21L,17L,15L,13L,10L, 14L, 22L, 23L, 33L, 1L, 32L, 29L, 34L, 28L, 25L, 不适用, 不适用, 9L、6L、8L、4L、2L、35L、3L、36L、5L、11L、16L、18L、24L、 19L, 26L, 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.25530884”、“21.54423145”、“23.75898948”、“24.08770926”、 “26.39817342”、“29.44079001”、“31.40605191”、“34.46667996”、 “34.52913657”、“35.66070947”、“36.4419931”、“39.16875621”、 “44.0126137”、“45.72949566”、“49.13062679”、“54.83730247”、 “56.87886311”、“59.80971583”、“60.5658962”、“69.20148901”、 “70.91362874”、“72.64845214”、“73.97139238”、“75.20140919”、 "76.18378138", "9.570435019", "9.867635305"), class= "因子")), .Names = c("区域", “国家”,“日期”,“操作系统”,“SMD”),class= “data.frame”,row.names = c(NA, -40L))

【问题讨论】:

  • 您可以发布您的数据样本吗?
  • 欢迎来到 Stack Overflow!请阅读how to provide a reproducible example,包括数据和代码。
  • @josilber,我添加了两个国家的子样本,希望格式正确

标签: r loops subset plm


【解决方案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,])))
}

在您的数据集中,SMDOS 是因子,需要先转换为数值。

【讨论】:

  • jlhoward,非常感谢,我能够解决它。 J
猜你喜欢
  • 2012-03-25
  • 1970-01-01
  • 2018-07-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-24
  • 1970-01-01
相关资源
最近更新 更多