私は相関係数とp係数を計算し、それらをそれぞれ2つのマトックスcormatとpmatに格納しました。forループ内のR内のdataframe/data.tableを更新する
スレッショルドを超える相関を検索してデータフレームに格納するコードを作成しました。このコードはありません
threshold <- 0 # Just to test the code
for (i in (1 : (ncol(cormat) - 1))){
for(j in ((i+1) : ncol(cormat))){
if (cormat[i, j] > threshold & !is.na(pmat[i , j]) & pmat[i , j] < 0.05){
Correlations[, ':='(i_n = i, j_n = j, correlation = cormat[i , j], p = pmat[i , j], predictorA =colnames(cormat)[i],
predictorB = colnames(cormat)[j]) ]
}
:
Correlations <- data.table(i_n = numeric(), j_n = numeric(), correlation = numeric(), p = numeric(), predictorA = character(),
predictorB = character())
> class(Correlations)
[1] "data.table" "data.frame"
> glimpse(Correlations)
Observations: 0
Variables: 6
$ i <dbl>
$ j <dbl>
$ correlation <dbl>
$ p <dbl>
$ predictorA <chr>
$ predictorB <chr>
は、結果的に、私はcormat行列とPMATマトリックスをループするコードを作曲:
だから私は、関心の値を格納するためにdata.tableを作成しましたエラーメッセージは表示されませんが、何もしません。
> dim(Correlations)
[1] 0 6
実際には、 deはデータテーブルを更新します。期待どおりの相関関係:
> Correlations[, ':='(i_n = 1, j_n = 2, correlation = 1, p = 2, predictorA ="A",
+ predictorB = "B") ]
> dim(Correlations)
[1] 0 6
次はdplyrを試しました。
for (i in (1 : (ncol(cormat) - 1))){
for(j in ((i+1) : ncol(cormat))){
if (cormat[i, j] > threshold & !is.na(pmat[i , j]) & pmat[i , j] < 0.05){
Correlations <- Correlations %>% mutate(i = i, j = j, correlation = cormat[i , j], p = pmat[i , j], predictorA =colnames(cormat)[i],
predictorB = colnames(cormat)[j])
}
}
}
これは、同様に何もしません:
> dim(Correlations)
[1] 0 6
最後に、私は次のコードを試してみました:
k <- 1
for (i in (1 : (ncol(cormat) - 1))){
for(j in ((i+1) : ncol(cormat))){
if (cormat[i, j] > threshold & !is.na(pmat[i , j]) & pmat[i , j] < 0.05){
Correlations$i_n[k] <- i
Correlations$j_n[k] <- j
Correlations$correlation[k] <- cormat[i , j]
Correlations$p[k] <- pmat[i , j]
Correlations$predictorA[k] <- colnames(cormat)[i]
Correlations$predictorB[k] <- colnames(cormat)[j]
k <- k + 1
}
}
このコードを再びエラーメッセージなしで実行が、再びテーブルの相関を更新しませんでした。
> dim(Correlations)
[1] 0 6
私が間違っていることを理解するのに役立つでしょうか?なぜ私のコードは、ターゲットテーブルの相関関係を更新しないのですか?何が求められているのかを達成するためには、上記のそれぞれのケースでどのように歓迎すべきでしょうか? cormatとPMATの
#サンプル:
#cormat
CustSegmentVBM EmploymentPositionTypeID SafeDepositsLockers StandingOrders CompaniesPayrolls CrossSell Avg_Deposits
CustSegmentVBM 1.0000 -0.094 -0.0260 0.0140 -0.02300 -0.014 -0.022
EmploymentPositionTypeID -0.0940 1.000 0.0470 0.0950 0.17000 0.200 0.140
SafeDepositsLockers -0.0260 0.047 1.0000 0.0660 0.00710 0.150 0.062
StandingOrders 0.0140 0.095 0.0660 1.0000 0.02700 0.530 0.075
CompaniesPayrolls -0.0230 0.170 0.0071 0.0270 1.00000 0.066 0.024
CrossSell -0.0140 0.200 0.1500 0.5300 0.06600 1.000 0.160
Avg_Deposits -0.0220 0.140 0.0620 0.0750 0.02400 0.160 1.000
Avg_Investments -0.0038 0.012 0.0078 0.0054 -0.00006 0.014 0.015
eBranchUser -0.0023 0.003 0.0012 0.0055 -0.00038 0.013 0.020
RFM Score 0.0790 0.077 0.0680 0.3000 -0.00290 0.700 0.130
Avg_Investments eBranchUser RFM Score
CustSegmentVBM -0.00380 -0.00230 0.0790
EmploymentPositionTypeID 0.01200 0.00300 0.0770
SafeDepositsLockers 0.00780 0.00120 0.0680
StandingOrders 0.00540 0.00550 0.3000
CompaniesPayrolls -0.00006 -0.00038 -0.0029
CrossSell 0.01400 0.01300 0.7000
Avg_Deposits 0.01500 0.02000 0.1300
Avg_Investments 1.00000 0.00120 0.0054
eBranchUser 0.00120 1.00000 0.0120
RFM Score 0.00540 0.01200 1.0000
PMAT
CustSegmentVBM EmploymentPositionTypeID SafeDepositsLockers StandingOrders CompaniesPayrolls CrossSell Avg_Deposits
CustSegmentVBM NA 0.0e+00 0.0e+00 0.0e+00 0.0e+00 0 0
EmploymentPositionTypeID 0.0000 NA 0.0e+00 0.0e+00 0.0e+00 0 0
SafeDepositsLockers 0.0000 0.0e+00 NA 0.0e+00 5.6e-07 0 0
StandingOrders 0.0000 0.0e+00 0.0e+00 NA 0.0e+00 0 0
CompaniesPayrolls 0.0000 0.0e+00 5.6e-07 0.0e+00 NA 0 0
CrossSell 0.0000 0.0e+00 0.0e+00 0.0e+00 0.0e+00 NA 0
Avg_Deposits 0.0000 0.0e+00 0.0e+00 0.0e+00 0.0e+00 0 NA
Avg_Investments 0.0075 2.2e-16 3.1e-08 1.4e-04 9.7e-01 0 0
eBranchUser 0.1000 3.5e-02 3.8e-01 9.2e-05 7.9e-01 0 0
RFM Score 0.0000 0.0e+00 0.0e+00 0.0e+00 3.8e-02 0 0
Avg_Investments eBranchUser RFM Score
CustSegmentVBM 7.5e-03 1.0e-01 0.00000
EmploymentPositionTypeID 2.2e-16 3.5e-02 0.00000
SafeDepositsLockers 3.1e-08 3.8e-01 0.00000
StandingOrders 1.4e-04 9.2e-05 0.00000
CompaniesPayrolls 9.7e-01 7.9e-01 0.03800
CrossSell 0.0e+00 0.0e+00 0.00000
Avg_Deposits 0.0e+00 0.0e+00 0.00000
Avg_Investments NA 4.0e-01 0.00014
eBranchUser 4.0e-01 NA 0.00000
RFM Score 1.4e-04 0.0e+00 NA
問題を再現するためのデータはどこですか? 'cormat'と' pmat' – jogo
これは非常に大きな行列です。最初の10個の変数だけを保存したサンプルを投稿しました。ファイルを添付する方法があるかどうかわかりません。 – am7
https://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – jogo