按国家/地区拆分data.frame,并在每个子集上创建线性回归模型[重复]

Posted

技术标签:

【中文标题】按国家/地区拆分data.frame,并在每个子集上创建线性回归模型[重复]【英文标题】:Split data.frame by country, and create linear regression model on each subset [duplicate] 【发布时间】:2015-01-29 21:52:55 【问题描述】:

我有一个来自世界银行的数据的 data.frame,看起来像这样;

  country date BirthRate     US.
4   Aruba 2011    10.584 25354.8
5   Aruba 2010    10.804 24289.1
6   Aruba 2009    11.060 24639.9
7   Aruba 2008    11.346 27549.3
8   Aruba 2007    11.653 25921.3
9   Aruba 2006    11.977 24015.4

在这个数据框中总共有 70 个国家的子集,我想对其进行线性回归。

如果我使用以下内容,我会为一个国家/地区获得不错的 lm;

andora = subset(high.sub, country == "Andorra")

andora.lm = lm(BirthRate~US., data = andora)

anova(andora.lm)
summary(andora.lm)

但是当我尝试在 for 循环中使用相同类型的代码时,我会在代码下方打印一个错误;

high.sub = subset(highInc, date > 1999 & date < 2012)
high.sub <- na.omit(high.sub)
highnames <- unique(high.sub$country)

for (i in highnames) 
  linmod <- lm(BirthRate~US., data = high.sub, subset = (country == "[i]"))  

错误信息:

Error in lm.fit(x, y, offset = offset, singular.ok = singular.ok, ...) : 
  0 (non-NA) cases

如果我可以让这个循环运行,我理想情况下希望将每个模型的系数甚至更好的 r 平方值附加到一个空的 data.frame。任何帮助将不胜感激。

谢谢

乔什

【问题讨论】:

去掉i周围的引号和括号。 R 是不是宏语言。另外,您需要停止覆盖循环中的值。要么使用 lapply 返回列表中的值,要么学习索引列表元素。 @BondedDust,谢谢。这解决了我的问题。您能否提供一种方法来执行我正在尝试使用 lapply 执行的任务? mods &lt;- lapply( highnames, function(nm) lm(BirthRate~US., data = high.sub, subset = (country == nm)) ); mods[["Andorra"]] 我想知道来自nlmelmList 是否适合你。 【参考方案1】:

这是对@BondedDust 评论的轻微修改。

models <- sapply(unique(as.character(df$country)),
                 function(cntry)lm(BirthRate~US.,df,subset=(country==cntry)),
                 simplify=FALSE,USE.NAMES=TRUE)

# to summarize all the models
lapply(models,summary)
# to run anova on all the models
lapply(models,anova)

这会生成一个命名的模型列表,因此您可以将 Aruba 的模型提取为:

models[["Aruba"]]

【讨论】:

非常感谢,非常好,我可以关注!【参考方案2】:

看看nlme包的lmList函数:

library(nlme)
lmList(BirthRate ~ US. | country, df)

这里,| country 用于为每个国家/地区创建回归。

【讨论】:

以上是关于按国家/地区拆分data.frame,并在每个子集上创建线性回归模型[重复]的主要内容,如果未能解决你的问题,请参考以下文章

根据每个国家/地区的预定义份额将固定价值拆分到国家/地区

没有NA的data.frame的最佳子集

子集空间点以提取多边形内部的空间点(国家边界)

将每月固定值拆分为 Redshift 中的天数和国家/地区

Magento - 我如何通过 GeoIP 按国家/地区运行商店?

使用renderPlotly和plot_ly绘制数据的子集时,xAxis的值不正确