ピアソンの相関検定とR値またはR二乗値を総当たりで計算するR関数を作ってみた
ピアソンの相関検定を総当たりしてくれるRの関数を作ってみました。 煮るなり焼くなりご自由にお使いください。ただしご自身の責任で。
ソースコード
cor.all=function(df,name_list,r.pow2=T,digits=4){ #df:データフレームを指定 #name_list:列名のリストをベクトル形式で指定 #r.pow2:R二乗値を返すかどうか #digits:何桁で表示するか cm_p=combinat::combn(name_list,m=2) cor_data=apply(cm_p,2,function(x){ # x=cm_p[,1] df_x=df%>%dplyr::select(x[1],x[2]) df_x=as.data.frame.table(df_x) ct=cor.test(c(df_x[,3]),c(df_x[,4])) if(r.pow2){ q=ct$estimate^2 }else{ q=ct$estimate } paste0(round(q,digits = digits),if(ct$p.value<0.05){ #paste0(ct$estimate^2,if(ct$p.value<0.05){ if(ct$p.value<0.01){ if(ct$p.value<0.001){ " ***" #Pが0.001以下 }else{ " **" #Pが0.01以下 } }else{ " *" #Pが0.05 } }) }) cor_vec=c("",cor_data[1:(length(name_list)-1)]) cor_i=c(1,length(name_list)-1) for(i in 2:(length(name_list)-1)){ cor_i=c(cor_i, cor_i[2*(i-1)-1]+sum(length(name_list):length(name_list)-i+1), cor_i[2*(i-1)-1]+sum(length(name_list):length(name_list)-i+1)+length(name_list)-1-i) cor_vec=c(cor_vec,rep("",i), cor_data[cor_i[2*(i)-1]:cor_i[2*(i)]]) } matrix(cor_i,ncol=2,byrow = T) df_out=matrix(cor_vec,ncol=length(name_list),byrow = T) dimnames(df_out)=list(c(name_list[1:nrow(df_out)]),c(name_list[1:ncol(df_out)])) return(df_out) }
使い方
1.上記のコードをコピペしてから実行します。
2.以下のように変数を指定してください。
cor.all(df,name_list,r.pow2=T,digits=4)
df: データフレームを指定
name_list: 総当たりで相関の関係を調べたい列名をベクトルで指定(例:c("気温", "水温", "湿度")
)
r.pow: TRUE
でR二乗値を計算(デフォルト)、FALSE
でR値を計算します
digits: 表示するR二乗値またはR値の小数点以下の桁数
3.結果がマトリックスで表示されます。P値が0.001以下なら***
、0.01以下なら**
、0.05以下なら*
が数字の右側につきます。