Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按国家分割data.frame,并在每个子集上创建线性回归模型_R_Dataframe_Regression_Linear Regression - Fatal编程技术网

按国家分割data.frame,并在每个子集上创建线性回归模型

按国家分割data.frame,并在每个子集上创建线性回归模型,r,dataframe,regression,linear-regression,R,Dataframe,Regression,Linear Regression,我有一个来自世界银行的数据框架,看起来像这样 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 2401

我有一个来自世界银行的数据框架,看起来像这样

  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]"))  
}
如果我能让这个循环运行,我会理想地将每个模型的系数和更好的r平方值附加到一个空的data.frame。任何帮助都将不胜感激

谢谢


Josh

这是对@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)

这是对@bondedust的评论的轻微修改

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)
查看nlme包的lmList函数:

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

查看nlme包的lmList函数:


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

去掉i周围的引号和括号。R不是宏语言。另外,您需要停止覆盖循环中的值。使用Lappy返回列表中的值,或者学习为列表元素编制索引。@BondedDust,谢谢。这解决了我的问题。你能提供一种方法来执行我试图用Lappy做的任务吗?我想知道nlme的lmList是否适合你。去掉I周围的引号和括号。R不是宏语言。另外,您需要停止覆盖循环中的值。使用Lappy返回列表中的值,或者学习为列表元素编制索引。@BondedDust,谢谢。这解决了我的问题。你能提供一种方法来执行我试图用lapply做的任务吗?我想知道nlme的lmList是否适合你。非常感谢,非常好,我可以跟随!非常感谢,非常好,我可以跟着!
models[["Aruba"]]
library(nlme)
lmList(BirthRate ~ US. | country, df)