授業前に掲示した版
ビールのデータを楽しむ。
beer.1 = read.table("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_001.csv", sep=",", header=TRUE, fileEncoding="UTF-8") # データを読み込む beer.1 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_001.csv", encoding='cp932')) plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) # データを眺める plot(beer.1$東京) plot(beer.1$東京, type="b") plot(beer.1$東京, type="b", lty=2) plot(beer.1$東京, type="b", lty=3) plot(beer.1$東京, type="b", lty=3, pch=3) plot(beer.1$東京, type="b", lty=3, pch=20) plot(beer.1$ビール) plot(beer.1$ビール, type="b") plot(beer.1$ビール, type="b", lty=2) plot(beer.1$ビール, type="b", lty=3) plot(beer.1$ビール, type="b", lty=3, pch=3) plot(beer.1$ビール, type="b", lty=3, pch=20) hist(beer.1$東京) hist(beer.1$東京, breaks=10) hist(beer.1$東京, breaks=8) hist(beer.1$東京, breaks=7) hist(beer.1$ビール) hist(beer.1$ビール, breaks=10) hist(beer.1$ビール, breaks=15) hist(beer.1$ビール, breaks=10) boxplot(beer.1$ビール, beer.1$東京) # データを眺める plot(beer.1$東京, beer.1$ビール) plot(beer.1$東京, beer.1$ビール, pch=20) plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1") plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b") plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b", lty=3) # 左上、なんかおかしい # 月という変数を作ってみる beer.1$月 = c(rep(c(1:12),6),c(1:4)) plot(beer.1$月, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b", lty=3) # 先ほどの左上の点が・・・ # でも今回は、この方向にモデルを頑張る話ではない # 気温で売り上げを説明しようとすると、これは説明できない # 元の話(回帰分析)に立ち返る # 関数を当てはめる lines(c(4:31), 866.168+244.7*tan((((c(4:31) - 3)/32) - 1/2) * pi/2), col="red") lines(c(4:31), 866.168+244.7*tan((((c(4:31) - 3)/32) - 1/2) * pi/2)), col="red") lines(c(5:30), 912.8+224.6*tan((((c(5:30) - 4)/31) - 1/2) * pi/2), col="red") plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) lm(ビール~東京, data=beer.1) lines(c(0,40), c(656.93, 656.93+12.99*40)) lm(ビール~tan((((東京-4.4)/25)-1/2)*pi/2), data=beer.1) lines(c(5:30), 877.7+188.0*tan((((c(5:30) - 4.4)/25) - 1/2) * pi/2), col="red") lm(ビール~sinh((((東京-4.4)/25)-1/2)*pi), data=beer.1) lines(c(5:30), 878.34+86.75*sinh((((c(5:30) - 4.4)/25) - 1/2) * pi), col="red") install.packages("gam") library("gam") gam(ビール~東京, data=beer.1) plot(gam(ビール~東京, data=beer.1)) summary(gam(ビール~東京, data=beer.1)) gam(ビール~s(東京), data=beer.1) plot(gam(ビール~s(東京), data=beer.1)) beer.1.gam = gam(ビール~s(東京), data=beer.1) plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) points(beer.1$東京, predict(beer.1.gam),pch=3,col="red") # 2乗と3乗の項を加えたい lm(ビール~東京+東京*東京+東京*東京*東京, data=beer.1) # 失敗 # 2乗と3乗の変数を作る beer.1$東京2 = (beer.1$東京)^2 beer.1$東京3 = (beer.1$東京)^3 lm(ビール~東京+東京2+東京3, data=beer.1) lines(c(0:40), c(-328.1067+257.3598*c(0:40)-16.7973*c(0:40)^2+0.3397*c(0:40)^3), col="blue") # これがけっこうよさそう # 何をしたかったんだっけ? # 回帰分析 # 誤差を忘れてる # 誤差が正規分布に従うモデル # 誤差の代わりに残差を調べる beer.1.lm3 = lm(ビール~東京+東京2+東京3, data=beer.1) plot(beer.1.lm3) plot(beer.1$ビール, predict(beer.1.lm3)) plot(beer.1$ビール, predict(beer.1.lm3), xlab="実測値", ylab="当てはめ値") plot(fitted(beer.1.lm3), residuals(beer.1.lm3), xlab="当てはめ値", ylab="残差") # 当てはめ値+残差=実測値 # 上の方に外れ値が残ってる # 実は・・・ library(vars) install.packages("vars") library(vars) VAR(cbind(beer.1$ビール, beer.1$東京)) VAR(cbind(beer.1$ビール, beer.1$東京), p=2) beer.1.var = VAR(cbind(beer.1$ビール, beer.1$東京), p=2, type="const") coef(beer.1.var) plot(beer.1.var) beer.1.var = VAR(cbind(beer.1$ビール, beer.1$東京), p=2, type="const", lag.max=12) plot(beer.1.var)
元の趣旨に立ち返って回帰分析を進める。
beer.2 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_002.csv", encoding='cp932')) beer.2.lm = lm(ビール~東京+京都, data=beer.2) summary(beer.2.lm) plot(beer.2.lm) beer.1.lm = lm(ビール~東京, data=beer.2) summary(beer.1.lm) # よくなってなかった # もう12月だけダミー変数を入れて調整してしまう beer.3 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_003.csv", encoding='cp932')) beer.3 names(beer.3) beer.3.lm = lm(ビール~東京+X12月, data=beer.3) summary(beer.3.lm) plot(beer.3.lm) # よくなった 12月だけ異常なことを考慮したモデル # 最後、月ダミー beer.4 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_004.csv", encoding='cp932')) lbeer.4.lm = lm(ビール~東京+京都+東京1月後+時間+X1月+X2月+X3月+X4月+X5月+X6月+X7月+X8月+X9月+X10月+X11月+X12月+時間,data=beer.4) summary(beer.4.lm) plot(beer.4.lm)
これをレポートにまとめてみてください。
授業中に修正した版
# データを読み込む beer.1 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_001.csv", encoding='cp932')) plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) # データを眺める plot(beer.1$東京) beer.1$月数 = c(1:76) plot(beer.1$月数, beer.1$東京) plot(beer.1$月数, beer.1$東京, type="b") plot(beer.1$月数, beer.1$東京, type="b", lty=2) plot(beer.1$月数, beer.1$東京, type="b", lty=3) plot(beer.1$月数, beer.1$東京, type="b", lty=3, pch=3) plot(beer.1$月数, beer.1$東京, type="b", lty=3, pch=20) plot(beer.1$ビール) plot(beer.1$月数, beer.1$ビール, type="b") plot(beer.1$月数, beer.1$ビール, type="b", lty=3) plot(beer.1$月数, beer.1$ビール, type="b", lty=3, pch=20) hist(beer.1$東京) hist(beer.1$東京, breaks=10) hist(beer.1$東京, breaks=8) hist(beer.1$東京, breaks=7) hist(beer.1$東京, breaks=10) hist(beer.1$ビール) hist(beer.1$ビール, breaks=10) hist(beer.1$ビール, breaks=15) hist(beer.1$ビール, breaks=10) boxplot(beer.1$ビール) boxplot(beer.1$東京) # データを眺める plot(beer.1$東京, beer.1$ビール) plot(beer.1$東京, beer.1$ビール, pch=20) plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1") plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b") plot(beer.1$東京, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b", lty=3) # 左上、なんかおかしい # 月という変数を作ってみる beer.1$月 = c(rep(c(1:12),6),c(1:4)) beer.1$月 = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4) plot(beer.1$月, beer.1$ビール, pch=20, xlab="東京の月平均気温", ylab="1ヶ月のビールの売上", main="beer.1", type="b", lty=3) # 先ほどの左上の点が・・・ # でも今回は、この方向にモデルを頑張る話ではない # 気温で売り上げを説明しようとすると、これは説明できない # 元の話(回帰分析)に立ち返る # 関数を当てはめる plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) lm(ビール~東京, data=beer.1) summary(lm(ビール~東京, data=beer.1)) lines(c(0,40), c(656.931, 656.93+12.992*40)) lm(ビール~tan((((東京-4.4)/25)-1/2)*pi/2), data=beer.1) lines(c(5:30), 877.7+188.0*tan((((c(5:30) - 4.4)/25) - 1/2) * pi/2), col="red") lm(ビール~sinh((((東京-4.4)/25)-1/2)*pi), data=beer.1) lines(c(5:30), 878.34+86.75*sinh((((c(5:30) - 4.4)/25) - 1/2) * pi), col="blue") legend("bottomright", legend=c("直線", "tan", "sinh"), col=c("black", "red", "blue"), lty=1) install.packages("gam") library("gam") gam(ビール~東京, data=beer.1) plot(gam(ビール~東京, data=beer.1)) summary(gam(ビール~東京, data=beer.1)) gam(ビール~s(東京), data=beer.1) plot(gam(ビール~s(東京), data=beer.1)) beer.1.gam = gam(ビール~s(東京), data=beer.1) plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) points(beer.1$東京, predict(beer.1.gam),pch=3,col="green") legend("bottomright", legend=c("直線", "tan", "sinh", "gam"), col=c("black", "red", "blue", "green"), lty=1) # 2乗と3乗の項を加えたい lm(ビール~東京+東京*東京+東京*東京*東京, data=beer.1) lm(ビール~東京, data=beer.1) # 失敗 # Rのモデル式の掛け算記号*は、掛け算の意味ではない # 2乗と3乗の変数を作る beer.1$東京2 = (beer.1$東京)^2 beer.1$東京3 = (beer.1$東京)^3 lm(ビール~東京+東京2+東京3, data=beer.1) lines(c(0:40), c(-328.1067+257.3598*c(0:40)-16.7973*c(0:40)^2+0.3397*c(0:40)^3), col="orange") # これがけっこうよさそう legend("bottomright", legend=c("直線", "tan", "sinh", "gam", "3次関数"), col=c("black", "red", "blue", "green", "orange"), lty=1) # 何をしたかったんだっけ? # 回帰分析 # 誤差を忘れてる # 誤差が正規分布に従うモデル # 誤差の代わりに残差を調べる beer.1.lm3 = lm(ビール~東京+東京2+東京3, data=beer.1) plot(beer.1.lm3) plot(beer.1$ビール, predict(beer.1.lm3)) plot(beer.1$ビール, predict(beer.1.lm3), xlab="実測値", ylab="当てはめ値") plot(fitted(beer.1.lm3), residuals(beer.1.lm3), xlab="当てはめ値", ylab="残差") # 当てはめ値+残差=実測値 # 上の方に外れ値が残ってる # 実は・・・ library(vars) install.packages("vars") library(vars) VAR(cbind(beer.1$ビール, beer.1$東京)) VAR(cbind(beer.1$ビール, beer.1$東京), p=2) beer.1.var = VAR(cbind(beer.1$ビール, beer.1$東京), p=2, type="const") coef(beer.1.var) plot(beer.1.var) beer.1.var = VAR(cbind(beer.1$ビール, beer.1$東京), p=2, type="const", lag.max=12) plot(beer.1.var) beer.2 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_002.csv", encoding='cp932')) beer.2.lm = lm(ビール~東京+京都, data=beer.2) summary(beer.2.lm) plot(beer.2.lm) beer.1.lm = lm(ビール~東京, data=beer.2) summary(beer.1.lm) # よくなってなかった # もう12月だけダミー変数を入れて調整してしまう beer.3 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_003.csv", encoding='cp932')) beer.3 names(beer.3) beer.3.lm = lm(ビール~東京+X12月, data=beer.3) summary(beer.3.lm) plot(beer.3.lm) # よくなった 12月だけ異常なことを考慮したモデル plot(beer.1$東京, beer.1$ビール, main="データ:beer.1", xlab="東京", ylab="ビール", pch=20) points(beer.3$東京, predict(beer.3.lm),pch=3,col="green") # 最後、月ダミー beer.4 = read.csv(file("http://ds.k.kyoto-u.ac.jp/e-learning_files/data_analysis_basic/jma_004.csv", encoding='cp932')) beer.4.lm = lm(ビール~東京+京都+東京1月後+時間+X1月+X2月+X3月+X4月+X5月+X6月+X7月+X8月+X9月+X10月+X11月+X12月+時間,data=beer.4) summary(beer.4.lm) points(beer.4$東京, predict(beer.4.lm),pch=4,col="orange")