【问题标题】:Plotting panel dataframe fitted vs actual as time series绘制面板数据框拟合与实际时间序列
【发布时间】:2020-04-11 20:47:27
【问题描述】:

我想请 ho 将日期变量包含到来自每个面板数据模型估计器的所有实际值和拟合值的数据框中。

使用以下代码时:

library(plm)
library(dplyr)

YEAR <- c(2015, 2016, 2017, 2018,
          2015, 2016, 2017, 2018,
          2015, 2016, 2017, 2018,
          2015, 2016, 2017, 2018)
YEAR <- as.Date(YEAR)
UNIT <- c("A", "A", "A", "A",
          "B", "B", "B", "B", 
          "C", "C", "C", "C",
          "D", "D", "D", "D")

Y <- sample(100:1000, 16)
X1 <- sample(10:50, 16)
X2 <- sample(20:60, 16)

data <- data.frame(YEAR, UNIT, Y)
crime.p <- pdata.frame(data,index=c("UNIT","YEAR")) 
fixedeff <- plm(log(Y)~X1 + X2,data=crime.p,model="within")
randomeff <- plm(log(Y)~X1  +X2,data=crime.p,model="random") 
firstdiff <- plm(log(Y)~X1 + X2,data=crime.p,model="fd") 

fixx_results <- data.frame(fitted = predict(fixedeff), 
  residuals = fixedeff$residuals ) %>% 
  mutate( actual = fitted + residuals, model = "fixed" ) %>% 
  select(actual, model, fitted, residuals) 

random_results <- data.frame( fitted = predict(randomeff), residuals = randomeff$residuals ) %>%
  mutate( actual = fitted + residuals, model = "random" ) %>% 
  select(actual, model, fitted, residuals) 

fd_results <- data.frame( fitted = predict(firstdiff ), residuals = firstdiff $residuals ) %>%
  mutate( actual = fitted + residuals, model = "fd" ) %>%
  select(actual, model, fitted, residuals) 

fitted_res_all <- rbind(fixx_results, random_results, fd_results)
fitted_res_all

fitted_res_all 数据框不包含 Date 变量,我不知道如何在那里添加它。我知道它可以“手工”完成,但我希望它尽可能通用,以便将来重复使用。

问题还在于每个面板数据估计器具有不同数量的观察值。 我想最终得到的是实际和拟合的时间序列图,但在 X 轴上有可变日期,在这个数据集中我们有早期数据,但有时他会有每月数据

【问题讨论】:

    标签: r ggplot2 rstudio panel-data


    【解决方案1】:

    将日期添加到您的数据框应该可以解决您的问题

    fixx_results <- data.frame(fitted = predict(fixedeff), 
                               residuals = fixedeff$residuals, date = rownames(crime.p)) %>% 
      mutate( actual = fitted + residuals, model = "fixed" ) %>% 
      select(actual, model, fitted, residuals, date) 
    
    random_results <- data.frame( fitted = predict(randomeff), residuals = randomeff$residuals, date = rownames(crime.p)) %>%
      mutate( actual = fitted + residuals, model = "random" ) %>% 
      select(actual, model, fitted, residuals, date) 
    
    fd_results <- data.frame( fitted = predict(firstdiff), residuals = firstdiff $residuals, date = rownames(crime.p)[4:length(crime.p)] ) %>%
      mutate( actual = fitted + residuals, model = "fd" ) %>%
      select(actual, model, fitted, residuals, date) ```
    

    【讨论】:

    • 谢谢,但是您会选择哪种方法来绘制结果?我有点困惑,因为日期也有横截面信息
    • 而且在 first_differences 估计日期不会改变横截面单位 - 这就是我发布问题的方式,我不知道如何解释它
    • 我会使用 ggplot2(折线图)来绘制 sthda.com/english/articles/32-r-graphics-essentials/…。使用 ggplot,您可以在日期中使用具有不同 x 值的构面
    猜你喜欢
    • 2016-06-26
    • 2013-12-25
    • 1970-01-01
    • 1970-01-01
    • 2020-09-02
    • 2020-04-09
    • 2021-04-25
    • 2019-02-25
    相关资源
    最近更新 更多