井出草平の研究ノート

ひきこもりはネット依存か

一般的には、ひきこもり=ネット依存的なイメージが強いらしい。
そういわれてみれば、メディアイメージのひきこもりはネットをしているし、ネットで語られるひきこもりのステレオタイプもネットばかりしている人である場合が多いように思える。

そこで、実際にはひきこもりの人たちがどの程度ネット利用をしているのか調べてみた。
使用するのは内閣府の2015年調査(15-39歳)、2018年調査(40-64歳)である。

若者の生活に関する調査報告書
https://www8.cao.go.jp/youth/kenkyu/hikikomori/h27/pdf-index.html

生活状況に関する調査
https://www8.cao.go.jp/youth/kenkyu/life/h30/pdf-index.html

両方の調査で「ふだんご自宅にいるときに、よくしていることすべてに○をつけてください。」というマルチアンサーの質問があり、インターネットとゲームの選択肢が含まれている。
この質問に対する答えを集計してみたい。

若年(15-39歳, 2015年調査)

テレビ ラジオ ゲーム ネット
ひきこもり 61.2% 12.2% 46.9% 59.2%
一般群 75.7% 4.8% 38.8% 59.6%

f:id:iDES:20191228221030p:plain

ひきこもりのラジオ利用率が高いことがわかる。テレビは一般群の方がみている。ゲームは8%ほどひきこもりの方が使用率は高い。ネット利用率は一般群は差はない。
2000年代からひきこもりのラジオ利用率は高かったが、その傾向は近年でも変わっていない。一般的にはひきこもりといえばネットやゲームかもしれないが、個人的にはラジオ視聴が特徴的だと思っている点である。

ただ、ラジオはテレビよりも古いメディアなので、社会的な拒否感というのは低いだろう。ネットやゲームは数十年くらいの歴史しかないので、高齢者にとっては「よくわからない存在」であり、「気持ちの悪いもの」であり、叩きやすいものでもある。そのため、異常な行為だとみなされやすい。ひきこもりも社会的には異常な行動なので、両者は結び付けられやすいのだろう。しかし、残念ながら、実態としては、ひきこもりがとりわけネットをよく利用しているわけではなさそうである。

中年(40-64歳, 2018年調査)

テレビ ラジオ ゲーム ネット
ひきこもり 74.5% 12.8% 14.9% 29.8%
一般群 82.5% 7.9% 18.6% 43.3%

f:id:iDES:20191228221044p:plain

中年でもラジオ使用率が高い。テレビは若年と同じく一般群より1割ほど低い。ゲーム、ネットはいずれも一般群の方が高い。
ネット使用というのは、社会性とある程度の相関があると思われる。現代のオフィスワークではネット利用なしに仕事はできない。
仕事でネットを利用していれば、プライベートでもネットを利用するようになるはずである。

ひきこもりの中のヘビーユーザー

全体的にみるとひきこもり=ネット依存ということではないことが確認できた。
若年調査では一般群と使用率が同程度であった。中年調査では一般群の方がネット使用率は高かった。

ネットがあまり普及していなかった2000年代の調査では、ひきこもりのネット利用率は1割程度だったが、現代では一般群とほぼ変わらなくなったと言えるだろう。

とはいえ、ひきこもりの中にネットやゲームのヘビーユーザーがいないかというと、そうでもない。 仕事をしながら余暇のすべてをゲームやネットにつぎ込んでいる人もいるので、ひきこもりだけの問題だけではないのだが、ひきこもりとネット・ゲーム依存についても検討していかなければならないだろう。

2015年調査の問33に「パソコンや携帯ないと落ち着かない」という質問がある。内閣府の調査では、この質問くらいしかネット依存を計測できそうな質問がないが、その質問に該当したからと言って依存だということにはならない。
依存とはもう少し深刻な状況を指す。
スマホを常に持っていてLINEがくるので気になるくらいの人でもこの質問では引っかかるレベルである。
よって、下記の値は参考値くらいに捉える必要がある。

一般群とひきこもり群を比較すると、ひきこもり群の方が割合が高い。

2015年調査 パソコンや携帯ないと落ち着かない
ひきこもり 28.6%
一般群 10.5%

2018年の中年調査では割合がぐっと低くなる。

2018年調査 パソコンや携帯ないと落ち着かない
ひきこもり 8.5%
一般群 4.5%

こちらもひきこもり群の方が多い。引き上げているのは40代である。60代の一般群は1.8%と低い。

ある程度、推測は混じるが、依存という点では、一般群よりも、ひきこもり群の方が割合は多いのかもしれない。
間違えてはいけないのは、これはあくまでも割合の話である。
そもそもひきこもりは人口の1~2%程度と少数派である。
ひきこもりの方が割合として多かったとしても、ネット・ゲーム依存になっている大半の人は就労・就学をしながらの人であるということは確認しておきたい点である。

インターネットゲーム障害の研究

国立病院機構 久里浜医療センターの三原聡子さんと樋口進さんのゲーム中毒のレビューから。

onlinelibrary.wiley.com

リスク

うつと不安症はゲーム中毒のリスク

Brunborg GS, Mentzoni RA, Frøyland LR. Is video gaming, or video game addiction, associated with depression, academic achievement, heavy episodic drinking, or conduct problems? J. Behav. Addict. 2014; 3: 27–32.
https://www.ncbi.nlm.nih.gov/pubmed/25215212

Scharkow M, Festl R, Quandt T. Longitudinal patterns of problematic computer game use among adolescents and adults: A 2‐year panel study. Addiction 2014; 109: 1910–1917.
https://www.ncbi.nlm.nih.gov/pubmed/24938480

男性が多く、ADHD抑うつ、社交不安が関係

Lee SY, Lee HK, Choo H. Typology of Internet gaming disorder and its clinical implications. Psychiatry Clin Neurosci. 2017 Jul;71(7):479-491. doi: 10.1111/pcn.12457. Epub 2016 Oct 30.
https://www.ncbi.nlm.nih.gov/pubmed/27649380

男性が女性の2.3倍であり、ADHD抑うつ、社交不安が関係(注:三原さんたちのレビューにこの論文は含まれていない)

問題行動

衝動性・素行の問題

Gentile D. Pathological video‐game use among youth ages 8 to 18: A national study. Psychol. Sci. 2009; 20: 594–602.
https://www.ncbi.nlm.nih.gov/pubmed/19476590

Scharkow M, Festl R, Quandt T. Longitudinal patterns of problematic computer game use among adolescents and adults: A 2‐year panel study. Addiction 2014; 109: 1910–1917.
https://www.ncbi.nlm.nih.gov/pubmed/24938480

衝動性・素行の問題はゲーム中毒のリスクである。衝動性・素行の問題はADHDの症状である。

保護因子

社会的能力と自尊心が高いこと

Lemmens JS, Valkenburg PM, Peter J. Psychosocial causes and consequences of pathological gaming. Comput. Hum. Behav. 2011; 27: 144–152. https://www.ncbi.nlm.nih.gov/pmc/articles/PMC3003785/

学校関連でのウェルビーイング、クラスへの社会的統合

Rehbein F, Baier D. Family‐, media‐, and school‐related risk factors of video game addiction. J. Media Psychol. 2013; 25: 118–128.
Family-, Media-, and School-Related Risk Factors of Video Game Addiction: A 5-Year Longitudinal Study

教員の自律(autonomy)支援

Yu C, Li X, Zhang W. Predicting adolescent problematic online game use from teacher autonomy support, basic psychological needs satisfaction, and school engagement: A 2‐year longitudinal study. Cyberpsychol. Behav. Soc. Netw. 2015; 18: 228–233.
https://www.ncbi.nlm.nih.gov/pubmed/25803769

影響

影響がない

コンピューターゲーム使用者対象。ドイツでコンピューターゲームの使用の影響について調べた研究。開始時点から2年後の心理社会的幸福に対する体系的な悪影響は見られなかった。ただし、問題のあるゲーマーには状態が不安定になっていた。
Scharkow M, Festl R, Quandt T. Longitudinal patterns of problematic computer game use among adolescents and adults: A 2‐year panel study. Addiction 2014; 109: 1910–1917.
https://www.ncbi.nlm.nih.gov/pubmed/24938480

暴力性の増加

ゲーム中毒者対象。ゲームに費やす時間が物理的な攻撃性のレベルを増加させる。コンテンツが暴力的であるかどうかは関係がない。 76 Lemmens JS, Valkenburg PM, Peter J. The effects of pathological gaming on aggressive behavior. J. Youth Adolescence 2011; 40: 38–47.
https://www.ncbi.nlm.nih.gov/pubmed/20549320

うつ病、不安、社交不安の増加

ゲーム中毒者対象。2年後の計測でうつ病、不安、および社交不安が増加する。 Gentile D. Pathological video‐game use among youth ages 8 to 18: A national study. Psychol. Sci. 2009; 20: 594–602.
https://www.ncbi.nlm.nih.gov/pubmed/19476590

うつ病、学業成績の低下、素行の問題の増加

ゲーム中毒者対象。ノルウェーの思春期の研究。ビデオゲーム中毒がうつ病、学業成績の低下、素行の問題に関係する。ゲームプレイ時間は関係ない。 Brunborg GS, Mentzoni RA, Frøyland LR. Is video gaming, or video game addiction, associated with depression, academic achievement, heavy episodic drinking, or conduct problems? J. Behav. Addict. 2014; 3: 27–32. https://www.ncbi.nlm.nih.gov/pubmed/25215212

大学の成績、ドラック使用、アルコール乱用の増加

ゲーム中毒者対象。アメリカの研究。ビデオゲーム中毒は、大学の平均評点への負の影響、薬物の使用、アルコールの乱用と関連がある。1年後計測。 Schmitt ZL, Livingston MG. Video game addiction and college performance among males: Results from a 1 year longitudinal study. Cyberpsychol. Behav. Soc. Netw. 2015; 18: 25–29.
https://www.ncbi.nlm.nih.gov/pubmed/25584728

考察

一般人口ではゲーム使用は問題がないが、ゲーム中毒群ではゲームを続けることは様々な影響を生じさせるようだ。うつ、不安、ADHDがリスク要因として挙がっているのであれば、基本的にはそれらが悪化したと捉えるのが妥当である。つまり、ゲームのやり過ぎかそれらの精神疾患を悪化させる促進要因になったかが争点だろう。そもそも健康度が高かったものがゲームによって健康度が下がったというのはかなり稀であることは、Scharkow et al.(2011)で既に明らかである。

f:id:iDES:20191227114133p:plain

最初Unproblematicで最後にProblematicになっているのがゲームをやり続けて状態が悪化したグループである。2行目と3行目なので合わせても1.6%程度である。注意したいのはゲームが原因ではなく、他の原因はありつつ、ゲームをやり続けていることも十分想定されることだ。また、これらの人たちには生物学的脆弱性(さきほどのリスクとしての精神疾患等)も想定できるため、実際にゲームが生活を悪化させること心配することは考えなくても良いのではないかと思える。

併存症からはうつ病、不安症、ADHDのリスクが指摘されることから、これらの治療をすることがゲーム障害の予防・治療になることが示唆される。

保護因子は社会参加の度合いを強めたり、ゲーム以外に生きがいを見つけることなどが示唆される。思春期であれば学校を接点とした取り組みというこになるだろうが、学校が何かをするというのではなく、対象の学生へ社会へ留めるアプローチをする必要があるのだろう。なお、レビューには含まれないが、このタイプの学生は不登校になりやすいことがわかっている。不登校になり家にずっいるのでゲームをずっとしているというパターンである。

結局のところ、疾患があれば治療、社会的に孤立すれば包摂という基本的なアプローチをすることに尽きるようだ。

潜在プロファイル分析の標準書式での書き換え

mclustパッケージを使った潜在プロファイル分析のエントリではパイプ演算子によるコードを使用していた。

ides.hatenablog.com

パイプを使わずにRの標準書式での記述を示しておきたい。 参考までに、パイプ演算子での表記も併記しておく。

まず、young_people.csvHistoryからPetsの列を抜き出す作業。
dplyrは変数名で吹き出すことができるのでselect(History:Pets)となるが、Rの標準コードは行数で抜き出すので、以下のようになる。

標準コード

d1 <- read.csv("https://raw.githubusercontent.com/whipson/tidytuesday/master/young_people.csv")
survey <-d1[,32:63]

パイプ演算子

library(tidyverse)
survey <- read_csv("https://raw.githubusercontent.com/whipson/tidytuesday/master/young_people.csv") %>% select(History:Pets)

マハラノビス距離で多変量の外れ値を探す。

標準コード

library(careless)
library(psych)
md <- outlier(survey , plot = FALSE)  ## psychパッケージ。マハラノビス平方距離
string <- longstring(survey) ## carelessパッケージ。各観測の同一の連続した応答の最長文字列を識別する
interests <- cbind(survey, md, string) ## 34, 35行目にmdとstringの列をくっつける

パイプ演算子

library(careless)
library(psych)
interests <- survey %>%
  mutate(string = longstring(.)) %>%
  mutate(md = outlier(., plot = FALSE))

標準コード

cutoff <- (qchisq(p = 1 - .001, df = ncol(interests))) ## カットオフ値の設定
interests2 <-interests[interests$string <= 10 &  interests$md < cutoff, ] ## stringが10以下、mdがカットオフ未満の値を抽出
interests_clean<- interests2[,1:32] ## 33行目のstringと34行目のmdを除いた行を抽出

パイプ演算子

cutoff <- (qchisq(p = 1 - .001, df = ncol(interests)))
interests_clean <- interests %>%
  filter(string <= 10,
         md < cutoff) %>%
  select(-string, -md)

標準コード

library(mclust)
interests_clean1 <- na.omit(interests_clean)  ## 欠損値を含む行を削除
interests_clustering <- as.data.frame(scale(interests_clean1)) ## 標準化+データフレーム化
BIC <- mclustBIC(interests_clustering)

パイプ演算子

library(mclust)
interests_clustering <- interests_clean %>%
  na.omit() %>%
  mutate_all(list(scale))
BIC <- mclustBIC(interests_clustering)

パイプ演算子[R]

Rの分析例をみていると、パイプ演算子が使われたものがあるので、自分の勉強がてら基本的な使い方をメモしておきたい。

パイプ演算子の目的

Rの標準書式は可視性がいまいちである。

x <- c(0.109, 0.359, 0.63, 0.996, 0.515, 0.142, 0.017, 0.829, 0.907)
round(exp(diff(log(x))), 1)

二行目は括弧が重なってよくわからない状態になっている。
括弧がうまく閉じていない、というのはRのコードを書いていると、よく経験する事態である。

これをパイプ演算子で表現すると、以下のようになる。

library(magrittr)
x %>% log() %>%
    diff() %>%
    exp() %>%
    round(1)

パイプ演算子を利用する利点は2点だろうか。

  1. 可視性が高まる。
  2. 計算をするときには一番中の括弧から解いていくので、計算手順と同じ手順でコードが書ける。

標準的な書き方だと中から書いて、左右に動かしながら、計算式を書いていくので、コードが合理的に書けない。
また、括弧が足りなかったり、多かったりしてエラーを吐かれることもしばしばある。
そういった問題をパイプ演算子は解決してくれるようだ。

パイプ書式

関数の基本から。

log(x) ## 標準
x %>% log() ## パイプ

オプションのつけ方。

round(pi, 6) ## 標準
pi %>% round(6) ## パイプ

babynamesデータからTaylorという名前の男性の人数を数える。

library(babynames)
library(dplyr)
data(babynames)
sum(select(filter(babynames,sex=="M",name=="Taylor"),n)) ## 標準

パイプ演算子は次のように書く。

babynames%>%filter(sex=="M",name=="Taylor")%>%  ## パイプ
            select(n)%>%
            sum

代入パイプ演算子(Assignment Pipe Operations)

パイプ演算子にはいくつか種類がある。 代入機能を持つパイプ演算子%<>%では変数加工がスマートになる。

irisデータを使って、Sepal.Lengthのデータを平方根にするというコードを書く。
<-を使うと標準書式では次のように書く。

iris$Sepal.Length <- sqrt(iris$Sepal.Length)

同じ事をパイプ書式で書くと次のようになる。

iris$Sepal.Length <- 
  iris$Sepal.Length %>%
  sqrt()

これをassign演算子%<>%で書くとスマートに書くことができる。

iris$Sepal.Length %<>% sqrt

Tee演算子(Tee Operator)

Tee演算子は右側の値ではなく左側の値を返す。

set.seed(123)
rnorm(200) %>%
matrix(ncol = 2) %T>%
plot %>% 
colSums

エクスポジション演算子(Exposition Operator)

iris %>%
  subset(Sepal.Length > mean(Sepal.Length)) %$%
  cor(Sepal.Length, Sepal.Width)

dplyrパッケージの5つのコマンド

dplyrは5つのコマンドから構成されている。

  • select...データフレームから指定した列のみ抽出する
  • filter...行の絞り込み
  • arrange...行を並べ替える
  • mutate...列の追加
  • summarize...集計

標準コードで書いたもの。

library(hflights)

grouped_flights <- group_by(hflights, Year, Month, DayofMonth)
flights_data <- select(grouped_flights, Year:DayofMonth, ArrDelay, DepDelay)
summarized_flights <- summarise(flights_data, 
                arr = mean(ArrDelay, na.rm = TRUE), 
                dep = mean(DepDelay, na.rm = TRUE))
final_result <- filter(summarized_flights, arr > 30 | dep > 30)

final_result

パイプ演算子で書いたもの。

hflights %>% 
    group_by(Year, Month, DayofMonth) %>% 
    select(Year:DayofMonth, ArrDelay, DepDelay) %>% 
    summarise(arr = mean(ArrDelay, na.rm = TRUE), dep = mean(DepDelay, na.rm = TRUE)) %>% 
    filter(arr > 30 | dep > 30)

違いを一言で言うならば、標準コードはオフジェクトに格納をすることが基本的な発想であるが、パイプ演算子は格納せずに主として右側にそのまま関数で変換した値を渡すという発想ということなのだろう。

RStudioのショートカット

%>%を何度も打つのはめんどくさい。 RStudioのアドインをインストールすると少しは便利になる。

https://rstudio.github.io/rstudioaddins/

コンソールから下記のコードを実行し、RStudioを再起動。

devtools::install_github("rstudio/addinexamples", type = "source")

f:id:iDES:20191226061923p:plain

メニューのAddinsにinsert %in%が追加されている。

ショートカットの振り分けはModify Keyboard Shortcutsメニューから。

f:id:iDES:20191226061936p:plain

説明ではCtrl + Alt + Shift + Kを当てるようだが、Kはなぜか反応しなかったのてpipeのPを当てておいた。

f:id:iDES:20191226061947p:plain

関数型言語

統計解析にはあまり関係がないが、Rの言語型には議論があるようだ。
Rは関数型言語のようで関数型言語ではないらしい。

kiito.hatenablog.com

統計パッケージとしてRを利用している者にとっては、さほど重要なことではないが、Rを関数型言語として成立させるものがパイプ演算子だと考えると良いらしい。

このエントリは下記のエントリを参照した。

www.datacamp.com

業者に託した息子が孤独死…母の後悔 引きこもり“引き出し屋”の実態

www.nishinippon.co.jp

業者を知ったのは2017年1月。ホームページの「必ず自立させます」という言葉にひかれ、東京都内の本部に相談に行くと、スタッフに「早い対応が必要」と促された。提示された契約金は900万円超。自宅を売る段取りをして準備した。
長男は都内の施設に入り、その後、提携する熊本県内の研修所に移った。ほどなくして、業者から「熊本で就職した」と報告を受けた。自立を妨げないようにと、女性は連絡を控えていた。
今春になって突然、業者から電話が入った。「息子さんが亡くなりました」

もちろん悪徳業者がダメなのだが、親もダメだろう。本人が哀れでならない。
「自立を妨げないようにと、女性は連絡を控えていた」と言っているが、連絡をすると自立できない、というのはおかしい。 施設にぶち込んで親子関係が悪くなって、子どもと連絡すらできない関係性になっていたのではないだろうか。

「業者が丁寧にフォローしてくれていれば、こんなことにならなかったのでは」という主張も、親がフォローしていない理由にはならないだろう。
悪徳業者が悪いといっても、親の言い分はひどいものである。

本人は、親にも施設にぶち込まれて、親に支援を申し出ることもできず、孤立無援になり、餓死したように思える。

お金はイージーに問題を解決してくれるように見えて、物事の本質は変化させない。
とにもかくにも、世の中の人は「金さえあればなくとかなる」と考えがちである。

ひきこもり状態を問題だと考えている規範の裏には「働いて金を儲けて一人前」という考えがある。
お金は万能ではない。しかし、労働賛美の思想には、お金に対する実際以上の評価が隠れている。

ひきこもりを許容できない親の価値観、お金を支払って問題を解決しようとする親の行動は同じところからきている。
お金は万能ではないし、ごはん屋さんに入ってごはんが食べられるように、金を出してもひきこもりはなおらないという、当たり前のことに気づく必要がある。
親がそれを気づくだけで、少しはひきこもりにも寛容になれるのではないだろうか。

SPSS、SAS、StataのデータをRでインポート、エクスポートをする

SPSSSAS、StataのデータをRでインポート、エクスポートをするhavenパッケージの紹介である。 havenパッケージはtidyverseを構成するパッケージの一つである。
他の統計パッケージのデータを読み込む有名なパッケージはforeignだが、RStudioブログによると以下の3点で改善があるらしい。

  1. バイナリSAS7BDATファイルを読み取ることができる。
  2. Stata13ファイルを読み取ることができる。
  3. 常にデータフレームを返す。

https://blog.rstudio.com/2015/03/04/haven-0-1-0/

僕はSASを使わないので、関係があるのは2と3である。特に3である。
foreignパッケージはデータフレームで返すようにオプションで指定しなければならない。
実際、コードを覚えているわけではないので、毎度毎度、コピペをしていて、相当不便であった。havenパッケージの方が簡単なコードで書けて、覚えきれる形式なので、ありがたい。

なお、havenパッケージは変数ラベル、値ラベルもきっちり読み書きできる。foreignパッケージも同様のことは可能なので、havenパッケージの方がこの点で優秀だとは言えないが、やはり簡便にコードが書けるのはすばらしい。

SPSSデータの読み込み

村瀬洋一さんのサイトからデータを利用させていただこう。

www.asahi-net.or.jp

村瀬さんのサイトから以下のデータを利用する。

  1. ジェンダー意識調査 分析実習用データ(SPSS形式データファイル) 06genren.sav

havenパッケージを使ってRに読み込むのは以下のように行う。

library(haven)
d1 <- read_sav("06genren.sav")

SPSSのデータはエンコード問題がある。
現在はSPSSUTF-8を推奨するメッセージを出すようになったので、UTF-8を使っている人が増えてきていると思うのだが、少し昔のファイルでは、ローカルエンコード(Shift-JIS)で作られていることが多かった。
分析をSPSSで完結させている場合には、特に問題がないのだが、Rでインポートとなってくると、文字化けが起こるのである。

f:id:iDES:20191217153649p:plain

このような場合はエンコードcp932にする。

d2 <- read_sav("06genren.sav", encoding ="cp932")

f:id:iDES:20191217153703p:plain

文字化けせずに読み込むことができる。 ちなみにCP932はShift_JISWindowsアプリケーションにおける実装である。 エンコードUTF-8の時は"UTF-8"と書く。

SPSSデータの書き出しとエンコードの変換

さきほど読み込んだd2に格納した06genren.savSPSS形式で書き出す。

write_sav(d2, "gender_survey.sav")

write_sav関数での書き出しはUTF-8である。 Rのhavenパッケージを通すと、SPSSを使わずにデータのエンコードができる。

これはPSPPを使う場合に有用かもしれない。 PSPPも日本語WindowsのローカルエンコードであるCP932に対応していたようにも思うが、WindowsUTF-8で動かしている人は、Shift-JISのSPSSデータを読むと文字化けしたはずなので、そういった場合に、havenパッケージでエンコーディングをするとよいと思う。

Stataデータの読み込み

foreignパッケージではStata13ファイル以降が読み込めないらしい。 Stata16のサンプルデータを読み込んでみよう。

https://www.stata-press.com/data/r16/r.html

d3 <- read_dta("http://www.stata-press.com/data/r16/apple.dta")

以上にように記するとWeb上のデータも取得できる。
read_dtaread_stataでもよいらしい。

Stataデータの書き出し

write_dta(d3, "apple.dta", version=14)

こちらはwrite_stataは通らない。

バージョンは8~15までをサポートしているらしい。
古いStataしか持っていなくて、データが自分の持っているStataのバージョンより大きいバージョンで作成されている場合には、古いバージョンへのデータのダウングレードが可能である。

さきほどSPSSデータ06genren.savをd2で取り込んだが、これをStata形式で出力してみよう。

write_dta(d2, "gender_survey.dta")

Stata16の新規機能実装のウリの一つはSPSSのデータなども読み込めるようなったことである。
いまさらの対応か、とも思うが、ケチくさいのは、書き出しにはいまだに対応していないことである。

僕はStataユーザーになってから日が浅いので、対応するパッケージが作られていて、実はできるというオチのような気もするが、少なくとも標準機能だけではできないので、不便である。
他の統計パッケージのデータが読めない場合には、このような変換テクニックを知っておくと役に立つように思う。

RのTSstudioパッケージ

時系列データのグラフィックを目的に作られたTSstudioパッケージを紹介しよう。TSはTime Seriesの略だろう。

ramikrispin.github.io

TSstudioパッケージの中にUSgasという天然ガスの消費のデータが入っている。

library(TSstudio)
data(USgas)

このような感じのデータである。
月間消費量である。暖房に使うためか、冬場に高くなる特徴がある。

        Jan    Feb    Mar    Apr    May    Jun    Jul    Aug    Sep    Oct    Nov    Dec
2000 2510.5 2330.7 2050.6 1783.3 1632.9 1513.1 1525.6 1653.1 1475.0 1567.8 1908.5 2587.5
2001 2677.0 2309.5 2246.6 1807.2 1522.4 1444.4 1598.1 1669.2 1494.1 1649.1 1701.0 2120.2
2002 2487.6 2242.4 2258.4 1881.0 1611.5 1591.4 1748.4 1725.7 1542.2 1645.9 1913.6 2378.9
2003 2700.5 2500.3 2197.9 1743.5 1514.7 1368.4 1600.5 1651.6 1428.6 1553.2 1753.6 2263.7

2000年1月から2019年7月までのデータが含まれている。

年次推移プロット

ts_plot(USgas, 
        title = "US Monthly Natural Gas Consumption",
        Ytitle = "Billion Cubic Feet")

f:id:iDES:20191216152322p:plain

季節推移プロット

ts_seasonal(USgas, type = "all")

f:id:iDES:20191216152334p:plain

タイプは"normal"、"cycle"、"box"の3つ。今回は"all"を指定して3つとも表示させている。

ヒートマップ

ts_heatmap(USgas, title = "US Monthly Natural Gas Consumption - Heat-map")

f:id:iDES:20191216152401p:plain

デフォルトの色は青だそうだ。 直近4年といった設定もできるようだ。データ加工をすればいいだけのような気もするが、あると便利なことはあるのかもしれない。

ts_heatmap(USgas, last = 4 * 12, title = "US Monthly Natural Gas Consumption - Heat-map - Last 4 years")

f:id:iDES:20191216152437p:plain

ACFとPACF

自己相関(ACF, autocorrelation function)と偏自己相関(PACF, partial autocorrelation function)のグラフも出力できる。

ts_cor(USgas, lag.max = 60)

f:id:iDES:20191216152452p:plain

ラグプロット

ts_lags(USgas, lags = 1:12)

f:id:iDES:20191216152541p:plain

予測モデル

レーニングセットとテストセットに分割する。

USgas_s <- ts_split(ts.obj = USgas, sample.out = 12)
train <- USgas_s$train
test <- USgas_s$test

レーニングセットに2018年の7月までのデータが入り、テストセットに2018年8月2019年7月までの1年分のデータが格納されている。

auto.arima関数を使った予測

library(forecast)
md <- auto.arima(train)
fc <- forecast(md, h = 12)

実際の2000-2019年のデータ(分割前のフルデータ)とトレーニングセットからの推測を並べてプロット。

test_forecast(actual = USgas, forecast.obj = fc, test = test)

f:id:iDES:20191216152601p:plain

2018-2019期が緑のForecastとして表示されている。

予測値に着目して、もう少しわかりやすくプロットしたのがこちら。

plot_forecast(fc)

f:id:iDES:20191216152631p:plain

レーニングセットから2018-2019期を予測し、その80%、95%確信区間を表記できる。