楼主: 浅井茶茶
1034 7

[问答] 关于R语言面板数据插值的问题 [推广有奖]

  • 0关注
  • 0粉丝

本科生

42%

还不是VIP/贵宾

-

威望
0
论坛币
10 个
通用积分
0
学术水平
0 点
热心指数
0 点
信用等级
0 点
经验
248 点
帖子
9
精华
0
在线时间
196 小时
注册时间
2022-9-20
最后登录
2025-3-14

楼主
浅井茶茶 发表于 2023-1-1 20:39:00 |AI写论文
10论坛币
大佬们,本人R语言小白,现在手上有一份年鉴数据,但基本都是缺2020年的数据,想根据2002年-2019年的平均增长率推测出2020年的数据,看网上说面板数据可以用pan函数,但实在不是很会R,想问一下大佬们代码上应该如何实现呢

最佳答案

zhjx19 查看完整内容

准备一个示例数据,包含两个指标: 定义一个函数,计算平均增长率进而下一年的预测: 解决问题,应用函数到每一列(除了年份),然后再拼接到原数据: 注:以上代码对任意多个指标列都适用。
关键词:数据插值 面板数据 R语言 年鉴数据 如何实现

沙发
zhjx19 发表于 2023-1-1 20:39:01
准备一个示例数据,包含两个指标:
  1. library(tidyverse)
  2. set.seed(123)
  3. df = tibble(
  4.   Year = 2002:2019,
  5.   x1 = rnorm(18, 200, 10) |> sort(),
  6.   x2 = rnorm(18, 1000,20) |> sort())
  7. df
  8. ## # A tibble: 18 × 3
  9. ## Year    x1    x2
  10. ## <int> <dbl> <dbl>
  11. ##   1  2002  180.  966.
  12. ## 2  2003  187.  977.
  13. ## 3  2004  193.  979.
  14. ## 4  2005  194.  979.
  15. ## 5  2006  194.  985.
  16. ## 6  2007  196.  987.
  17. ## 7  2008  198.  991.
  18. ## 8  2009  201.  994.
  19. ## 9  2010  201.  996.
  20. ## 10  2011  201. 1003.
  21. ## 11  2012  204. 1009.
  22. ## 12  2013  204. 1014.
  23. ## 13  2014  205. 1014.
  24. ## 14  2015  205. 1016.
  25. ## 15  2016  212. 1017.
  26. ## 16  2017  216. 1018.
  27. ## 17  2018  217. 1018.
  28. ## 18  2019  218. 1025.
复制代码



定义一个函数,计算平均增长率进而下一年的预测:
  1. f = function(x) {
  2.   n = length(x)
  3.   x[n] * (x[n] / x[1]) ^ (1/(n-1))
  4. }
复制代码

解决问题,应用函数到每一列(除了年份),然后再拼接到原数据:
  1. df %>%
  2.   bind_rows(bind_cols(Year = 2020, map_df(.[-1], f)))
  3. ## # A tibble: 18 × 3
  4. ## Year    x1    x2
  5. ## <int> <dbl> <dbl>
  6. ##   1  2002  180.  966.
  7. ## 2  2003  187.  977.
  8. ## 3  2004  193.  979.
  9. ## 4  2005  194.  979.
  10. ## 5  2006  194.  985.
  11. ## 6  2007  196.  987.
  12. ## 7  2008  198.  991.
  13. ## 8  2009  201.  994.
  14. ## 9  2010  201.  996.
  15. ## 10  2011  201. 1003.
  16. ## 11  2012  204. 1009.
  17. ## 12  2013  204. 1014.
  18. ## 13  2014  205. 1014.
  19. ## 14  2015  205. 1016.
  20. ## 15  2016  212. 1017.
  21. ## 16  2017  216. 1018.
  22. ## 17  2018  217. 1018.
  23. ## 18  2019  218. 1025.
  24. ## 19  2020  220. 1029.
复制代码


注:以上代码对任意多个指标列都适用。


已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

藤椅
nieqiang110 学生认证  发表于 2023-1-1 21:27:59
plm包,做面板数据。插值好像用VIM,MICE等包
已有 1 人评分论坛币 收起 理由
cheetahfly + 10 热心帮助其他会员

总评分: 论坛币 + 10   查看全部评分

板凳
huangtsingde 在职认证  发表于 2023-1-4 08:48:33
哈哈,非常赞啊

报纸
浅井茶茶 发表于 2023-1-4 23:45:56
zhjx19 发表于 2023-1-1 20:39
准备一个示例数据,包含两个指标:
太感谢了,明天做一下试试

地板
浅井茶茶 发表于 2023-1-4 23:46:00
zhjx19 发表于 2023-1-1 20:39
准备一个示例数据,包含两个指标:
太感谢了,明天做一下试试

7
浅井茶茶 发表于 2023-1-5 21:34:33
zhjx19 发表于 2023-1-1 20:39
准备一个示例数据,包含两个指标:
非常感谢,可以再问一个问题嘛?这个面板里面有很多组城市,也就是说有很多组2022-2019的数据,如果直接用这个代码的话,只会对最后一个2020年的数据进行插值,如果不把这个面板数据拆分开的话(因为城市实在太多),有办法进行插值嘛?

8
zrg995331 发表于 2023-1-16 10:34:23
赞啊,大佬解决了我的问题

您需要登录后才可以回帖 登录 | 我要注册

本版微信群
加好友,备注cda
拉您进交流群
GMT+8, 2025-12-5 21:31