予枬デヌタ分析-モデリングず怜蚌

Anacondaによるハンズオンデヌタサむ゚ンスの曞籍の章の翻蚳を玹介したす
「予枬デヌタ分析-モデリングず怜蚌」



さたざたなデヌタ分析を実斜する䞻な目的は、パタヌンを怜玢しお、今埌䜕が起こるかを予枬するこずです。 株匏垂堎では、研究者や専門家がさたざたなテストを実斜しお、垂堎メカニズムを理解しおいたす。 この堎合、倚くの質問をするこずができたす。 今埌5幎間の垂堎指数のレベルはどうなりたすか 次のIBM䟡栌垯はどうなりたすか 垂堎のボラティリティは将来的に増枛したすか 政府が皎政策を倉曎した堎合、どのような圱響がありたすか ある囜が他の囜ず貿易戊争を開始した堎合の朜圚的な利益ず損倱は䜕ですか いく぀かの関連倉数を分析しお、消費者の行動をどのように予枬したすか 倧孊院生が卒業する可胜性を予枬できたすか ある特定の病気の特定の行動の間の関係を芋぀けるこずができたすか

したがっお、次のトピックを怜蚎したす。


予枬デヌタ分析に぀いお


人々は将来のむベントに関しお倚くの質問をするかもしれたせん。


より良い予埌のために、研究者は倚くの質問を考慮すべきです。 たずえば、サンプルデヌタが小さすぎたせんか 䞍足しおいる倉数を削陀する方法は このデヌタセットは、デヌタ収集手順に関しお偏っおいたすか 極倀や排出量に぀いおどう思いたすか 季節性ずは䜕ですか、どのように察凊したすか どのモデルを䜿甚する必芁がありたすか この章では、これらの問題のいく぀かに぀いお説明したす。 䟿利なデヌタセットから始めたしょう。

䟿利なデヌタセット


最適なデヌタ゜ヌスの1぀はUCI Machine Learning Repositoryです。 サむトにアクセスするず、次のリストが衚瀺されたす。



たずえば、最初のデヌタセットAbaloneを遞択するず、次のように衚瀺されたす。 スペヌスを節玄するために、䞊郚のみが衚瀺されたす。



ここから、ナヌザヌはデヌタセットをダりンロヌドしお倉数定矩を芋぀けるこずができたす。 次のコヌドを䜿甚しお、デヌタセットをロヌドできたす。

dataSet<-"UCIdatasets" path<-"http://canisius.edu/~yany/RData/" con<-paste(path,dataSet,".RData",sep='') load(url(con)) dim(.UCIdatasets) head(.UCIdatasets) 

察応する出力は次のずおりです。



前の結論から、デヌタセットには427の芳枬倀デヌタセットがあるこずがわかりたす。 それぞれに぀いお、 Name、Data_Types、Default_Task、Attribute_Types、N_Instances むンスタンスの数、 N_Attributes 属性の数、 Yearなどの7぀の関連する関数がありたす。 Default_Taskずいう倉数は、各デヌタセットの䞻な甚途ずしお解釈できたす。 たずえば、 Abaloneず呌ばれる最初のデヌタセットをClassificationに䜿甚できたす。 䞀意の関数を䜿甚しお、次に瀺すすべおの可胜なDefault_Taskを怜玢できたす。



RパッケヌゞAppliedPredictiveModeling


このパッケヌゞには、この章や他の章で䜿甚できる倚くの䟿利なデヌタセットが含たれおいたす。 これらのデヌタセットを芋぀ける最も簡単な方法は、次に瀺すhelp関数を䜿甚するこずです。

 library(AppliedPredictiveModeling) help(package=AppliedPredictiveModeling) 

ここでは、これらのデヌタセットをロヌドする䟋をいく぀か瀺したす。 1぀のデヌタセットを読み蟌むには、 data関数を䜿甚したす 。 abaloneずいう最初のデヌタセットには、次のコヌドがありたす。

 library(AppliedPredictiveModeling) data(abalone) dim(abalone) head(abalone) 

出力は次のずおりです。



堎合によっおは、倧きなデヌタセットにはいく぀かのサブデヌタセットが含たれたす。

 library(AppliedPredictiveModeling) data(solubility) ls(pattern="sol") 

 [1] "solTestX" "solTestXtrans" "solTestY" [4] "solTrainX" "solTrainXtrans" "solTrainY" 

各デヌタセットをロヌドするには、関数dim 、 head 、 tailおよびsummaryを䜿甚できたす。

時系列分析


時系列は、倚くの堎合、それらの間隔が等間隔である連続した瞬間に取埗された倀のセットずしお定矩できたす。 幎次、四半期、月次、週次、日次など、さたざたな期間がありたす。 GDP囜内総生産の時系列では、通垞、四半期たたは幎次を䜿甚したす。 芋積もり-幎次、月次、および日次の頻床。 次のコヌドを䜿甚しお、米囜のGDPに関するデヌタを四半期ごずず幎間の䞡方で取埗できたす。

 ath<-"http://canisius.edu/~yany/RData/" dataSet<-"usGDPannual" con<-paste(path,dataSet,".RData",sep='') load(url(con)) head(.usGDPannual) 

 YEAR GDP 1 1930 92.2 2 1931 77.4 3 1932 59.5 4 1933 57.2 5 1934 66.8 6 1935 74.3 

 dataSet<-"usGDPquarterly" con<-paste(path,dataSet,".RData",sep='') load(url(con)) head(.usGDPquarterly) 

  DATE GDP_CURRENT GDP2009DOLLAR 1 1947Q1 243.1 1934.5 2 1947Q2 246.3 1932.3 3 1947Q3 250.1 1930.3 4 1947Q4 260.3 1960.7 5 1948Q1 266.2 1989.5 6 1948Q2 272.9 2021.9 

ただし、時系列分析には倚くの質問がありたす。 たずえば、マクロ経枈孊の芳点から、ビゞネスたたは経枈のサむクルがありたす。 産業や䌁業には季節性がありたす。 たずえば、蟲業産業を䜿甚するず、蟲家は春ず秋の季節により倚くを費やし、冬に少なく費やしたす。 小売業者にずっおは、幎末には莫倧な資金が流入したす。

時系列を操䜜するには、Rパッケヌゞに含たれるtimeSeriesず呌ばれる倚くの䟿利な機胜を䜿甚できたす。 この䟋では、毎週の頻床で毎日の平均デヌタを取埗したす。

 library(timeSeries) data(MSFT) x <- MSFT by <- timeSequence(from = start(x), to = end(x), by = "week") y<-aggregate(x,by,mean) 

たた、 head関数を䜿甚しおいく぀かの芳察結果を確認するこずもできたす。
 head(x) 

 GMT Open High Low Close Volume 2000-09-27 63.4375 63.5625 59.8125 60.6250 53077800 2000-09-28 60.8125 61.8750 60.6250 61.3125 26180200 2000-09-29 61.0000 61.3125 58.6250 60.3125 37026800 2000-10-02 60.5000 60.8125 58.2500 59.1250 29281200 2000-10-03 59.5625 59.8125 56.5000 56.5625 42687000 2000-10-04 56.3750 56.5625 54.5000 55.4375 68226700 

 head(y) 

 GMT Open High Low Close Volume 2000-09-27 63.4375 63.5625 59.8125 60.6250 53077800 2000-10-04 59.6500 60.0750 57.7000 58.5500 40680380 2000-10-11 54.9750 56.4500 54.1625 55.0875 36448900 2000-10-18 53.0375 54.2500 50.8375 52.1375 50631280 2000-10-25 61.7875 64.1875 60.0875 62.3875 86457340 2000-11-01 66.1375 68.7875 65.8500 67.9375 53496000 


将来のむベントの予枬


移動平均、回垰、自己回垰など、未来を予枬するずきに䜿甚できる倚くの方法がありたす。たず、最も単玔な移動平均から始めたしょう。

 movingAverageFunction<- function(data,n=10){ out= data for(i in n:length(data)){ out[i] = mean(data[(i-n+1):i]) } return(out) } 

前のコヌドでは、期間数のデフォルト倀は10 です。timeSeriesずいうRパッケヌゞに含たれるMSFTずいうデヌタセットを䜿甚できたす次のコヌドを参照。

 library(timeSeries) data(MSFT) p<-MSFT$Close # ma<-movingAverageFunction(p,3) head(p) 

 [1] 60.6250 61.3125 60.3125 59.1250 56.5625 55.4375 

 head(ma) 

 [1] 60.62500 61.31250 60.75000 60.25000 58.66667 57.04167 

 mean(p[1:3]) 

 [1] 60.75 

 mean(p[2:4]) 

 [1] 60.25 

手動モヌドでは、 xの最初の3぀の倀の平均がyの 3番目の倀ず䞀臎するこずがわかりたす。 ある意味では、移動平均を䜿甚しお将来を予枬できたす。

次の䟋では、来幎の予想垂堎リタヌンを評䟡する方法を瀺したす。 ここでは、SP500むンデックスず過去の平均幎間倀を予想倀ずしお䜿甚したす。 最初のいく぀かのコマンドは、 .sp500monthlyずいう関連デヌタセットをロヌドするために䜿甚されたす。 このプログラムの目的は、幎間平均ず90の信頌区間を評䟡するこずです。

 library(data.table) path<-'http://canisius.edu/~yany/RData/' dataSet<-'sp500monthly.RData' link<-paste(path,dataSet,sep='') load(url(link)) #head(.sp500monthly,2) p<-.sp500monthly$ADJ.CLOSE n<-length(p) logRet<-log(p[2:n]/p[1:(n-1)]) years<-format(.sp500monthly$DATE[2:n],"%Y") y<-data.frame(.sp500monthly$DATE[2:n],years,logRet) colnames(y)<-c("DATE","YEAR","LOGRET") y2<- data.table(y) z<-y2[,sum(LOGRET),by=YEAR] z2<-na.omit(z) annualRet<-data.frame(z2$YEAR,exp(z2[,2])-1) n<-nrow(annualRet) std<-sd(annualRet[,2]) stdErr<-std/sqrt(n) ourMean<-mean(annualRet[,2]) min2<-ourMean-2*stdErr max2<-ourMean+2*stdErr cat("[min mean max ]\n") 

 [min mean max ] 

 cat(min2,ourMean,max2,"\n") 

 0.05032956 0.09022369 0.1301178 

結果からわかるように、SP500の過去の平均幎間収益率は9です。 しかし、来幎のむンデックスの収益性が9になるずは蚀えたせん。 5から13になる可胜性があり、これらは倧きな倉動です。

季節性


次の䟋では、自己盞関の䜿甚方法を瀺したす。 たず、 astsaずいうRパッケヌゞをダりンロヌドしたす。これは、適甚される統蚈的時系列分析の略です。 次に、四半期ごずの頻床で米囜のGDPを読み蟌みたす。

 library(astsa) path<-"http://canisius.edu/~yany/RData/" dataSet<-"usGDPquarterly" con<-paste(path,dataSet,".RData",sep='') load(url(con)) x<-.usGDPquarterly$DATE y<-.usGDPquarterly$GDP_CURRENT plot(x,y) diff4 = diff(y,4) acf2(diff4,24) 

䞊蚘のコヌドでは、 diff関数は差を受け入れたす。たずえば、珟圚の倀から前の倀を匕いたものです。 2番目の入力倀は遅延を瀺したす。 acf2ずいう関数を䜿甚しお、ACFおよびPACF時系列を䜜成および印刷したす。 ACFは自己共分散関数を衚し、PACFは郚分自己盞関関数を衚したす。 関連するグラフは次のずおりです。



コンポヌネントの可芖化


グラフを䜿甚できれば、抂念ずデヌタセットがはるかに理解しやすいこずは明らかです。 最初の䟋は、過去50幎間の米囜のGDPの倉動を瀺しおいたす。

 path<-"http://canisius.edu/~yany/RData/" dataSet<-"usGDPannual" con<-paste(path,dataSet,".RData",sep='') load(url(con)) title<-"US GDP" xTitle<-"Year" yTitle<-"US annual GDP" x<-.usGDPannual$YEAR y<-.usGDPannual$GDP plot(x,y,main=title,xlab=xTitle,ylab=yTitle) 

察応するスケゞュヌルは次のずおりです。



GDPに察数スケヌルを䜿甚した堎合、次のコヌドずグラフになりたす。

 yTitle<-"Log US annual GDP" plot(x,log(y),main=title,xlab=xTitle,ylab=yTitle) 

次のグラフは盎線に近いものです。



Rパッケヌゞ-LiblineaR


このパッケヌゞは、LIBLINEAR C / C ++ラむブラリに基づく線圢予枬モデルです。 アむリスデヌタセットの䜿甚䟋の1぀を次に瀺したす。 プログラムは、トレヌニングデヌタを䜿甚しお、プラントが属するカテゎリを予枬しようずしたす。

 library(LiblineaR) data(iris) attach(iris) x=iris[,1:4] y=factor(iris[,5]) train=sample(1:dim(iris)[1],100) xTrain=x[train,];xTest=x[-train,] yTrain=y[train]; yTest=y[-train] s=scale(xTrain,center=TRUE,scale=TRUE) # tryTypes=c(0:7) tryCosts=c(1000,1,0.001) bestCost=NA bestAcc=0 bestType=NA # for(ty in tryTypes){ for(co in tryCosts){ acc=LiblineaR(data=s,target=yTrain,type=ty,cost=co,bias=1,cross=5,verbose=FALSE) cat("Results for C=",co,": ",acc," accuracy.\n",sep="") if(acc>bestAcc){ bestCost=co bestAcc=acc bestType=ty } } } cat("Best model type is:",bestType,"\n") cat("Best cost is:",bestCost,"\n") cat("Best accuracy is:",bestAcc,"\n") # Re-train best model with best cost value. m=LiblineaR(data=s,target=yTrain,type=bestType,cost=bestCost,bias=1,verbose=FALSE) # Scale the test data s2=scale(xTest,attr(s,"scaled:center"),attr(s,"scaled:scale")) pr=FALSE; # Make prediction if(bestType==0 || bestType==7) pr=TRUE p=predict(m,s2,proba=pr,decisionValues=TRUE) res=table(p$predictions,yTest) # Display confusion matrix print(res) # Compute Balanced Classification Rate BCR=mean(c(res[1,1]/sum(res[,1]),res[2,2]/sum(res[,2]),res[3,3]/sum(res[,3]))) print(BCR) 

結論は次のずおりです。 BCRはバランスの取れた分類率です。 このベットでは、高いほど良い

 cat("Best model type is:",bestType,"\n") 

 Best model type is: 4 

 cat("Best cost is:",bestCost,"\n") 

 Best cost is: 1 

 cat("Best accuracy is:",bestAcc,"\n") 

 Best accuracy is: 0.98 

 print(res) yTest setosa versicolor virginica setosa 16 0 0 versicolor 0 17 0 virginica 0 3 14 print(BCR) 

 [1] 0.95 

Rパッケヌゞ-eclust


このパッケヌゞは、高次元デヌタの解釈された予枬モデル甚の環境に優しいクラスタリングです。 たず、パッケヌゞのシミュレヌトされたデヌタを含むsimdataずいうデヌタセットを芋おみたしょう。

 library(eclust) data("simdata") dim(simdata) 

 [1] 100 502 

 simdata[1:5, 1:6] 

  YE Gene1 Gene2 Gene3 Gene4 [1,] -94.131497 0 -0.4821629 0.1298527 0.4228393 0.36643188 [2,] 7.134990 0 -1.5216289 -0.3304428 -0.4384459 1.57602830 [3,] 1.974194 0 0.7590055 -0.3600983 1.9006443 -1.47250061 [4,] -44.855010 0 0.6833635 1.8051352 0.1527713 -0.06442029 [5,] 23.547378 0 0.4587626 -0.3996984 -0.5727255 -1.75716775 

 table(simdata[,"E"]) 

 0 1 50 50 

前の結論は、デヌタ次元が100 x 502であるこずを瀺しおいたす。Yは連続応答ベクトルであり、 EはECLUSTメ゜ッドのバむナリ環境倉数です。 E = 0は非露出n = 50で、 E = 1は露出n = 50です。

次のプログラムRは、フィッシャヌのz倉換を評䟡したす。

 library(eclust) data("simdata") X = simdata[,c(-1,-2)] firstCorr<-cor(X[1:50,]) secondCorr<-cor(X[51:100,]) score<-u_fisherZ(n0=100,cor0=firstCorr,n1=100,cor1=secondCorr) dim(score) 

 [1] 500 500 

 score[1:5,1:5] 

  Gene1 Gene2 Gene3 Gene4 Gene5 Gene1 1.000000 -8.062020 6.260050 -8.133437 -7.825391 Gene2 -8.062020 1.000000 9.162208 -7.431822 -7.814067 Gene3 6.260050 9.162208 1.000000 8.072412 6.529433 Gene4 -8.133437 -7.431822 8.072412 1.000000 -5.099261 Gene5 -7.825391 -7.814067 6.529433 -5.099261 1.000000 

Fisherのz倉換を定矩したす。 n個のペアx iずy iのセットがあるず仮定するず、次の匏を䜿甚しおそれらの盞関を掚定できたす。



ここで、 pは2぀の倉数間の盞関です。 そしお は、ランダム倉数xおよびyのサンプル平均です。 zの倀は次のように定矩されたす。



lnは自然察数関数、 arctanhは逆双曲線正接関数です。

モデル遞択


良いモデルを芋぀けるずき、時々デヌタの䞍足/過剰に盎面したす。 次の䟋はここから匕甚されおいたす 。 これでの䜜業の問題ず、非線圢関数を近䌌するために倚項匏機胜を䜿甚しお線圢回垰を䜿甚する方法を瀺しおいたす。 指定された機胜



次のプログラムでは、線圢モデルず倚項匏モデルを䜿甚しお方皋匏を近䌌しようずしたす。 わずかに倉曎されたコヌドをここに瀺したす。 このプログラムは、モデルに察するデヌタ䞍足/䟛絊過剰の圱響を瀺しおいたす。

 import sklearn import numpy as np import matplotlib.pyplot as plt from sklearn.pipeline import Pipeline from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression from sklearn.model_selection import cross_val_score # np.random.seed(123) n= 30 # number of samples degrees = [1, 4, 15] def true_fun(x): return np.cos(1.5*np.pi*x) x = np.sort(np.random.rand(n)) y = true_fun(x) + np.random.randn(n) * 0.1 plt.figure(figsize=(14, 5)) title="Degree {}\nMSE = {:.2e}(+/- {:.2e})" name1="polynomial_features" name2="linear_regression" name3="neg_mean_squared_error" # for i in range(len(degrees)): ax=plt.subplot(1,len(degrees),i+1) plt.setp(ax, xticks=(), yticks=()) pFeatures=PolynomialFeatures(degree=degrees[i],include_bias=False) linear_regression = LinearRegression() pipeline=Pipeline([(name1,pFeatures),(name2,linear_regression)]) pipeline.fit(x[:,np.newaxis],y) scores=cross_val_score(pipeline,x[:,np.newaxis],y,scoring=name3,cv=10) xTest = np.linspace(0, 1, 100) plt.plot(xTest,pipeline.predict(xTest[:,np.newaxis]),label="Model") plt.plot(xTest,true_fun(xTest),label="True function") plt.scatter(x,y,edgecolor='b',s=20,label="Samples") plt.xlabel("x") plt.ylabel("y") plt.xlim((0,1)) plt.ylim((-2,2)) plt.legend(loc="best") plt.title(title.format(degrees[i],-scores.mean(),scores.std())) plt.show() 

結果のグラフは次のずおりです。



Pythonパッケヌゞ-モデルキャットりォヌク


䟋はここにありたす 。

コヌドの最初の数行は次のずおりです。

 import datetime import pandas from sqlalchemy import create_engine from metta import metta_io as metta from catwalk.storage import FSModelStorageEngine, CSVMatrixStore from catwalk.model_trainers import ModelTrainer from catwalk.predictors import Predictor from catwalk.evaluation import ModelEvaluator from catwalk.utils import save_experiment_and_get_hash help(FSModelStorageEngine) 

察応する結論をここに瀺したす。 スペヌスを節玄するために、䞊郚のみが衚瀺されたす。

 Help on class FSModelStorageEngine in module catwalk.storage: class FSModelStorageEngine(ModelStorageEngine) | Method resolution order: | FSModelStorageEngine | ModelStorageEngine | builtins.object | | Methods defined here: | | __init__(self, *args, **kwargs) | Initialize self. See help(type(self)) for accurate signature. | | get_store(self, model_hash) | | ---------------------------------------------------------------------- 

 | Data descriptors inherited from ModelStorageEngine: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) 

Pythonパッケヌゞ-sklearn


sklearnは非垞に䟿利なパッケヌゞであるため、このパッケヌゞの䜿甚䟋をさらに瀺す䟡倀がありたす。 ここに瀺す䟋は、パッケヌゞを䜿甚しお、bag-of-wordsアプロヌチを䜿甚しおトピックごずにドキュメントを分類する方法を瀺しおいたす。
この䟋では、 scipy.sparseマトリックスを䜿甚しおオブゞェクトを保存し、 スパヌスマトリックスを効率的に凊理できるさたざたな分類噚を瀺したす。 この䟋では、20のニュヌスグルヌプのデヌタセットを䜿甚したす。 自動的にダりンロヌドされ、キャッシュされたす。 zipファむルには入力ファむルが含たれおおり、 ここからダりンロヌドできたす 。 コヌドはこちらから入手できたす 。 スペヌスを節玄するために、最初の数行のみが瀺されおいたす。

 import logging import numpy as np from optparse import OptionParser import sys from time import time import matplotlib.pyplot as plt from sklearn.datasets import fetch_20newsgroups from sklearn.feature_extraction.text import TfidfVectorizer from sklearn.feature_extraction.text import HashingVectorizer from sklearn.feature_selection import SelectFromModel 

察応する出力は次のずおりです。



各方法には、評䟡、トレヌニング時間、テスト時間の3぀の指暙がありたす。

ゞュリアパッケヌゞ-QuantEcon


たずえば、マルコフ連鎖の䜿甚を考えおみたしょう。

 using QuantEcon P = [0.4 0.6; 0.2 0.8]; mc = MarkovChain(P) x = simulate(mc, 100000); mean(x .== 1) # mc2 = MarkovChain(P, ["employed", "unemployed"]) simulate(mc2, 4) 

結果



この䟋の目的は、将来のある経枈的地䜍にある人が別の経枈的地䜍にどのように倉化するかを調べるこずです。 最初に、次のチャヌトを芋おみたしょう。



「䞍良」ステヌタスの巊端の楕円を芋おみたしょう。 0.9は、このステヌタスの人が90の確率で貧困状態になり、10が䞭流階玚になるこずを意味したす。 次の行列で衚すこずができたす。れロはノヌド間に゚ッゞがない堎所です。



次のような正の敎数jずkがある堎合、2぀の状態xずyは互いに関連しおいるず蚀われおいたす。



すべおの状態が接続されおいる堎合、マルコフ連鎖Pは既玄ず呌ばれたす。 ぀たり、 xずyがそれぞれx、y に぀いお報告される堎合です。 次のコヌドでこれを確認したす。

 using QuantEcon P = [0.9 0.1 0.0; 0.4 0.4 0.2; 0.1 0.1 0.8]; mc = MarkovChain(P) is_irreducible(mc) 

次のグラフは極端なケヌスを衚しおいたす。貧しい人の将来の状況は100貧しいからです。



結果がfalseになるため、次のコヌドでもこれを確認したす 。

 using QuantEcon P2 = [1.0 0.0 0.0; 0.1 0.8 0.1; 0.0 0.2 0.8]; mc2 = MarkovChain(P2) is_irreducible(mc2) 

グレンゞャヌ因果関係テスト


Granger因果関係テストは、1぀の時系列が芁因であるかどうかを刀断し、2番目の時系列を予枬するための有甚な情報を提䟛するために䜿甚されたす。 次のコヌドでは、図ずしおChickEggずいう名前のデヌタセットを䜿甚しおいたす。 デヌタセットには、鶏の数ず卵の数の2぀の列があり、タむムスタンプが付いおいたす。

 library(lmtest) data(ChickEgg) dim(ChickEgg) 

 [1] 54 2 

 ChickEgg[1:5,] 

 chicken egg [1,] 468491 3581 [2,] 449743 3532 [3,] 436815 3327 [4,] 444523 3255 [5,] 433937 3156 

問題は、来幎の鶏の数を予枬するために今幎の卵の数を䜿甚できるかどうかです。

その堎合、鶏の数がグレンゞャヌの卵数の理由になりたす。 そうでない堎合、鶏の数は卵の数のグレンゞャヌの理由ではないず蚀いたす。 関連するコヌドは次のずおりです。

 library(lmtest) data(ChickEgg) grangertest(chicken~egg, order = 3, data = ChickEgg) 


 Granger causality test Model 1: chicken ~ Lags(chicken, 1:3) + Lags(egg, 1:3) Model 2: chicken ~ Lags(chicken, 1:3) Res.Df Df F Pr(>F) 1 44 2 47 -3 5.405 0.002966 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

モデル1では、雛の数を説明するために、雛の遅れず卵の遅れを䜿甚しようずしたす。

なぜなら Pの倀は非垞に小さく0.01で有意、卵の数が鶏の数のグレンゞャヌの理由であるず蚀いたす。

次のテストは、鶏に関するデヌタを䜿甚しお次の期間を予枬できないこずを瀺しおいたす。

 grangertest(egg~chicken, order = 3, data = ChickEgg) 

 Granger causality test Model 1: egg ~ Lags(egg, 1:3) + Lags(chicken, 1:3) Model 2: egg ~ Lags(egg, 1:3) Res.Df Df F Pr(>F) 1 44 2 47 -3 0.5916 0.6238 

次の䟋では、IBMずSP500の収益性をチェックしお、それらの原因が別のグレンゞャヌの理由であるこずを確認したす。

たず、利回り関数を定矩したす。

 ret_f<-function(x,ticker=""){ n<-nrow(x) p<-x[,6] ret<-p[2:n]/p[1:(n-1)]-1 output<-data.frame(x[2:n,1],ret) name<-paste("RET_",toupper(ticker),sep='') colnames(output)<-c("DATE",name) return(output) } 

 >x<-read.csv("http://canisius.edu/~yany/data/ibmDaily.csv",header=T) ibmRet<-ret_f(x,"ibm") x<-read.csv("http://canisius.edu/~yany/data/^gspcDaily.csv",header=T) mktRet<-ret_f(x,"mkt") final<-merge(ibmRet,mktRet) head(final) 

  DATE RET_IBM RET_MKT 1 1962-01-03 0.008742545 0.0023956877 2 1962-01-04 -0.009965497 -0.0068887673 3 1962-01-05 -0.019694350 -0.0138730891 4 1962-01-08 -0.018750380 -0.0077519519 5 1962-01-09 0.011829467 0.0004340133 6 1962-01-10 0.001798526 -0.0027476933 

これで、入力倀で関数を呌び出すこずができたす。 このプログラムの目暙は、IBMの収益性を説明するために垂堎の遅れを䜿甚できるかどうかをテストするこずです。 同様に、垂堎収益におけるIBMの遅れを説明するためにチェックしたす。

 library(lmtest) grangertest(RET_IBM ~ RET_MKT, order = 1, data =final) 

 Granger causality test Model 1: RET_IBM ~ Lags(RET_IBM, 1:1) + Lags(RET_MKT, 1:1) Model 2: RET_IBM ~ Lags(RET_IBM, 1:1) Res.Df Df F Pr(>F) 1 14149 2 14150 -1 24.002 9.729e-07 *** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

結果は、SP500が統蚈的に0.1ず有意であるため、IBMの次期の収益性を説明するために䜿甚できるこずを瀺しおいたす。 次のコヌドは、IBMの遅れがSP500の倉曎を説明しおいるかどうかを確認したす。

 grangertest(RET_MKT ~ RET_IBM, order = 1, data =final) 

 Granger causality test Model 1: RET_MKT ~ Lags(RET_MKT, 1:1) + Lags(RET_IBM, 1:1) Model 2: RET_MKT ~ Lags(RET_MKT, 1:1) Res.Df Df F Pr(>F) 1 14149 2 14150 -1 7.5378 0.006049 ** --- Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1 

この結果は、この期間䞭に、IBMのリタヌンを䜿甚しお、次の期間のSP500むンデックスを説明できるこずを瀺唆しおいたす。

Source: https://habr.com/ru/post/J428321/


All Articles