日米のGDP統計(SNAとNIPA)の細かな違いについて

財政政策(政府支出)のデータ分析に関する自分用のメモ:

 

日本のGDP統計は正確には国民経済計算体系(System of National Accounts)といい、国際的な基準(国連が定めるSNA)に準拠している。それに対してアメリカのGDP統計はNIPA (National Income and Product Accounts)といい、SNAと似ているものの微妙に違うという(若干厄介な)存在である。

 

たとえば、93SNA(国連が1993年に定めたSNA)以後、日本にはGNPという名称は存在しない(その代わりにGNIを使う)が、NIPAには今でもGNPが存在する。その他にも細かな違いがあって、実はちょっと厄介である。

 

それ以外にもマクロ経済学恒等式Y=C+I+G+NXを考えるときに「どのデータがGなのか?」と言われたらちょっと困る。どうやらG(政府支出, Government spending)は以下となるようだ。

 

日本:G=政府最終消費支出+公的固定資本形成

アメリカ:G=Government consumption expenditures and gross investment

 

 

dplyrのmutateでlagと差分(自分の使うところだけ)


    color <- c("R","B","B","R","R")
    weight <- c(51,55,72,57,64)
    dfrm <- data.frame(COL=color, WEI=weight)

f:id:koiti_yano:20200324003517p:plain


    dfrm %>% mutate(WEILag = lag(WEI))

f:id:koiti_yano:20200324003932p:plain

メモ:lagを使うと、データは下に1段下がる(1行下がる)。

 

差分を計算するとき、diff()は使えず、G_delta = G - lag(G)。たとえば以下のようにする。

 

dfrm %>% mutate(WEI_diff = WEI -  lag(WEI))

 

cran.r-project.org

embedの使い方(自分の使うところだけ)

embedの使い方(自分用のメモ)

 

Rにはembedという関数があり、ベクトル・時系列を指定期間ずらす作業に使える。言葉で聞くとなんだかわからないと思うので、たとえば以下のような時系列データがあったとする。

f:id:koiti_yano:20200306161855p:plain

デモ用データ

使い方は以下のとおり


    demoTs <- ts(seq(1:8), start=c(2019,1), freq=4)
    embed(demoTs, dimension=2)

出力結果は以下のとおり:

f:id:koiti_yano:20200306162503p:plain

出力結果

 

「こんな関数、何に使うんだよ?」と思うかもしれない。

 

たとえば自分で自己回帰モデル(ARやVAR)の関数を書くときに使える。まあ、ARやVARのパッケージはすでにいろいろと充実しているので、自分で書く必要があるかと言われたら、そんな機会はあまりないような気もするが、ときによっては便利な関数である。

成長率の計算(改訂版)

以下の記事の続編:

成長率の計算 - ハリ・セルダンになりたくて(はてダから移行中)

 

少し改訂版を作ったので記録のために以下に(前期比・前年同期比も計算できるように)。


growthRate <- function(tsData, lagLen=1, percent=FALSE)
{
  numSize <- length(tsData)
  seque <- seq(1:(numSize-lagLen))
  if(isTRUE(percent)){
    tsGrowth <- (diff(tsData, lag=lagLen)/tsData[seque]) * 100
  } else {
    tsGrowth <- (diff(tsData, lag=lagLen)/tsData[seque]) 
  }
  return(tsGrowth)
}
    

Rでダミー変数を作る(fastDummies)

そもそもlm()(とglm())には「data.frameの列がfactorである場合、自動的にダミー変数を作って、回帰してくれる」という機能がある(manにきちんと書かれてないので知らない人が多いかも)。

stats.idre.ucla.edu

が、lmやglmの「自動でダミー変数を作る機能」だと思うようなダミー変数にならない場合もあるので、パッケージでダミー変数を作ることを考える。

 

いくつかパッケージがあるが、それなりに使いやすいパッケージとしてfastDummiesがあるため、その中のdummy_cols()を使ってダミー変数を作る方法を以下に記す。

  


require(fastDummies)
require(tidyverse)
when <- data.frame(time = c("afternoon", "night", "afternoon", "morning", "morning", "morning", "morning", "afternoon", "afternoon"), day = c("Mon", "Mon", "Mon", "Wed", "Wed", "Fri", "Sat", "Sat", "Fri"))
when[3, "day"] <- NA
when %>% head()
dummy_cols(when)
    

# 自分用のメモ:現時のバージョンのfastDummiesではNAはNAのままで各列に入力される(以前は違ったようだが)。

 

参考(4つのパッケージの比較)

fuminorikawami.hatenablog.com

 

openxlsxの使い方(自分が使うところだけ)

require(openxlsx)

 

tmpdat<- read.xlsx("./data.xlsx", sheet = 2, startRow = 9, detectDates=TRUE)
head(tmpdat)

 

wb <- createWorkbook()
addWorksheet(wb, 'Sheet1')
addWorksheet(wb, 'Sheet2')
writeData(wb, sheet = 'Sheet1', x = lm.res1, withFilter=F)
writeData(wb, sheet = 'Sheet2', x = lm.res2, withFilter=F)
saveWorkbook(wb, "lm.res.xlsx", overwrite = T)

 

CRAN - Package openxlsx

成長率の計算

以下に改訂版の既述あり。

成長率の計算(改訂版) - ハリ・セルダンになりたくて(はてダから移行中)

 

Rを使って成長率(%表示)を計算する方法についての備忘録。

前提:tsDataをベクトルもしくはtsオブジェクトとする。 

その1:対数差分

    diff(log(tsData))*100

メリット:成長率の近似であるが、プログラムが簡単

デメリット:tsDataの要素が正である必要がある(たとえばGDPならOK、在庫変動は[負になることがあるため]ダメ)

 

その2:定義通りに成長率を計算する

一行で書くと:

numSize <- length(tsData); tsGrowth <- (diff(tsData)/tsData[-numSize]) * 100

関数にするなら以下:

growthRate <- function(tsData)
{
    numSize <- length(tsData)
    tsGrowth <- (diff(tsData)/tsData[-numSize]) * 100

    return(tsGrowth)
}

使い方はこんな感じ。

source("growthRate.R")
tmpTs <- seq(1,10,by=0.3)
growthRate(tmpTs)