正規乱数から相関のあるデータの生成
計量時系列分析で正規乱数から相関のあるデータを生成してみようというやつがあったので、遊んでみる。平均0、分散1の正規分布に従う乱数(正規乱数)のベクトルを2つ用意。このままでは2つのベクトルは独立なので、無相関。
x<-rnorm(1000) y<-rnorm(1000) > cor(x,y) [1] 0.02898553
そこで以下のように変数変換を施す。
このような変換を施すと、相関係数を持つようなデータを生成できたことになる。例えば
とすると、理論値では
となる。本当になるかを実験してみよう。
a<-0.75 u=x+a*y v=a*x+y cor(u,v) [1] 0.9593697
検定とかはまんどくさなのでやらないけど、大体よさげな感じがしますね。データ解析の時に散々「平均とか相関係数だけ見て、分布とか見ないのは危ない」と言われたので一応散布図を取ってみた。
疑った私がバカでした。。。
理論値の求めかた
統計分かってる人には簡単過ぎることだとは思うけど、自分のメモ代わりに残しておくか。なお、最後のほうとか適当に書いてるので、これもとに何かやって失敗しても責任は負いません。とりあえず次に、
なお、
以上より、相関係数を求めると
となり、欲しかった相関係数の理論値が計算できた。
この辺の話はここが詳しいかも。
定常時系列データ
ついでにもういっちょ。定常時系列データの作り方も習ったので、Rで生成する関数書いてみた。teijyou<-function(b=0.5,n=100){ x<-rnorm(1) for(i in 2:n){ x[i]<-b*x[i-1]+rnorm(1) } return(x) }
定常時系列っぽい感じになってます。
ちなみにこっちで相関係数を出してみたところ、ほぼ0でした。定常時系列データで相関係数0.9とか作れるんでしょうか?