R入門
時系列解析
最終更新:
r-intro
目次
時系列オブジェクトを使う
Rには標準で時系列解析を行うためのパッケージとその関数群、サンプルデータが含まれている。サンプルデータ(UKDriverDeaths)で試してみる。
> UKDriverDeaths
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1969 1687 1508 1507 1385 1632 1511 1559 1630 1579 1653 2152 2148
1970 1752 1765 1717 1558 1575 1520 1805 1800 1719 2008 2242 2478
1971 2030 1655 1693 1623 1805 1746 1795 1926 1619 1992 2233 2192
1972 2080 1768 1835 1569 1976 1853 1965 1689 1778 1976 2397 2654
1973 2097 1963 1677 1941 2003 1813 2012 1912 2084 2080 2118 2150
1974 1608 1503 1548 1382 1731 1798 1779 1887 2004 2077 2092 2051
1975 1577 1356 1652 1382 1519 1421 1442 1543 1656 1561 1905 2199
1976 1473 1655 1407 1395 1530 1309 1526 1327 1627 1748 1958 2274
1977 1648 1401 1411 1403 1394 1520 1528 1643 1515 1685 2000 2215
1978 1956 1462 1563 1459 1446 1622 1657 1638 1643 1683 2050 2262
1979 1813 1445 1762 1461 1556 1431 1427 1554 1645 1653 2016 2207
1980 1665 1361 1506 1360 1453 1522 1460 1552 1548 1827 1737 1941
1981 1474 1458 1542 1404 1522 1385 1641 1510 1681 1938 1868 1726
1982 1456 1445 1456 1365 1487 1558 1488 1684 1594 1850 1998 2079
1983 1494 1057 1218 1168 1236 1076 1174 1139 1427 1487 1483 1513
1984 1357 1165 1282 1110 1297 1185 1222 1284 1444 1575 1737 1763
tsp関数は、その時系列オブジェクトの開始時刻、終了時刻、観測頻度を返す。
> tsp(UKDriverDeaths)
[1] 1969.000 1984.917 12.000
時刻の基準は時刻の1という量を何に置くかで決まり、1という量を1年でも1時間でも1分としてもどれでもよく、あくまでこれを基準にするということ。このサンプルデータの例では、時刻の基準は年を想定し(1.0=1年)、観測頻度は12としているので、1か月ごとのデータであるということ。つまり、最終データは1984年の12月なので、1984+11/12≒1984.917となる。
start関数とend関数は、それぞれ開始時と終了時の、時系列オブジェクトの基準値と観測頻度における番号を返す。
> start(UKDriverDeaths)
[1] 1969 1
> end(UKDriverDeaths)
[1] 1984 12
開始時データは、基準値が1969で頻度1番目(つまり、1969年1月のデータ)、終了時データは、基準値が1984で頻度12番目(つまり、1984年12月のデータ)ということ。
frequency関数は、その時系列オブジェクトの観測頻度を返す。
> frequency(UKDriverDeaths)
[1] 12
年を基準として毎月のデータであるので、1年は12か月あるので12となっている。
time関数、ts関数は、それぞれ時系列オブジェクトの説明変数、目的変数の値を返す。
> time(UKDriverDeaths)
Jan Feb Mar ・・・
1969 1969.000 1969.083 1969.167 ・・・
1970 1970.000 1970.083 1970.167 ・・・
(表示省略)
> ts(UKDriverDeaths)
Time Series:
Start = 1
End = 192
Frequency = 1
[1] 1687 1508 1507 1385 1632
[6] 1511 1559 1630 1579 1653
as.numeric関数で変換すれば、それぞれベクトルとして値を取り出すことができ、時系列解析ではなく回帰分析も行うことができる。
> x <- as.numeric(time(UKDriverDeaths))
> y <- as.numeric(ts(UKDriverDeaths))
> r <- lm(y ~ x)
> print(r)
Call:
lm(formula = y ~ x)
Coefficients:
(Intercept) x
57107.87 -28.04
> plot(x, y)
> abline(r)
ベクトルから時系列オブジェクトを作る
ts関数を使う。以下は、1~36の36個の要素からなる数値型ベクトルから時系列オブジェクトを作成した例。
ただ数値が並べられただけの時系列オブジェクト。
> ts(1:36)
Time Series:
Start = 1
End = 36
Frequency = 1
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
[18] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
[35] 35 36
観測データが1周期に12個である場合。
> ts(1:36, frequency = 12)
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1 1 2 3 4 5 6 7 8 9 10 11 12
2 13 14 15 16 17 18 19 20 21 22 23 24
3 25 26 27 28 29 30 31 32 33 34 35 36
同様に1周期に観測データが12個で、その開始時刻を1、周期の開始を1とした場合。
> ts(1:36, frequency = 12, start = c(2000, 1))
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 13 14 15 16 17 18 19 20 21 22 23 24
2002 25 26 27 28 29 30 31 32 33 34 35 36
ナイル川の年間流量のデータ
Rに標準で搭載されているdatasetsパッケージにNileという名前で含まれている。
> Nile
Time Series:
Start = 1871
End = 1970
Frequency = 1
[1] 1120 1160 963 1210 1160 1160 813 1230 1370 1140 995 935 1110
[14] 994 1020 960 1180 799 958 1140 1100 1210 1150 1250 1260 1220
[27] 1030 1100 774 840 874 694 940 833 701 916 692 1020 1050
[40] 969 831 726 456 824 702 1120 1100 832 764 821 768 845
[53] 864 862 698 845 744 796 1040 759 781 865 845 944 984
[66] 897 822 1010 771 676 649 846 812 742 801 1040 860 874
[79] 848 890 744 749 838 1050 918 986 797 923 975 815 1020
[92] 906 901 1170 912 746 919 718 714 740
> plot(Nile)
時系列オブジェクト(time-series objects)で格納されている。Rのヘルプによれば、期間は1871~1970年。単位は108m 3 。計測地点はアスワン。
毎年の太陽黒点数(Wolfer sunspot number)のデータ
パッケージTSSSに格納されている。データ名はSunspot。1749年から1979年までの毎年の値で、データ数は231個。
> library(TSSS)
> Sunspot
エラー: オブジェクト 'Sunspot' がありません
> data(Sunspot)
> Sunspot
Time Series:
Start = 1749
End = 1979
Frequency = 1
[1] 80.9 83.4 47.7 47.8 30.7 12.2 9.6 10.2 32.4 47.6 54.0 62.9 85.9 61.2 45.1
[16] 36.4 20.9 11.4 37.8 69.8 106.1 100.8 81.6 66.5 34.8 30.6 7.0 19.8 92.5 154.4
[31] 125.9 84.8 68.1 38.5 22.8 10.2 24.1 82.9 132.0 130.9 118.1 89.9 66.6 60.0 46.9
[46] 41.0 21.3 16.0 6.4 4.1 6.8 14.5 34.0 45.0 43.1 47.5 42.2 28.1 10.1 8.1
[61] 2.5 0.1 1.4 5.0 12.2 13.9 35.4 45.8 41.1 30.1 23.9 15.6 6.6 4.0 1.8
[76] 8.5 16.6 36.3 49.6 64.2 67.0 70.9 47.8 27.5 8.5 13.2 56.9 121.5 138.3 103.2
[91] 85.7 64.6 36.7 24.2 10.7 15.0 40.1 61.5 98.5 124.7 96.3 66.6 64.5 54.1 39.0
[106] 20.6 6.7 4.3 22.7 54.8 93.8 95.8 77.2 59.1 44.0 47.0 30.5 16.3 7.3 37.6
[121] 74.0 139.0 111.2 101.6 66.2 44.7 17.0 11.3 12.4 3.4 6.0 32.3 54.3 59.7 63.7
[136] 63.5 52.2 25.4 13.1 6.8 6.3 7.1 35.6 73.0 85.1 78.0 64.0 41.8 26.2 26.7
[151] 12.1 9.5 2.7 5.0 24.4 42.0 63.5 53.8 62.0 48.5 43.9 18.6 5.7 3.6 1.4
[166] 9.6 47.4 57.1 103.9 80.6 63.6 37.6 26.1 14.2 5.8 16.7 44.3 63.9 69.0 77.8
[181] 64.9 35.7 21.2 11.1 5.7 8.7 36.1 79.7 114.4 109.6 88.8 67.8 47.5 30.6 16.3
[196] 9.6 33.2 92.6 151.6 136.3 134.7 83.9 69.4 31.5 13.9 4.4 38.0 141.7 190.2 184.8
[211] 159.0 112.3 53.9 37.5 27.9 10.2 15.1 47.0 93.8 105.9 105.5 104.5 66.6 68.9 38.0
[226] 34.5 15.5 12.6 27.5 92.5 155.4
> plot(Sunspot)

東京の毎日の最高気温を16か月にわたって記録したデータ
> install.packages("TSSS")
(表示省略)
> library(TSSS)
> Temperature
[1] 10.4 11.5 9.7 13.5 13.6 11.0 7.4 15.1 16.5 16.6 11.1 9.2
[13] 3.5 6.3 9.7 10.6 10.1 12.5 7.2 8.2 14.0 8.2 11.5 13.7
[25] 11.7 15.8 14.3 7.8 5.5 12.4 9.8 17.6 10.2 10.7 12.0 5.9
[37] 14.0 12.6 11.8 11.2 11.0 16.0 15.0 14.8 14.6 13.0 11.5 8.8
[49] 13.1 13.6 13.5 19.9 17.8 10.4 10.4 12.9 8.2 7.9 12.0 9.8
[61] 9.2 10.4 6.2 10.0 12.8 14.2 11.7 15.7 16.5 12.8 7.9 8.3
[73] 11.2 14.3 13.7 16.5 13.9 11.8 13.7 12.1 15.8 12.9 16.3 16.2
[85] 15.7 17.1 17.6 20.4 22.8 21.7 15.7 10.9 16.8 15.5 10.7 16.5
[97] 18.5 20.1 22.8 19.5 21.9 19.1 15.2 22.4 16.7 16.9 16.9 16.6
[109] 13.9 12.8 18.6 16.7 21.4 24.0 23.4 17.2 14.8 14.3 19.3 22.3
[121] 20.2 16.8 22.4 21.5 22.0 22.3 21.0 19.9 25.5 21.8 23.9 20.8
[133] 20.6 17.3 21.7 15.8 17.9 20.1 22.6 24.0 25.6 26.2 25.7 24.7
[145] 27.2 26.0 22.9 27.9 25.7 23.7 22.9 24.4 24.0 24.8 25.6 25.7
[157] 26.0 25.1 28.4 28.6 28.7 26.0 23.1 24.6 20.3 26.4 27.0 29.7
[169] 31.4 30.7 31.1 31.6 33.3 33.0 33.4 34.1 32.1 27.4 30.4 26.5
[181] 24.4 28.9 31.8 28.6 23.8 28.4 30.6 29.1 27.1 29.3 29.0 28.7
[193] 31.6 26.3 21.7 24.4 23.6 25.1 22.7 26.0 23.9 27.7 29.4 31.9
[205] 32.9 31.6 30.9 30.0 30.2 32.3 32.4 34.3 32.8 33.5 30.7 28.6
[217] 32.7 32.8 32.4 31.0 32.2 32.6 30.5 32.1 32.7 33.3 31.7 32.8
[229] 33.1 32.5 33.1 28.4 26.4 32.2 31.3 30.5 27.1 30.3 33.5 29.4
[241] 26.9 24.2 28.4 28.4 27.3 30.5 30.1 32.7 29.9 29.6 31.9 28.3
[253] 28.6 28.3 27.4 28.0 28.5 29.7 26.3 23.7 28.4 31.2 27.8 27.3
[265] 30.0 31.5 22.2 20.4 21.4 23.4 21.9 20.4 23.7 32.6 24.4 21.2
[277] 24.3 25.6 21.1 15.9 26.3 23.2 24.1 22.9 23.7 22.5 23.2 23.8
[289] 23.9 24.1 22.1 26.4 25.9 25.5 20.8 20.8 18.2 20.2 22.0 23.3
[301] 21.9 20.5 22.8 21.2 21.2 25.3 21.3 19.4 25.2 23.1 19.2 20.2
[313] 18.9 16.2 24.1 22.6 18.3 13.7 13.8 16.7 16.4 13.2 15.2 13.7
[325] 14.8 13.7 17.4 10.7 11.6 15.3 15.7 12.5 20.6 16.9 13.4 12.7
[337] 14.8 12.4 18.7 18.6 15.0 15.5 14.9 13.9 12.1 10.0 12.5 12.3
[349] 13.4 13.4 12.3 12.4 11.9 17.6 17.4 17.4 13.9 7.8 14.1 11.3
[361] 15.8 12.4 11.6 13.9 16.9 10.1 7.8 9.9 13.9 9.3 11.5 12.1
[373] 6.7 6.7 11.7 7.6 7.0 3.9 11.5 10.4 10.4 10.1 8.7 8.7
[385] 12.5 8.0 7.3 8.9 9.9 9.1 10.8 14.3 18.8 11.1 10.0 10.4
[397] 8.2 9.5 10.3 9.5 7.6 6.8 7.5 6.3 9.1 10.0 11.1 10.5
[409] 9.8 6.2 9.1 7.0 7.5 9.5 5.5 11.3 8.7 8.7 8.8 12.8
[421] 12.1 12.0 12.8 6.1 13.3 14.2 11.1 7.2 12.2 8.9 7.3 7.2
[433] 15.2 8.3 16.9 8.3 10.0 12.2 8.3 12.1 11.4 13.0 11.5 6.3
[445] 16.1 12.5 8.8 11.6 11.5 11.1 11.8 15.7 15.3 17.7 21.2 18.1
[457] 17.0 15.4 13.0 17.2 21.9 20.0 20.2 17.2 19.3 14.7 17.4 21.3
[469] 16.9 21.4 9.6 11.4 11.8 16.5 19.0 19.3 20.7 17.0 20.1 17.2
[481] 14.9 16.7 17.1 24.0 21.0 17.7
> plot(Temperature)

英国(UK)におけるドライバーの月間死傷者数のデータ
Rに標準で搭載されているdatasetsパッケージにUKDriverDeathsという名前で含まれている。時系列オブジェクト(time-series objects)で格納されており、Rのヘルプによれば、1969年1月から1984年12月までのデータ。
> UKDriverDeaths
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1969 1687 1508 1507 1385 1632 1511 1559 1630 1579 1653 2152 2148
1970 1752 1765 1717 1558 1575 1520 1805 1800 1719 2008 2242 2478
1971 2030 1655 1693 1623 1805 1746 1795 1926 1619 1992 2233 2192
1972 2080 1768 1835 1569 1976 1853 1965 1689 1778 1976 2397 2654
1973 2097 1963 1677 1941 2003 1813 2012 1912 2084 2080 2118 2150
1974 1608 1503 1548 1382 1731 1798 1779 1887 2004 2077 2092 2051
1975 1577 1356 1652 1382 1519 1421 1442 1543 1656 1561 1905 2199
1976 1473 1655 1407 1395 1530 1309 1526 1327 1627 1748 1958 2274
1977 1648 1401 1411 1403 1394 1520 1528 1643 1515 1685 2000 2215
1978 1956 1462 1563 1459 1446 1622 1657 1638 1643 1683 2050 2262
1979 1813 1445 1762 1461 1556 1431 1427 1554 1645 1653 2016 2207
1980 1665 1361 1506 1360 1453 1522 1460 1552 1548 1827 1737 1941
1981 1474 1458 1542 1404 1522 1385 1641 1510 1681 1938 1868 1726
1982 1456 1445 1456 1365 1487 1558 1488 1684 1594 1850 1998 2079
1983 1494 1057 1218 1168 1236 1076 1174 1139 1427 1487 1483 1513
1984 1357 1165 1282 1110 1297 1185 1222 1284 1444 1575 1737 1763
> class(UKDriverDeaths)
[1] "ts"
> plot(UKDriverDeaths)

アメリカの食品産業に従事する労働者の毎月の人数(BLSALLFOODデータ)
パッケージTSSSに格納されている。パッケージをインストールして読み出す。
> install.packages("TSSS")
(表示省略)
> library(TSSS)
> data(BLSALLFOOD)
> BLSALLFOOD
Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
1967 1720 1702 1707 1708 1727 1789 1829 1880 1920 1872 1811 1771
1968 1706 1685 1690 1700 1711 1788 1819 1919 1914 1867 1804 1776
1969 1719 1710 1707 1711 1724 1784 1827 1936 1921 1853 1820 1778
1970 1731 1727 1723 1711 1727 1787 1817 1916 1900 1844 1795 1758
1971 1708 1693 1689 1685 1705 1761 1811 1898 1895 1816 1783 1744
1972 1697 1675 1682 1675 1690 1761 1785 1862 1860 1803 1747 1707
1973 1661 1654 1651 1641 1651 1705 1738 1811 1821 1786 1749 1711
1974 1666 1649 1661 1643 1659 1696 1722 1822 1828 1767 1707 1660
1975 1594 1571 1575 1572 1593 1643 1681 1780 1791 1742 1692 1655
1976 1619 1615 1605 1612 1637 1685 1728 1813 1817 1754 1710 1672
1977 1638 1632 1638 1645 1658 1717 1747 1829 1840 1765 1725 1698
1978 1665 1655 1668 1664 1669 1722 1749 1823 1830 1774 1746 1724
1979 1685 1666 1676 1666 1679 1728 1750 1829 1835 1782 1736 1706
> plot(BLSALLFOOD)

「Rによる時系列モデリング入門」に掲載の時系列解析を行う
パッケージTSSSを使用する。
> install.packages("TSSS")
パッケージを ‘C:/Users/○○/Documents/R/win-library/○○’ 中にインストールします
(‘lib’ が指定されていないため)
URL 'https://○○/TSSS_1.3.1.zip' を試しています
Content type 'application/zip' length 852282 bytes (832 KB)
downloaded 832 KB
package ‘TSSS’ successfully unpacked and MD5 sums checked
The downloaded binary packages are in
C:\Users\○○\AppData\Local\Temp\○○\downloaded_packages
> library(TSSS)
最新情報はhttps://jasp.ism.ac.jp/ism/TSSS/を参照のこと。