この章では、最もよく使用される基本的な統計プロシージャを実行するOracle R Enterpriseの関数について説明します。これらの関数は、市販の製品からOracle R Enterpriseに切り替えるユーザーの助けとなるように設計されています。
Oracle R Enterpriseは、次の一連の関数を提供します。
これらの関数の使用法は、例で示します。大部分の例では、「例のデータ」に示す同じデータが使用されています。
多くの例では、表NARROWが使用されています。これは、Oracle R Enterpriseとともにインストールするときにデータベースにインストールされます。
NARROWは、次のように9つの列を持つore.frameです。
R> class(NARROW) [1] "ore.frame" attr(,"package") [1] "OREbase" R> names(NARROW) [1] "ID" "GENDER" "AGE" "MARITAL_STATUS" [5] "COUNTRY" "EDUCATION" "OCCUPATION" "YRS_RESIDENCE" [9] "CLASS"
ore.corr
は、ore.frameの複数の数値列にわたる相関分析を実行します。
ore.corr
は、制御列との部分相関をサポートします。
ore.corr
は、相関の前の集計を可能にします。
ore.corr
は、結果の後処理およびRコード・フローへの統合を可能にします。
ore.corr
の出力は、R cor()
関数の出力に適合させることができます。これにより、ore.corrの出力を、R関数またはグラフィックで後処理ができます。
構文および出力については「ore.corrのパラメータ」を、例については「ore.corrの例」を参照してください。
ore.corr
には、次のパラメータがあります。
data: ore.frameとして相関係数を計算する対象となるデータ。
var: 相関マトリクスを構築するdataの数値列
group.by: 計算する相関マトリクスを示します。ore.corr
は、group.by列の一意の値と同じ数の相関マトリクスを計算します。デフォルト値はNULLです
weight: var列の倍数因子を提供する数値を持つdataの列。デフォルト値はNULLです。
partial: 部分相関の制御変数として使用するdataの列。デフォルト値はNULLです。
stats: 相関の計算方法。pearson(デフォルト)、spearman、kendallのうちの1つです
ore.corr
は、group.byが使用されている場合を除く、すべての場合に出力としてore.frameを返します。group.byが使用されている場合は、Oracle R Enterpriseリスト・オブジェクトが返されます。
次の例では、ore.corr
の使用方法を示します。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
ore.corr
を使用する前に、数値以外のすべての値を投影しておく必要があります。
R> names(NARROW) [1] "ID" "GENDER" "AGE" "MARITAL_STATUS" "COUNTRY" "EDUCATION" "OCCUPATION" [8] "YRS_RESIDENCE" "CLASS" "AGEBINS" R> NARROW=NARROW[,c(3,8,9)]
これで、次のいくつかの方法で、相関を計算します。
R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS') #Calculate using Spearman R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='spearman') # Calculate using Kendall R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='kendall')
「基本的な相関計算」で作成した数値以外の値が含まれたNARROWのバージョンを使用します。
Spearmanの方法を使用した部分相関の計算:
R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='spearman', partial='GENDER')
「基本的な相関計算」で作成した数値以外の値が含まれたNARROWのバージョンを使用します。
いくつかの相関マトリクスを作成し、その出力をRの出力と互換性を持つように変換します。
R> x=ore.corr(NARROW,var='AGE,YRS_RESIDENCE,CLASS', stats='pearson', partial='GENDER', group.by='COUNTRY') R> class(x) [1] "list"
いくつかのマトリクスを計算する場合、Rパッケージを使用してそれらを視覚化できます。
クロス集計は、値からなる2つの表の間の相互依存関係を見つける統計手法です。
ore.crosstab
は、ore.frameのクロス列分析を可能にします。この関数は、R table()
関数の高性能なバリアントです。
ore.crosstab
は、ore.freqを使用して頻度分析を実行する前に、実行する必要があります。
クロス集計は、ore.extendで説明するように様々な合計によって拡張できます。
ore.crosstab
は、Rで記述されています。この関数は、データベース・サーバーで実行されるSQLにマップされています。
構文および出力については「ore.crosstabのパラメータ」を、例については「ore.crosstabの例」を参照してください。
ore.extendを使用して、クロス集計を拡張できます。
ore.crosstab
には、次のパラメータがあります。
expr: クロス集計定義
[COLUMN_SPEC] ~ COLUMN_SPEC [*<WEIGHTING COLUMN>] [/<GROUPING COLUMN>] [^<STRATIFICATION COLUMN>] [|ORDER_SPECIFICATION] COLUMN_SPEC is <column-name>[+COLUMN_SET][+COLUMN_RANGE] COLUMN_SET is <column_name>[+COLUMN_SET] COLUMN_RANGE is <FROM COLUMN>-<TO COLUMN
説明:
COLUMN_SPEC is <column>
[+COLUMN_SET][+COLUMN_RANGE]
COLUMN_SET is <column>[+COLUMN_SET]
COLUMN_RANGE is (<from column>-<to column>)
ORDER_SPECIFICATION is one of [-]NAME, [-]DATA, [-]FREQ, or INTERNAL
階層化列は、データのクラスタ化、つまりグループ化に使用されます。使用した場合、その値は、結果のクロス集計表のORE$STRATA列に格納されます。
data: クロス集計するデータを含むore.frame
grouping column: グループ化列の一意の値と同じ数のクロス集計。デフォルト値はNULLです
order: 出力データのオプションのソートを定義します。集計列でソートするには[-]NAMEを、表における頻度カウントでソートするには[-]FREQを指定します。順序を指定しないと、最も効率的になります。オプションの「-」によって、順序が逆転します。
weights: 対応する行の頻度を示すdataの列。デフォルト値はNULLです
partial: 部分相関の制御変数として使用するdataの列。デフォルト値はNULLです。
ore.crosstab
は、複数の表が作成されている場合を除く、すべての場合に出力としてore.frameを返します。複数の表が作成されている場合、ore.crosstabは、Oracle R Enterpriseリスト・オブジェクトを返します。
次の例は、ore.crosstab
の使用法を示しています。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
最も基本的な使用例は、単一列頻度表の作成です。次のコマンドは、GENDERによってグループ化されたNARROWにフィルタを適用します。
R> ct = ore.crosstab(AGE, data=NARROW) R> ct
次のコマンドは、GENDERによってAGEを、CLASSによってAGEを分析します。
R> ct = ore.crosstab(AGE~GENDER+CLASS, data=NARROW) R> head(ct)
行を重み付けするには、別の列に基づいたカウントを含めます。この例では、YRS_RESIDENCEの値を使用してAGEおよびGENDERの値に重み付けします。
R> ct = ore.crosstab(AGE~GENDER*YRS_RESIDENCE, data=NARROW) R> head(ct)
次のようにいくつかの方法があります。
分析対象の列によるデフォルトまたはNAMEの順序付け
頻度カウントによるFREQの順序付け
-NAMEまたは-FREQは、順序を逆転します
INTERNALは、順序付けをバイパスします
次に2つの例を示します。
R> ct = ore.crosstab(AGE~GENDER|FREQ, data=NARROW) R> head(ct) AGE GENDER ORE$FREQ ORE$STRATA ORE$GROUP R> ct = ore.crosstab(AGE~GENDER|-FREQ, data=NARROW) R> head(ct)
これは、SQL GROUPING SETによって実行されるものと類似しています。
ct = ore.crosstab(AGE+COUNTRY~GENDER, NARROW)
この例に示すように、すべての列の名前を入力するかわりに、列の範囲を指定できます。
R> names(NARROW) [1] "ID" "GENDER" "AGE" "MARITAL_STATUS" [5] "COUNTRY" "EDUCATION" "OCCUPATION" "YRS_RESIDENCE" [9] "CLASS"
AGE、MARITAL_STATUSおよびCOUNTRYは連続している列であるため、単純に次のように使用できます。
ct = ore.crosstab(AGE-COUNTRY~GENDER, NARROW)
同等のバージョンは次のようになります
ct = ore.crosstab(AGE+MARITAL_STATUS+COUNTRY~GENDER, NARROW)
このコマンドは、別の列COUNTRYの一意の値ごとに1つのクロス表(AGE, GENDER)を作成します。
R> ct=ore.crosstab(~AGE/COUNTRY, data=NARROW) R> head(ct)
これを複数の列に拡張できます。たとえば、このコマンドは、(COUNTRY, GENDER)の一意の組合せごとに1つの(AGE, EDUCATION)表を作成します。
R> ct = ore.crosstab(AGE~EDUCATION/COUNTRY+GENDER, data=NARROW)
前述のクロス集計は、すべて、階層化によって拡張できます。次に例を示します。
R> ct = ore.crosstab(AGE~GENDER^CLASS, data=NARROW) R> head(ct)
この例のコマンドは、次のものと同じです。
ct = ore.crosstab(AGE~GENDER, NARROW, strata="CLASS")
最初にAGEをビニングし、次にGENDERおよびそのビンのクロス集計を計算します。
R> NARROW$AGEBINS=ifelse(NARROW$AGE<20, 1, ifelse(NARROW$AGE<30,2, ifelse(NARROW$AGE<40,3,4))) R> ore.crosstab(GENDER~AGEBINS, NARROW)
ore.crosstabを使用して作成されたクロス集計は、次の3つの統計でさらに拡張できます。
行および列の合計
crosstab = ore.extend.sum(crosstab)
表のセルごとの累積合計
crosstab = ore.extend.cumsum(crosstab)
表全体の合計
crosstab = ore.extend.total(crosstab)
次の例は、ore.extend
を示しています。
R> ct = ore.crosstab(GENDER~CLASS, NARROW) R> ct = ore.extend.sum(ct) R> ct GENDER ORE$FREQ ORE$STRATA ORE$GROUP ORE$SUM$GENDER 0 F 421 1 1 421 1 M 880 1 1 880
ore.crosstab
は、ore.freqを使用して頻度分析を実行する前に、実行する必要があります。
ore.freq
は、ore.crosstab
の出力を分析し、ore.crosstab
の結果に関連する手法を自動的に判別します。手法は、クロス表の種類に応じて異なります。
1方向のクロス表
同等の比率または指定したNULL比率に対する適合度検定、信頼度の限度と同等性のテスト。
2方向のクロス表
クロス集計における列の間の関係を記述する様々な統計
カイ二乗検定、Cochran-Mantel-Haenzsel統計、属性相関、関連の強固性、リスクの相違、オッズ比および2x2表の相対リスク、トレンドの検定
N方向のクロス表
N 2方向のクロス表
階層内または階層にわたる統計
ore.freq
は、使用可能な場合はOracle SQL関数を使用します
構文および出力については「ore.freqのパラメータ」を、例については「ore.freqの例」を参照してください。
ore.freq
では、次のパラメータがサポートされています。
crosstab: ore.crosstab()
からのore.frame出力
stats: 必要な統計のリスト。次の統計がサポートされています。
カイ二乗: AJCHI、LRCHI、MHCHI、PCHISQ
カッパ: KAPPA、WTKAP
lambda: LAMCR、LAMRC、LAMDAS
相関: KENTB、PCORR、SCORR
スチュアートのタウ、ソマーズ: D|C、STUTC、SMDCR、SMDRC
フィッシャー、コクランのQ、FISHER、COCHQ
オッズ比: OR、MHOR、LGOR
相対リスク: RR、MHRR、ALRR
その他: MCNEM、PHI、CRAMV、CONTGY、TSYM、TREND、GAMMA
デフォルト値は「NULL」です。
Params: statsで指定される統計関数固有の制御パラメータ:
SCORE: TABLE|RANK|RIDIT|MODRIDIT
ALPHA: 数値
WEIGHTS: 数値
デフォルト値は「NULL」です。
skip.missing: TRUEまたはFALSE。クロス表内の値が欠落しているセルをスキップします。デフォルト値はFALSEです
skip.failed: TRUEまたはFALSE。クロス表に対して必要な統計検定が、その表に適用不可であるために失敗した場合、ただちに返されます。デフォルト値はFALSEです
ore.freq
は、すべての場合にore.frameを返します。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
ore.freq
を使用する前に、クロス集計を計算する必要があります。
次に例を示します。
R> ct = ore.crosstab(~GENDER, NARROW) R> ore.freq(ct) METHOD FREQ DF PVALUE DESCR GROUP 0 PCHI 161.9377 1 0 Chi-Square 1
ore.rank
は、ore.frameの数値列の値の分布を分析します。
ore.rank
は、次のような便利な機能をサポートします。
グループ内のランキング
ランク・タイルに基づいた、グループへの行のパーティショニング
累積パーセンテージおよびパーセンタイルの計算
同順位の処理
ランクからの標準スコアの計算
ore.rank
構文は、対応するSQL問合せより単純です。
構文については「ore.rankのパラメータ」を、例については「ore.rankの例」を参照してください。
ore.rank
では、次のパラメータがサポートされています。
data: ランキングするデータを含むore.frame
var: ランキングするdata内の数値列
desc: desc=TRUE
である場合、降順にランキングします。それ以外の場合は、昇順でランキングします。(デフォルトは、昇順のランキングです。)
groups: ランクに基づいて行を#グループにパーティショニングします。パーセンタイルの場合はgroups=100
、十分位数の場合はgroups=10
、四分位数の場合はgroups=4
です。
デフォルト値は「NULL」です。
group.by: group.by
列で識別される各グループを別々にランキングします。
デフォルト値は「NULL」です。
ties: 同順位の処理方法を指定します。同順位の値に、対応するランクのうちの最大、最小または中間のものを割り当てます。
デフォルト値は「NULL」です。
fraction: 列値のランクを欠落していない列値の数で除算したもの。デフォルト値はFALSEです。
nplus1
とともに使用して、累積分布関数を見積ります
nplus1: fractionに1を加算したもの。つまり、欠落していない列値の数で列値のランクを除算したものを1に加算したもの。デフォルト値はFALSEです。
fraction
とともに使用して、累積分布関数を見積ります
percent: fractionをパーセント値、つまりfraction * 100に変換したもの。
ore.rank
は、すべての場合にore.frameを返します。
次のRスコアリング・メソッドをore.rank
とともに使用できます。
ランクから指数スコアを計算するには、savage
を使用します。
正規スコアを計算するには、blom
、tukey
またはvw
(ファン・デル・ヴェルデン)の1つを使用します。
次の例は、ore.rank
の使用方法を示しています。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
この例では、2つの列AGEとCLASSをランキングし、派生列としてその結果をレポートします。値は、デフォルトの順序(昇順)でランキングされます。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass')
この例では、2つの列AGEとCLASSをランキングします。同順位がある場合、同順位のすべての値に最小値が割り当てられます。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass', ties='low')
この例では、2つの列AGEとCLASSをランキングし、COUNTRYに従ってその値をランキングします。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass', group.by='COUNTRY')
この例では、2つの列AGEとCLASSをランキングし、その列を十分位数(10パーティション)にパーティショニングします。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',groups=10)
列を異なる数のパーティションにパーティショニングするには、groups
の値を変更します。たとえば、groups=4
では、四分位数にパーティショニングされます。
この例では、2つの列AGEとCLASSをランキングし、両方の列の累積分布関数を見積ります。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',nplus1=TRUE)
この例では、2つの列AGEとCLASSをランキングし、2つの異なる方法でそのランクをスコアリングします。最初のコマンドが、列をパーセンタイル(100グループ)にパーティショニングします。savage
が指数スコアを計算し、blom
が正規スコアを計算します。
R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',score='savage', groups=100, group.by='COUNTRY') R> x <- ore.rank(data=NARROW, var='AGE=RankOfAge, CLASS=RankOfClass',score='blom')
ore.sort
は、by句で指定した1つ以上の列に沿ったデータ・フレームの柔軟なソートを可能にします。
ore.sort
は、他のデータ事前処理関数とともに使用できます。ソートの結果を、Rの視覚化への入力に使用できます。
ore.sort
のソートは、データベース内で実行されます。ore.sort
では、データベースnls.sort
オプションがサポートされます。
構文については「ore.sortのパラメータ」を、例については「ore.sortの例」を参照してください。
ore.sort
では、次のパラメータがサポートされています。
data: ソートするデータを含むore.frame。必須
by: data内でデータをソートする基準となる列。必須
stable: 相対順序が、ソートされたグループ内で保持されます(TRUEまたはFALSE)。デフォルト値はFALSEです
reverse: 文字変数のオプションの逆転照合順序(TRUEまたはFALSE)。デフォルト値はFALSEです
unique.keys: ソート対象の列内の重複する値を持つ観測データの削除(オプション)。TRUEまたはFALSE。デフォルト値はFALSEです
unique.data: すべての列内の重複する値を持つ観測データの削除(オプション)。TRUEまたはFALSE。デフォルト値はFALSEです
dataおよびbyは必須パラメータです。その他のパラメータはすべてオプションです。
ore.sort
は、ore.frameを返します。
次の例は、ore.sort
の使用方法を示しています。
これらの例の大部分では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。また、ONTIME_Sを使用した例もあります。
列AGEおよびGENDERを降順でソートします。
R> x=ore.sort(data=NARROW,by='AGE,GENDER', reverse=TRUE)
AGEを降順で、GENDERを昇順でソートします。
R> x=ore.sort(data=NARROW,by='-AGE,GENDER')
AGEを基準にソートし、AGEの一意の値ごとに1つの行を保持します。
R> x=ore.sort(data=NARROW,by='AGE', unique.key=TRUE)
AGEを基準にソートし、重複する行を削除します。
R> x=ore.sort(data=NARROW,by='AGE', unique.data=TRUE)
AGEを基準にソートします。また、重複する行を削除し、AGEの一意の値ごとに1つの行を返します。
R> x=ore.sort(data=NARROW,by='AGE', unique.data=TRUE,unique.key = TRUE)
ソートされた出力内で相対順序を保持します。
R> x=ore.sort(data=NARROW,by='AGE', stable=TRUE)
次の例では、Oracle R EnterpriseをインストールしたときにインストールされているONTIME_Sエアラインのデータを使用します。
ONTIME_Sをエアライン名を基準に降順で、出発の遅延を昇順でソートします。
R> sortedOnTime1 <- ore.sort(data=ONTIME_S, by='-UNIQUECARRIER,DEPDELAY')
ONTIME_Sをエアライン名および出発の遅延でソートし、各組合せの1つを選択します(つまり、一意のキーを返します)。
R> sortedOnTime1 <- ore.sort(data=ONTIME_S, by='-UNIQUECARRIER,DEPDELAY', unique.key=TRUE)
ore.summary
は、記述統計を計算し、柔軟な行の集計とともに、ore.frame内の列の広範な分析をサポートします。
ore.summary
では、次の統計がサポートされています。
平均、最小、最大、モード、欠落値の数、合計、加重和
二乗の補正および未補正合計、値の範囲、stddev、stderr、分散
母平均が0であるという仮定をテストするためのt検定
尖度、歪度、変動係数
分位: p1、p5、p10、p25、p50、p75、p90、p95、p99、qrange
平均の片側および両側信頼限界: clm、rclm、lclm
極値のタグ付け
ore.summary
は、同じ結果について、SQL問合せと比べて単純な構文を提供します。
構文については「ore.summaryのパラメータ」を、例については「ore.summaryの例」を参照してください。
ore.summary
では、次のパラメータがサポートされています。
data: ore.frameとして集計するデータ。
class: 集計するdataの列(つまり、SQL GROUP BY)。デフォルト値はNULLです
var: 統計関数を適用するdataの列(SQL SELECTリスト)
stats: varの列に適用する統計関数のリスト
var列に対して要求できるmean、min、max、cnt、n、nmiss、css、uss、cv、sum、sumwgt、range、stddev、stderr、var、t、kurt、skew、p1、p5、p10、p25、p50、p75、p90、p95、p99、qrange、lclm、rclm、clm、mode
デフォルト値はn、mean、min、maxです。
weight: var列の乗数的因子を提供する数値を持つdataの列
maxid、minid: グループごとに、オプションでdataの他の列の最大または最小値をリストします。デフォルト値はNULLです
ways: 出力をclass変数の特定のグループ化レベルのみに制限します。デフォルト値はNULLです
group.by: サマリー結果を階層化する対象のdataの列。デフォルト値はNULLです
order: 出力データのオプションのソートを定義します。集計列でソートするには[-]NAMEを、表における頻度カウントでソートするには[-]FREQを指定します。順序を指定しないと、最も効率的になります。オプションの「-」によって、順序が逆転します。
_FREQ: 頻度。1つのグループ内の観測データの数
_TYPE: グループ化を識別します。バイナリ・コード・ベースです
_LEVEL: グループ化で使用される変数の数を識別します
ore.summary
は、group.by句が使用されている場合を除く、すべての場合に出力としてore.frameを返します。group.by句が使用されている場合、ore.summary
は、階層ごとに1フレームずつore.frameのリストを返します。
次の例は、ore.summary
の使用法を示しています。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
この例では、列AGEおよびCLASSの平均、最小、最大を計算し、GENDERをロールアップ(集計)します。
R> ore.summary(NARROW, class='GENDER', var ='AGE,CLASS', order='freq')
この例では、列AとしてAGEの歪度と、列BとしてCLASSのt検定を計算します。
R> ore.summary(NARROW, class='GENDER', var='AGE,CLASS', stats='skew(AGE)=A, probt(CLASS)=B')
この例では、YRS_RESIDENCEを重みとしてGENDERによって集計されたAGEの重み付けされた合計を計算します。つまりsum(var*weight)
を計算します。
R> ore.summary(NARROW, class='GENDER', var='AGE', stat='sum=X', weight='YRS_RESIDENCE')
GENDERおよびMARITAL_STATUSでCLASSをグループ化します。
r> ore.summary(NARROW, class='GENDER, MARITAL_STATUS', var='CLASS', ways=1)
ore.univariate
は、ore.frameの数値変数の分布分析を提供します。
ore.univariate
は、次の統計を提供します。
ore.summaryによってレポートされるすべての統計
符号順位検定、スチューデントのt-検定
極値のレポート
構文については「ore.univariateのパラメータ」を、例については「ore.univariateの例」を参照してください。
ore.univariate
では、次のパラメータがサポートされています。
data: ore.frameとして集計するデータ
var: 分析するdata内の数値列
weight: var列の倍数因子を提供する数値を持つdataの列。デフォルト値はNULLです
stats: 計算および表示する統計のサブセットの指定(オプション)
moments: n、sumwgt、mean、sum、stddev、var、skew、kurt.、uss.css.cv、stderr
measures: mean、stddev、median、var、mode、range、iqr
quantiles: p100、p99、p95、p90、p75、p50、p25、p10、p5、p1、p0
location: studentt、studentp、signt、signp、srankt、srankp
normality
loccount: loc<、loc>、loc!
extremes
デフォルト値は「NULL」です。
ore.univariate
は、すべての場合に出力としてore.frameを返します。
次の例は、ore.univariate
の使用法を示しています。
これらの例では、NARROWデータ・セット使用します。詳細は、「例のデータ」を参照してください。
この例では、AGE、YRS_RESIDENCEおよびCLASSのデフォルトの単変量統計を計算します。
R> ore.univariate(NARROW, var="AGE,YRS_RESIDENCE,CLASS")
この例では、YRS_RESIDENCEの位置統計を計算します。
R> ore.univariate(NARROW, var="YRS_RESIDENCE",stats="location")
この例では、AGEおよびYRS_RESIDENCEの完全な分位統計を計算します。
R> ore.univariate(NARROW, var="AGE,YRS_RESIDENCE",stats="quantiles")