如何使用国家和年份格式化数据以在 R 中进行回归?

Posted

技术标签:

【中文标题】如何使用国家和年份格式化数据以在 R 中进行回归?【英文标题】:How to format data with both country and year for a regression in R? 【发布时间】:2018-08-19 15:10:11 【问题描述】:

我有几组数据,其中有一个解释变量,我想用它来解释其他几个因变量。数据是超时的,解释变量目前是下面的格式(叫explanatory_index)

         1900  1901   ... 2000
Country1  327.1 253.5 ... 537.9
Country2  357.3 300.9 ... 510.7
...       ...   ...   ... ...
Country40 225.7 258.2 ... 451.4 

和因变量的默认格式将采用相同的格式。假设我有一个看起来像的因变量(称为 GDP)

         1900  1901   ... 2000
Country1  18   25     ... 93
Country2  20   15     ... 78
...       ...   ...   ... ...
Country40 4    7      ... 85

然后还有几个类似格式的,比如(market_size)等:

         1900  1901   ... 2000
Country1  7    9      ... 25
Country2  9    11     ... 27
...       ...  ...    ... ...
Country40 0    1      ... 8

我想要做的是分别使用每个变量的解释变量(解释索引)运行线性回归,并获得“整体”线性回归。

一个基本的 lm(GDP ~ explanatory_index) 只是抛出错误,正如我预期的那样,我不想分别回归每个国家或每年,因为这个想法是为了表明该指数具有跨国家和跨时间的重要解释力,并且可以解释某些成长的要素。

我最好尝试将数据转换为看起来更像:

               Explanatory_Index GDP market_size  
Country1_1900  327.1             18  7
Country1_1901  253.5             25  9
...
Country1_2000  537.91            93  25
...            ...               ... ...
Country40_1900 225.7             4   0
Country40_1901 258.2             7   1
...            ...               ... ...
Country40_2000 451.4             85  8

我可以在上面跑 lm(df$GDP, df$explanatory_index)? 或者有没有办法用原始数据格式做到这一点?

我了解 R 的基本知识,但是当涉及到结构和 R 如何读取内容时,它不符合我对使用 for 循环从其他语言进行编程的先入为主的概念。我假设这里使用了某些版本的 lapply,但我似乎无法弄清楚。如果有更简单的方法,我愿意修改数据格式。

【问题讨论】:

看看tidyr::gathertidyr::unite 你能帮我解决以下问题吗***.com/q/58435338/9812604 【参考方案1】:

最后一张表最适合lm

您可以执行以下操作。我只做了2张桌子。您可以将所有内容扩展到您拥有的表格数量。

library(dplyr)
library(tidyr)

df1 <- df1 %>% gather(year, value = index, -country) %>% 
  unite("country_year", c("country", "year"))

df2 <- df2 %>% gather(year, value = gdp, -country) %>% 
  unite("country_year", c("country", "year"))

# assuming identical number of rows in country_year, otherwise use a different join
total <- inner_join(df1, df2, by ="country_year")

    country_year index gdp
1  Country1_1900 327.1  18
2  Country2_1900 357.3  20
3 Country40_1900 225.7   4
4  Country1_1901 253.5  25
5  Country2_1901 300.9  15
6 Country40_1901 258.2   7
7  Country1_2000 537.9  93
8  Country2_2000 510.7  78
9 Country40_2000 451.4  85

示例数据:

df1 <- structure(list(country = c("Country1", "Country2", "Country40"), 
                      x1900 = c(327.1, 357.3, 225.7), 
                      x1901 = c(253.5, 300.9, 258.2), 
                      x2000 = c(537.9, 510.7, 451.4)), 
                 .Names = c("country", "1900", "1901", "2000"), 
                 class = "data.frame", 
                 row.names = c(NA, -3L))


df2 <- structure(list(country = c("Country1", "Country2", "Country40"), 
                      x1900 = c(18, 20, 4), 
                      x1901 = c(25, 15, 7), 
                      x2000 = c(93, 78, 85)), 
                 .Names = c("country", "1900", "1901", "2000"), 
                 class = "data.frame", 
                 row.names = c(NA, -3L))

【讨论】:

以上是关于如何使用国家和年份格式化数据以在 R 中进行回归?的主要内容,如果未能解决你的问题,请参考以下文章

从R中的单个数据帧运行几个线性回归

如何在R中按国家和年份查找最大值? [复制]

更改线性回归的 X 和 Y 变量

使用线性回归为 R 中的一个变量和多个国家/地区估算缺失数据

如何区分回归分析中的分类变量和有序变量?

如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?