2012-10-04 3 views
0

R에서는 하나의 독립 변수와 9 개의 종속 변수가있는 데이터 집합이 있는데, 분산 형 플롯, 히스토그램과 상관 관계 값을 chart.Correlation()과 같이보고 싶습니다.하지만 원하지 않습니다. 종속 변수 사이의 상관 관계를 볼 필요가 없으므로chart.Correlation independent vs dependent variables visualization

다음 모의 예에서 나는 모든 행과 중요도 별 등 모든 히스토그램을 사용하여 맨 위 행과 왼쪽 열을보고 싶지만 걱정하지 않습니다. 다른 모든 산점도와 상관 값은 원하지 않습니다. 가능한지/하나의 시각화에서 모든 것을 보는 깔끔한 방법입니다. 독립 변수 대 모든 종속 변수 ...?

모의 예 : 보조 노트에

d <- xts(matrix(rnorm(10000),ncol=10), Sys.Date()-1000:1) 
library(PerformanceAnalytics) 
chart.Correlation(d) 

... 내가 chart.Correlation에서 생산 상관 값의 일부의 글꼴 크기에 따라 약간 짜증 얻고있다 ... 어떤 방법이 최소 설정하기 글꼴 크기를 읽을 수 없도록 최대 글꼴 크기 ...

문제 해결에 도움이되는 다른 패키지 (예 : ggplot2 등)도 자유롭게 사용하십시오. 사전에

감사

편집 :

그래서이 오 ... 내가 지금까지 ... 나는 아직도 독립 변수의 히스토그램을 누락 ggplotplyr를 사용하여 함께 온 것입니다 및 multiplot 여기에서 온다 : http://wiki.stdout.org/rcookbook/Graphs/Multiple%20graphs%20on%20one%20page%20(ggplot2)/

지금 대답으로 포함했다 ...하지만 다른 제안/개선 잘 수신 할 것입니다 ....

require(plyr) 
require(ggplot2) 

indep.dep.cor <- function(xts.obj, title=""){ 

     # First column always assumed to be independent 
     df <- data.frame(coredata(xts.obj)) 
     assign('df',df,envir=.GlobalEnv) 

     df.l <- melt(df, id.vars=colnames(df)[1], measure.vars=colnames(df)[2:ncol(df)]) 
     assign('df.l',df.l, envir=.GlobalEnv) 

     cor.vals <- ddply(df.l, c("variable"), summarise, round(cor(df[,1],value),3)) 
     stars <- ddply(df.l, c("variable"), summarise, symnum(cor.test(df[,1],value)$p.value, corr = FALSE, na = FALSE, cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " "))) 
     cor.vals$stars <- stars[,2] 
     assign('cor.vals',cor.vals,envir=.GlobalEnv) 

     bin.w <- min((ddply(df.l,c("variable"),summarise,diff(range(value))/30))[,2]) 

     m1 <- ggplot(df.l,aes_string(x="value"))+ 
      facet_grid(.~variable)+ 
      stat_density(aes(y=..density..),fill=NA, colour="red", size=1.2)+ 
      geom_histogram(aes(y=..density..),fill="white", colour="black", binwidth=bin.w)+ 
      opts(title=title) 

     m2 <- ggplot(df.l,aes_string(x=colnames(df.l)[1], y="value"))+ 
      facet_grid(.~variable)+geom_point(aes(alpha=0.2))+ 
      opts(legend.position="none")+ 
      geom_text(data=cor.vals,aes(label=paste(cor.vals[,2],cor.vals[,3]),size=abs(cor.vals[,2])*2,colour=cor.vals[,2]),x=Inf,y=Inf,vjust=1,hjust=1,show_guide=FALSE)+ 
       scale_colour_gradient(low = "red", high="blue")+ 
       geom_smooth(method="loess") 

     multiplot(m1,m2,cols=1) 
} 

indep.dep.cor(d) 
01 23,516,
+0

oups 그것이 포함 된 패키지를 추가하는 것을 잊어 버렸습니다 ... ie PerformanceAnalytics ... 질문에 –

+0

을 포함하도록 편집했습니다. 이전 의견을 삭제했습니다. 지금. 라이브러리 (plyr)를 포함하십시오 ... 그리고 아무것도 표시되지 않습니다. 'multiplots'는 무엇을해야합니까? –

+0

multiplot은 두 번째 또는 그 이상의 플롯을 동일한 출력에 함께 넣습니다. –

답변

0

그래서 이것은 내가 지금까지 ggplotplyr를 사용하여 함께 온 것입니다 ... 나는 아직도 오 ... 독립 변수의 히스토그램을 누락하고 multiplot 여기에서 온다 : http://wiki.stdout.org/rcookbook/Graphs/Multiple%20graphs%20on%20one%20page%20(ggplot2)/

require(plyr) 
require(ggplot2) 

indep.dep.cor <- function(xts.obj, title=""){ 

     # First column always assumed to be independent 
     df <- data.frame(coredata(xts.obj)) 
     assign('df',df,envir=.GlobalEnv) 

     df.l <- melt(df, id.vars=colnames(df)[1], measure.vars=colnames(df)[2:ncol(df)]) 
     assign('df.l',df.l, envir=.GlobalEnv) 

     cor.vals <- ddply(df.l, c("variable"), summarise, round(cor(df[,1],value),3)) 
     stars <- ddply(df.l, c("variable"), summarise, symnum(cor.test(df[,1],value)$p.value, corr = FALSE, na = FALSE, cutpoints = c(0, 0.001, 0.01, 0.05, 0.1, 1), symbols = c("***", "**", "*", ".", " "))) 
     cor.vals$stars <- stars[,2] 
     assign('cor.vals',cor.vals,envir=.GlobalEnv) 

     bin.w <- min((ddply(df.l,c("variable"),summarise,diff(range(value))/30))[,2]) 

     m1 <- ggplot(df.l,aes_string(x="value"))+ 
      facet_grid(.~variable)+ 
      stat_density(aes(y=..density..),fill=NA, colour="red", size=1.2)+ 
      geom_histogram(aes(y=..density..),fill="white", colour="black", binwidth=bin.w)+ 
      opts(title=title) 

     m2 <- ggplot(df.l,aes_string(x=colnames(df.l)[1], y="value"))+ 
      facet_grid(.~variable)+geom_point(aes(alpha=0.2))+ 
      opts(legend.position="none")+ 
      geom_text(data=cor.vals,aes(label=paste(cor.vals[,2],cor.vals[,3]),size=abs(cor.vals[,2])*2,colour=cor.vals[,2]),x=Inf,y=Inf,vjust=1,hjust=1,show_guide=FALSE)+ 
       scale_colour_gradient(low = "red", high="blue")+ 
       geom_smooth(method="loess") 

     multiplot(m1,m2,cols=1) 
} 

indep.dep.cor(d)