Rでcsvファイルの中身のKS検定をしてついでに相関関数も調べる

タイトルの通りRでcsvファイルを読み込んで、
中身が正規分布に従っているかを調べて、
ついでに適切な方法で相関係数も調べてくれるスクリプトです。

ここで扱うファイルは
例えば1列目年齢、2列目身長、3列目体重みたいなデータを含んでいて、
このスクリプトでは「年齢 vs 身長」「身長 vs 体重」「体重 vs 年齢」の
3つの相関係数を返してくれます。

適切な方法というのは、KS検定の結果によって用いるべき相関係数が違うので、
ピアソンの積率相関係数かスピアマンの順位相関係数かを判断して、
相関係数のcsvファイルを作ってくれます。

書き換えるべき個所は赤字で示してあります。

もっと便利で分かりやすいスクリプトがあるかもしれませんが、
ちょこっと探して見つけられなかったので、自分で作成しました。
windowsでの使用のために作成しました。

このスクリプトを使用していかなる損害を被ったとしても、
作成者である私は一切の責任を負いません。
自己責任でご使用ください。

ファイル名とデータの数を最初にパラメータとして定義して、
変更する箇所を1個所にしてしまえば楽だとは思うのですが、
今は面倒なので気が向いたらそのうち改修します。

KS検定、無相関検定の有効水準はともに0.05にしてあります。
無相関検定でp値が0.05以下の場合のみ、最終的に作成されるcsvファイルに
相関係数が記載されます。

#データが入っているcsvファイルのフルパス
file="C:/Users/imomushi/Desktop/data.csv"

df <- read.csv(file,header=TRUE)

data <- data.frame(df)
#散布図を保存する保存先とファイル名
png("C:/Users/imomushi/Google ドライブ/R/sannpuzu.png",widt=1000,height=1000)
pairs(data)
dev.off()

#データの数を入れる
ks_test <- matrix(0,nrow=3,ncol=1)
#各データの名前
rownames(ks_test) <- c("age","height","weight")
ks_test <- data.frame(ks_test)

#データの数を入れる
for (i in 1:3){
ks_test[i,1] <- ks.test(data[,i],y="pnorm",mean=mean(data[,i]),sd=sd(data[,i]))[2]
}

#KS検定の結果を記載したCSVファイルの保存先とファイル名
write.csv(ks_test,file="C:/Users/imomushi/Google ドライブ/R/ks_test.csv",append=FALSE,quote=TRUE,sep=",",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = NA, qmethod = "double",fileEncoding = "")


#correlation
#make_result_aarray
#nrow=ncol=データの数 を書き入れる
correlation <-  matrix(,nrow=3,ncol=3)
#各データの名前
colnames(correlation)<- c("age","height","weight")
rownames(correlation)<- c("age","height","weight")
p_value_cor=correlation
correlate_p=correlation
method_corr=correlation
correlation<-data.frame(correlation) #相関係数
p_value_cor<-data.frame(p_value_cor) #p-value
correlate_p<-data.frame(correlate_p) #相関係数 if ( p-value < 0.05 )
method_corr<-data.frame(method_corr) #1:ピアソンの積率相関係数, 2:スピアマンの順位相関係数

for (i in 1:3){
  for (j in 1:3){
    if (j>i){
      if ((ks_test[i,1]>0.05) & (ks_test[j,1]>0.05)){
      #ピアソンの積率相関係数
      correlation[i,j]<-cor.test(data[,i],data[,j])[4]
      p_value_cor[i,j]<-cor.test(data[,i],data[,j])[3]
      method_corr[i,j]<-1
        if (p_value_cor[i,j]<0.05){
          correlate_p[i,j]<-cor.test(data[,i],data[,j])[4]
}
      }
      if ((ks_test[i,1]<0.05)|(ks_test[j,1]<0.05)){
      #スピアマンの順位相関係数
      correlation[i,j]<-cor.test(data[,i],data[,j], method="spearman")[4]
      p_value_cor[i,j]<-cor.test(data[,i],data[,j], method="spearman")[3]
      method_corr[i,j]<-2
        if (p_value_cor[i,j]<0.05){
          correlate_p[i,j]<-cor.test(data[,i],data[,j], method="spearman")[4]
}
      }
    }
  }
}

#相関係数の結果を保存するcsvファイルの保存先とファイル名
write.csv(correlate_p,file="C:/Users/imomushi/Google ドライブ/R/r_result.csv",append=FALSE,quote=TRUE,sep=",",eol = "\n", na = "NA", dec = ".", row.names = TRUE,col.names = NA, qmethod = "double",fileEncoding = "")


コメント

このブログの人気の投稿

TypeError: ufunc 'bitwise_xor' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

overleafで画像が表示されない!

エラー: ""C:\U" で始まる文字列の中で 8 進文字なしに '\U' が使われています