このページについて |
概要:このページでは、統計言語Rを使う上で有益なプログラムを蓄積します。ご使用は自己責任で。
(今後、随時updateしていく予定)
親ページ:このページの親ページはRです。
目次 |
xに株価系列を入れると対数階差で近似した収益率を返してくれる。
diff(log(x))
以下でも同じ結果を返す。
#収益率 #yの増加率diff(log(y))で近似可能。 profitrate <- function(x) { z <- log(x[-1])-log(x[-length(x)]) z }
#歪度 skew <- function(x){ z1 <- mean(z(x)^3) z1 }
#尖度 kurt <- function(x){ z2 <- mean(z(x)^4) z2 }
#異常値の数(標準偏差の±2 倍、± 3 倍、± 4 倍を超えた標本数)) abnormal.number2 <- function(x){ z <- length(x[x>2*sd(x) | x< -2*sd(x)]) z } abnormal.number3 <- function(x){ z <- length(x[x>3*sd(x) | x< -3*sd(x)]) z } abnormal.number4 <- function(x){ z <- length(x[x>4*sd(x) | x< -4*sd(x)]) z }
上記を一般化すれば、以下となる。
#異常値の数(標準偏差の±k 倍を超えた標本数) abnormal.number <- function(x,k){ z <- length(x[x>k*sd(x) | x< -k*sd(x)]) z }
#標本分散 sample.variance<-function(a) var(a)*(length(a)-1)/length(a) #以下でも同じ。 #sample2.variance<-function(x) mean(x^2)-(mean(x))^2 #標本共分散 sample.covariance<-function(x,y) mean(x*y)-mean(x)*mean(y)
#相関係数 cor(x,y)という組み込み関数があるが、一応練習も兼ねて作成。 sugi.soukan<-function(x,y){ sample.covariance<-mean(x*y)-mean(x)*mean(y) #標本共分散を定義 variance1<-function(a) var(a)*(length(a)-1)/length(a) #標本分散を定義 #xの標準偏差を求める x1<-variance1(x) sdx<-sqrt(x1) #yの標準偏差を求める y1<-variance1(y) sdy<-sqrt(y1) #最後の相関係数を計算 soukan<-sample.covariance/(sdx*sdy) soukan }
###################################################### # 基本統計量 ###################################################### #xに1変量株価データ(つまりベクトル)を入れると収益率の基本統計量を返してくれるプログラム。 sugi.basic<-function(x){ x1<-diff(log(x)) #まずは対数階差をとって収益率データに変換 variance1<-function(a) var(a)*(length(a)-1)/length(a) #標本分散を定義 sdx<-sqrt(variance1(x1)) #標本標準偏差を定義 #異常値の数を返すプログラムを定義 abnormal.number <- function(p,k){ z <- length(p[p>k*sd(p) | p< -k*sd(p)]) z } T<-length(x1) R<-mean(x1) x2<-(x1-R)/sdx #x2を標準化 s<-mean(x2^3) #歪度 k<-mean(x2^4) #尖度 max<-max(x1) min<-min(x1) a2<-abnormal.number(x1,2) a3<-abnormal.number(x1,3) a4<-abnormal.number(x1,4) #ここまで計算した基本統計量をまとめて返す。 return(list ("T"=T,"R"=R,"SD"=sdx,"skew"=s,"kurt"=k,"max"=max,"min"=min,"a2"=a2,"a3"=a3,"a4" =a4)) }