3

相関係数の巨大な行列をプロットしようとしていますが、現在、プロットは次のようになっています。 一部のセルに相関係数がないことに注意してください

一部のセルに相関係数がないことに注意してください(理由がわからない限り、プロットの対称性の欠如は今のところ無視してください)。実際には、値が欠落しているわけではなく、相関係数の値によってスケーリングされているため、値が小さすぎて表示できないと思います。

chart.Correlation()のドキュメントを見ると、chart.Correlation()のコンテンツの多くがモデル化されている関数を見つけることができました。

panel.cor <- function(x, y, digits=2, prefix="", cex.cor)
{
    usr <- par("usr"); on.exit(par(usr))
    par(usr = c(0, 1, 0, 1))
    r <- abs(cor(x, y))
    txt <- format(c(r, 0.123456789), digits=digits)[1]
    txt <- paste(prefix, txt, sep="")
    if(missing(cex.cor)) cex <- 0.8/strwidth(txt)    
    test <- cor.test(x,y)
    # borrowed from printCoefmat
    Signif <- symnum(test$p.value, corr = FALSE, na = FALSE,
                  cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1),
                  symbols = c("***", "**", "*", ".", " "))

    text(0.5, 0.5, txt, cex = cex * r)
    text(.8, .8, Signif, cex=cex, col=2)
}
pairs(USJudgeRatings[,c(2:3,6,1,7)], lower.panel=panel.smooth, upper.panel=panel.cor)

私が変更した場合:

text(0.5, 0.5, txt, cex = cex * r)

に:

text(0.5, 0.5, txt, cex = 0.8)

おおよそ探している効果が得られます。問題は、chart.Correlation()自体を使用してこのパラメーターを変更する方法がわからないことです。これを発行するのは理にかなっていますか?

4

1 に答える 1

3

これは、関数を変更して必要なものを許可するハックです。cexこれにより、値をに変更できる関数にユーザー設定可能な指数引数が追加されcex*[correlation]^cex.cor.scaleます。

...処理方法が原因で警告が表示されます。彼らは迷惑ですが無害です。

おそらく、メンテナに連絡して、機能を強化する意思があるかどうかを尋ねるか、パッケージの独自の変更バージョンの作成を開始するのが最善でしょう。

編集:関連する行へのわずかに堅牢な変更

library("PerformanceAnalytics")
## turn the function into a character string
tmpstr <- deparse(chart.Correlation)
## modify the relevant lines
panelcorline <- grep("^ *panel.cor",tmpstr)
tmpstr[panelcorline] <- paste(tmpstr[panelcorline],"cex.cor.scale=1,")
rscaleline <- grep("^ *text\\(0.5",tmpstr)
tmpstr[rscaleline] <- gsub("cex \\* r","cex*r^cex.cor.scale",tmpstr[rscaleline])
## convert back to a function (don't mask the original function)
my.chart.Correlation <- eval(parse(text=tmpstr))

それをテストしてください:

data(managers)
chart.Correlation(managers[,1:8], histogram=TRUE, pch="+")
## no scaling
my.chart.Correlation(managers[,1:8], histogram=TRUE, pch="+",cex.cor.scale=0)
## enhanced scaling
my.chart.Correlation(managers[,1:8], histogram=TRUE, pch="+",cex.cor.scale=2)
于 2012-10-17T00:23:23.597 に答える