crosshyou

主にクロス表(分割表)分析をしようかなと思いはじめましたが、あまりクロス表の分析はできず。R言語の練習ブログになっています。

Real estate valuation data set の分析1 - データをR言語に取り込む

f:id:cross_hyou:20200628173948p:plain

今回は、上の画像、UCI Machine Learning Repositoryの中にあった、Real Estate valuation data setのデータを分析しようと思います。

URLは、

https://archive.ics.uci.edu/ml/datasets/Real+estate+valuation+data+set

です。

Citation requestが
Yeh, I. C., & Hsu, T. K. (2018). Building real estate valuation models with comparative approach through case-based reasoning. Applied Soft Computing, 65, 260-271.

とあったので記載しておきます。

台湾の台北市の不動産価格のデータです。

Excelファイルはこんな感じです。

f:id:cross_hyou:20200628174658p:plain

変数の説明は、

The inputs are as follows
X1=the transaction date (for example, 2013.250=2013 March, 2013.500=2013 June, etc.)
X2=the house age (unit: year)
X3=the distance to the nearest MRT station (unit: meter)
X4=the number of convenience stores in the living circle on foot (integer)
X5=the geographic coordinate, latitude. (unit: degree)
X6=the geographic coordinate, longitude. (unit: degree)

The output is as follow
Y= house price of unit area (10000 New Taiwan Dollar/Ping, where Ping is a local unit, 1 Ping = 3.3 meter squared)

とありました。X1からX6の6個の変数からY、不動産価格を回帰分析するのですね。

R言語のread.csv関数でデータを読み込みます。

f:id:cross_hyou:20200628175304p:plain

変数名が長いので、X1, X2と短くしましょう。

f:id:cross_hyou:20200628175623p:plain

summary関数でNAがあるか見てみましょう。

f:id:cross_hyou:20200628175806p:plain

NAはないようです。

今回は以上です。

 

東証の業種別空売りデータの分析6 - 前日比を空売り比率で回帰分析する。

 

www.crosshyou.info

 の続きです。

今回は前日比を規制有りの空売り比率と規制無しの空売り比率で回帰分析をしてみたいと思います。R言語のlm関数を使います。

規制無しの空売り比率と前日比の相関係数が、0.3965843ですので、この相関係数をどれだけ上回る回帰モデルになるか注目です。

f:id:cross_hyou:20200628085351j:plain

2乗項と交互作用項も取り入れたモデルを作ってみました。p-valueは、0.07795と、0.05よりも大きく有意なモデルでありません。

交互作用項を削除してみます。

f:id:cross_hyou:20200628085633j:plain

anova関数ではじめのモデル、lm1と交互作用項を削除したモデル、lm2を比較しています。p値は、0.7844と、0.05よりも大きいので、lm1とlm2では有意な違いはありません。

lm2を見てみます。

f:id:cross_hyou:20200628085920j:plain

規制有りを削除します。

f:id:cross_hyou:20200628090140j:plain

規制有りを削除しても有意な違いは無いようです。

lm3を見てみます。

f:id:cross_hyou:20200628090309j:plain

規制有りの2乗項を削除してみます。

f:id:cross_hyou:20200628090454j:plain

規制有りの2乗項を削除しても有意な違いはありません。

lm4を見てみます。

f:id:cross_hyou:20200628090630j:plain

規制無しの2乗項を削除しましょう。

f:id:cross_hyou:20200628090747j:plain

2乗項を削除しても有意な違いはありません。

lm5を見てみましょう。

f:id:cross_hyou:20200628091659j:plain

結局、残った説明変数は、規制無しだけでした。Multiple R-squaredは、0.1573です。

これの平方根が相関係数です。

f:id:cross_hyou:20200628091912j:plain

残差プロットを見てみましょう。

f:id:cross_hyou:20200628092110j:plain

f:id:cross_hyou:20200628092123j:plain

残差に特別なパターンは無いようです。

散布図に回帰直線を重ねてみます。

f:id:cross_hyou:20200628092356j:plain

f:id:cross_hyou:20200628092408j:plain

空売り比率が高いほど、前日比は大きくなる、という関係です。

今回は以上です。

 

東証の業種別空売りデータの分析5 - 空売り比率と前日比の相関をR言語のcor.test関数で調べる。

 

www.crosshyou.info

の続きです。

今回は、空売り比率と前日比の相関関係を調べてみます。

まずは、R言語のplot関数で散布図を描いてみます。

 

f:id:cross_hyou:20200627092641j:plain

f:id:cross_hyou:20200627092706j:plain

規制有りと前日比は相関なさそうで、規制有りと前日比は少し相関ありそうです。

cor.test関数で相関係数を調べてみます。

f:id:cross_hyou:20200627092936j:plain

規制有りと前日比の相関係数は、-0.2463711となりました。p-valueが、0.1669と、0.05よりも大きいので相関関係があるとは言えないです。95%信頼区間の相関係数は下限が、-0.5436937で上限が、0.1058946と、0を含んでいます。

規制無しとの相関係数はどうでしょうか?

f:id:cross_hyou:20200627093352j:plain

規制無しと前日比の相関係数は、0.3965843とわかりました。p-valueは、0.02231と、0.05よりも小さいので相関関係があると言っていいです。95%の信頼区間は上限が、0.06167197で、下限が、.065122796と、0を含みません。

規制無しと規制有りの相関関係も調べましょう。

f:id:cross_hyou:20200627093821j:plain

規制有りと規制無しの相関係数は、-0.3501658とわかりました。

p-valueは、0.045774と、0.05よりも小さいのでマイナス相関だとわかります。

95%の信頼区間は下限が、-0.619055045で、上限が、-0.007793716と、0を含みません。

以上をまとめると、

規制有りと前日比は相関関係があるとは言えない。

規制無しと前日比は正の相関関係がある。

規制有りと規制無しは負の相関関係がある。

となります。

今回は以上です。






 

東証の業種別空売りデータの分析4 - データが正規分布をしているかどうか。skewとkurtosisの観点から。

 

www.crosshyou.infoの続きです。

今回は、規制有り、規制無し、前日比の各データの分布が正規分布かどうかを調べます。

skewとkurtosisを計算してこの値が有意に0と違っていれば正規分布では無いとわかります。

skewは分子は、 m3 = sum((y - ybar)^3) / n で、分母が s3 = sqrt(variance)^3 です。

skewを計算する関数を定義します。

f:id:cross_hyou:20200621094427j:plain

規制有りのskewを計算してみます。

f:id:cross_hyou:20200621094704j:plain

規制有りのskewは-0.723です。値がマイナスということは、分布の形状が左側の裾野が広いということです。

こうして求めたskewをskewの標準誤差、sqrt(6/n)で割り算します。

f:id:cross_hyou:20200621095139j:plain

この -1.697812が有意に0と違うかどうかをpt関数で計算します。自由度は、平均値とvarianceを使ってskewを計算しているので、データの数から2を引いた値になります。

f:id:cross_hyou:20200621095426j:plain

0.04978081と0.05よりも小さいので、規制有りの分布は正規分布とは言えません。

同じ作業を規制無しでもやってみます。

f:id:cross_hyou:20200621095906j:plain

規制無しのskewはプラスの値です。分布の形状が右側の裾野が広いということですね。

このskew規制無しをsqrt(6/n)で割ります。

f:id:cross_hyou:20200621100129j:plain

4.185074を検定します。

f:id:cross_hyou:20200621100318j:plain

0.0001089と0.05よりも小さいですので、規制無しも正規分布とは言えないです。

前日比はどうでしょうか?

f:id:cross_hyou:20200621100517j:plain

前日比は前の二つと比べると、0に近いですね。sqrt(6/n)で割り算します。

f:id:cross_hyou:20200621100748j:plain

pt関数で検定します。

f:id:cross_hyou:20200621100920j:plain

0.0247と0.05よりも大きいので、前日比は正規分布ではないとは言えないです。

kurtosisも計算してみましょう。

kurtosisは、m4 = sum((y - ybar)^4)/n, s4 = variance^2 とすると、

m4 / s4 - 3 となります。

kurtosisを計算する関数を作ります。

f:id:cross_hyou:20200621101438j:plain

前日比のkurtosisを計算します。

f:id:cross_hyou:20200621101610j:plain

kurtosisは正規分布だと0で、プラスの値だと尖っていて、マイナスの値だと平坦になります。前日比はプラスの値なので、少し尖っているのですね。

このkurtosisをkurtosisの標準誤差のsqrt(24/n)で割ります。

f:id:cross_hyou:20200621102052j:plain

0.1779447をpt関数でt検定します。

f:id:cross_hyou:20200621102221j:plain

0.4299と0.05よりも大きいですので、kurtosisが0ではないとは言えないです。

skew, kurtosisから見ると、前日比は正規分布ではないとは言えないです。

今回は以上です。

今回もMichael J. Crawley著 「Statistics An introduction using R」を参考にしました。

 

 

 

東証の業種別空売りデータの分析3 - R言語でVarianceを調べる。F test、標準誤差、信頼区間、Bootstrap

 

www.crosshyou.info

 の続きです。

今回は各データのVariance(分散)を調べてみます。

まずは、規制有りのVarianceと規制無しのVarianceを調べてみます。

f:id:cross_hyou:20200620091549j:plain

var関数でVarianceはわかります。規制有りのVarianceは33.4、規制無しのVarianceは4.87です。かなり違いますね。この違いが統計的に有意に違うのか、F testをします。

はじめに、両者のVarianceの比を算出します。

f:id:cross_hyou:20200620091824j:plain

6.86です。両者のVarianceが同じだったら、この値は1になるはずです。なので、本当は1になるはずのこのF_Ratioが6.86になる確率をpf関数で求めます。

f:id:cross_hyou:20200620092042j:plain

確率は4.244034e-07です。0.0000004244034です。0.000042%です。確率的にはとっても低いですから、規制有りのVarianceと規制無しのVarianceは違いがあると言えます。

var.test関数でいままでの作業を1行のコードで実行できます。

f:id:cross_hyou:20200620092702j:plain

p-valueの値、ratio of variancesの値が一致しています。

つぎに、前日比のVarianceを調べましょう。

f:id:cross_hyou:20200620093015j:plain

0.295です。

このVarianceは何に使うのでしょうか?平均値がどのくらい確からしいかを見る標準誤差と信頼区間を計算するのに使います。

標準誤差(Standard Error)は、sqrt(Variance / n)で計算できます。nはデータの数です。

前日比の標準誤差を計算してみましょう。

f:id:cross_hyou:20200620093541j:plain

標準誤差は0.0945873とわかりました。

前日比の平均値も計算しましょう。

f:id:cross_hyou:20200620093904j:plain

この平均値を標準誤差を使って表現すると、

前日比の平均値は、-1.320909 ± 0.09454873(1 s.e., n = 33) と表現できます。

グラフにしてみましょう。

f:id:cross_hyou:20200620094504j:plain

f:id:cross_hyou:20200620094518j:plain

赤い水平線が平均値で、上下の青い水平線が ± 1標準誤差の水準です。

続いて、信頼区間を計算します。

信頼区間は、t-value * standard error です。

95%の信頼区間ならば、t(α = 0.025, d.f.) x 標準誤差 です。

α = 0.025のt-valueはqt(0.975, d.f.)で計算できます。

f:id:cross_hyou:20200620095151j:plain

平均値を信頼区間を使って表現すると、

前日比の平均値は、-1.320909 ± 0.1925895(95% CI, n = 33) と表現できます。

これもplot関数、abline関数で視覚化しましょう。

f:id:cross_hyou:20200620095900j:plain

f:id:cross_hyou:20200620095919j:plain

真の平均値は95%の確率で緑の水平線の中に存在します。

 

信頼区間の計算方法には、まったく違うBootstrapという方法があります。

前日比の33個のデータからある個数のデータを取り出して平均値を計算します。

これを1万回など多くの回数を繰り返して、その1万個の平均値の2.5パーセンタイル、97.5パーセンタイルの値を信頼区間にする方法です。

やってみましょう。

f:id:cross_hyou:20200620101050j:plain

33個の前日比の中から重複有りで30個のデータを取り出して平均値を計算します。これを1万回繰り返しました。1万回の平均値の平均値は-1.322022となりました。33個の前日比の平均値は-1.3220909なのでかなり近いですね。

hist関数でaverageの分布形状をみてみます。

f:id:cross_hyou:20200620101456j:plain

f:id:cross_hyou:20200620101510j:plain

2.5パーセンタイル、97.5パーセンタイルの値を調べるのはquantile関数です。

f:id:cross_hyou:20200620101952j:plain

標準誤差とqt関数から計算した信頼区間と比較してみましょう。

f:id:cross_hyou:20200620102939j:plain

f:id:cross_hyou:20200620102950j:plain

ほとんど同じですね。

実際の値も確認します。

f:id:cross_hyou:20200620103411j:plain

f:id:cross_hyou:20200620103628j:plain

Bootstrapで求めた信頼区間のほうが少し範囲が広いですね。

今回は以上です。

今回もMichael J. Crawley著 Statistics An introduction using R を参考にしました。

 

 

 

 

東証の業種別空売りデータの分析2 - R言語で算術平均、幾何平均、調和平均、中央値を計算する。

 

www.crosshyou.infoの続きです。

今回は、Michael J. Crawley著 Statistics An introduction using Rの第3章、Central Tendencyを参考にして分析の練習をしてみます。

まずは、hist関数でヒストグラムを描きます。

f:id:cross_hyou:20200614140831j:plain

f:id:cross_hyou:20200614140845j:plain

規制有りは左の裾野が広く、規制無しと前日比は右の裾野が広い分布です。

平均値、中央値もヒストグラムに付け足しましょう。

f:id:cross_hyou:20200614141419j:plain

f:id:cross_hyou:20200614141435j:plain

赤が平均値、青が中央値を表す垂線です。

mean関数が算術平均、median関数が中央値です。

その他、幾何平均(geometric mean)と調和平均(harmonic mean)というのがあります。

これらのCentral Tendencyを計算する関数を作ります。

f:id:cross_hyou:20200614150508j:plain

if構文は

if(条件式) {

条件式がTRUEの時に実行するコマンド

} else {

条件式がFASLEの時に実行するコマンド

}
という構文です。

こうして作成したcentral_tendency関数を実行してみます。

f:id:cross_hyou:20200614144614j:plain

できました。

算術平均は、mean関数で計算できます。

幾何平均は、exp(mean(log(x)))で計算できます。

調和平均は、1/mean(1/x)で計算できます。

中央値は、median関数で計算できます。
今回は以上です。

今回の参考図書は、

 

でした。
 

東証の業種別空売り集計データの分析1 - R言語でデータを読み込み基本統計量を出す。

今回は東証の業種別空売りデータを分析しようと思います。

空売り集計 | 日本取引所グループ

このサイトからPDFファイルをダウンロードしました。

f:id:cross_hyou:20200613170413j:plain

こういうデータです。

それと、

リアルタイム株価指数値一覧 | 日本取引所グループ

このサイトの業種別指数の前日比(%)のデータを使います。

f:id:cross_hyou:20200613170525j:plain

この二つをまとめて、

f:id:cross_hyou:20200613170607j:plain

こういうCSVファイルにしました。

このデータを読み込んで、前日比は空売り比率と関連があるのか無いのか調べようと思います。

R言語のread.csv関数でファイルを読み込みます。

f:id:cross_hyou:20200613171025j:plain

str関数で読み込んだデータの構造確認をしました。

データフレームとして読み込まれ、33のobservationsと4のvariablesがあります。

summary関数で平均値などを確認します。

f:id:cross_hyou:20200613171324j:plain

規制有りの空売りの平均は35.05%です。規制無しの空売りの平均は7.615%です。前日比の平均は-1.321%です。

var関数で分散、sd関数で標準偏差を出します。apply関数を使って効率よくやります。

f:id:cross_hyou:20200613171652j:plain

分散や標準偏差はもともののデータの水準に左右されるので、規制有り、規制無し、前日比のなかでどれが一番バラツキがあるか、わかりません。標準偏差を平均値で割った変動係数(CV)を計算します。

f:id:cross_hyou:20200613171937j:plain

規制有りが一番バラツキが小さく、前日比が一番バラツキが大きいことがわかります。

今回は以上です。