一行でできるプログラムって、あまりにも簡単すぎて何をやっているのか忘れてしまう方もいるかと思ったので、少々くどいですが載せておきました。上記のように、たった一行で計算できてしまうんですが、少し時間をかけて計算してみます。いろいろな情報が詰め込まれています。予測とは直接関係がないので、興味のない方は無理して”解読”する必要はありません。いう関数で表示できます。これを使って検定してみます。0.000180271ほかにもいろいろとやり方はあるでしょうが、その一例です。何となく雰囲気をつかんでいただければ、と思います。関数を使うと最適なグネグネ度をGCVを使って勝手に選んできてくれます。Rにおまかせだと何度も出てきた「グネグネ度」のイメージがしにくいかなと思うので、ちょっと丁寧に見てみます。いう追加のパラメタを指定してやることで手動でグネグネ度を設定できます。GCVはCVと似たようなものなので、小さければ小さいほど予測精度は高い良いモデルだとみなされます。グネ度の時のspとその時のGCVも合わせてプロットしました。1:length(sp)){g.m<-gam(Ozone~s(Temp),sp=sp[i],data=airquality)GCV[i]<-g.m$gcv.ubre}plot(GCV~sp,main="GCVとグネグネ度",cex.main=2)points(gam.model$sp,gam.model$gcv.ubre,col=2,pch=18,cex=2)GCVがもっとも小さいグネグネ度を選んでくれていることがわかります。グネグネ度が違うとどんなモデルが出来上がるんでしょうか。グラフを描いて比較してみます。順番でグネグネ度が大きくなっていっています(spが小さくなるとグネグネします)。きく異なっていることが見て取れます。ここで重要なのは、グネグネ度が小さい場合(左上)は、実質、単に直線を引っ張っただけになることです。予測結果と線形回帰の予測結果は一致するということ。グネグネしない平滑化スプラインです。xlab="線形回帰の予測結果",ylab="グネグネ度最小スプラインの予測結果",cex.lab=1.2)abline(a=0,b=1,col=2)赤い線は切片0、傾き1の直線です。この線上に乗っていることから、両者の予測結果は完全に一致していることがわかります。モデルじゃないだろう』って怒られた。これは何の解析をやっているの?」と聞かれたことがあります。(平滑化スプラインの重回帰バージョン)です。GCVで最適化された推定結果が直線になっちゃったというだけですね。おいて損はないと思います。いえ、GCVの考え方と検定はちょっと違うので、別の方法で確かめておいたほうが無難だとは思いますが。グネグネ度最小で得られた線形回帰の結果からは傾きの値がいくつなのか知ることは難しいです。取り除いてやりましょう。簡単に表示できました。gam()を使ったときplot()は計算結果の表示に使われてしまうので、モデルチェックができません。ようにして表示させます。gam.check(gam.model)これをみると、左上のQ-Qプロットが直線の上にのっていないし、残差も変な形をしています。今回扱う内容を超えるので理解できなくても問題ないですが、これは今回予測の対象にしたOzoneが実は正規分布には従っていなかったことが原因です。Ozoneは0以下の値を取らないため、ガンマ分布などを疑う必要があります(この内容については別のページを設けて説明する予定)。今回は、あんまりよろしくない結果となってしまったものの、そのまま続けていきます。薄板平滑化スプラインと平滑化スプラインANOVAさっきは温度とオゾンの関係という一対一の関係を表したモデルでした。今度は風と温度両方からオゾンを予測してみます。組み合わせ(交互作用)を加味した予測を行います。それが薄板平滑化スプラインです。以下のプログラムできれいなグラフが描けます。gam2<-gam(Ozone~s(Wind,Temp),data=airquality)vis.gam(gam2,color="cm",theta=45)s()の中に二つの変数をいれればモデルはすぐに作れます。それがvis.gam()。thetaは横方向への回転です。今回は45度回転させました。se=Tを指定すれば今までのグラフのように信頼区間を表示してくれます、が、見づらいので省略しました。等高線を描くこともできます。立体のほうがかっこいいけれど、じつは地味な等高線のほうが可読性高かったりするかも。type="contour"と追加で設定するだけです。vis.gam(gam2,color="cm",plot.type="contour")風が弱くてかつ温度が80くらいの時にオゾンが高いことがわかります。説明変数がたくさんあるときも、こんなグラフを描くことはできます。図は省略しますが、たとえばこんな感じ。くくってやるのがコツ。このモデルのように、「薄板平滑化スプライン+普通のスプライン」というモデルのことを(広義の)平滑化スプラインANOVAと呼びます。加法モデルによる予測〜重回帰との比較いよいよ本番。説明変数を増やした加法モデルを用いて、オゾンを予測してみます。ものだけを用いる必要があります。今回は重回帰の時のようにAICが最も小さいモデルを採択することにします。モデルを作る際にGCVとAICと二つも指標を使うのでややこしいんですが、まず変数を入れたときにその変数のグネグネ度を決めるのがGCV。やって最適グネグネ度が決められたうえで「その変数って本当に必要か?」を明らかにするのがAICです。数を選択するためのもの」であるというふうに、明確な使い分けがあるように書かれていますが、これは私の誤りです。されるわけではなく、平滑化パラメータをAICで決めることも可能です。今回は加法モデルの予測精度と重回帰の予測精度を比較します。予測精度を比較するとき非常に重要なことがあります。ときに使うデータは別々にするということです。データへの当てはまりは確実に「複雑なモデル」のほうがよくなるからです。データ点とのかい離はほとんどなくなり、当てはまりはものすごくよくなります。予測の目的は、当然、「まだ起きていないことを予測すること」です。