Rで統計(メモ)

難しいことはわからないけど、とにかくRでやってみようというページ

ピアソンの積立相関係数(ベイズ推定)

  • 相関分析
    • データの格納
    • ピアソンの積率相関
    • ピアソンの積率相関 ver.ベイズ
      • stanコード格納
      • MCMC実行

相関分析

データの格納

score_1<-SNFC_1$btheta
score_2<-SNFC_1$kakusan
score<-scale(cbind(score_1,score_2))
ni<-1317
nt<-2
data<-list(y=score,ni=ni,nt=nt)
par<-c("phi")
war<-1000
ite<-21000
see<-1234
dig<-3
cha<-5
続きを読む

3人以上の評価者間の一致度(Fleissのκ係数)

Fleissのκ係数

#データ読み込み
library(readr)
dat1 <- read_csv("csv1.csv")
#欠損値除去
dat1=na.omit(dat1)
#変数型の変更
dat1$Mscore=as.numeric(dat1$Mscore)
dat1$Msitu=as.numeric(dat1$Msitu)
dat1$Nscore=as.numeric(dat1$Nscore)
dat1$Nsitu=as.numeric(dat1$Nsitu)
dat1$Tscore=as.numeric(dat1$Tscore)
dat1$Tsitu=as.numeric(dat1$Tsitu)

#データセット作成
dat_score=subset(dat1,select = c("Mscore","Nscore","Tscore"))	#扱われ方
dat_situ=subset(dat1,select = c("Msitu","Nsitu","Tsitu"))	#場面

#α係数
library(psych)     # psych パッケージの読み込み
alpha(dat_score)	#クロンバックのアルファ係数	
alpha(dat_situ)

#Fleissのκ係数
install.packages("irr", dependencies = TRUE)
library(irr)
kappam.fleiss(dat_score)
kappam.fleiss(dat_situ)

#基準#####################################
#< 0 Poor agreement
#0.01 ??? 0.20 Slight agreement
#0.21 ??? 0.40 Fair agreement
#0.41 ??? 0.60 Moderate agreement
#0.61 ??? 0.80 Substantial agreement
#0.81 ??? 1.00 Almost perfect agreement
##########################################

対応のある分散分析(1要因)forベイズ

対応のある分散分析(1要因)

データの読み込み

#作業ディレクトリの設定(適宜変更)
setwd("C:/Users/turid/OneDrive/ドキュメント")
#データ読み込み
library(readr)
SNFC_1 <- read_csv("SNFC.csv")
library(rstan)                 #パッケージrstanの呼び出し
dat1=na.omit(SNFC_1)
x <- subset(dat1,select = c("kakusan","tokushu","tankyugouri"))
n <- nrow(x)
a=3
data <-list(N = n, X = x)

stanコード格納

stancode <- "
data{
int<lower=0> N;
vector[3] X[N];
}

parameters{
vector[3] mu;
real<lower=0> sig[3];
real<lower=-1,upper=1> rho;
}

transformed parameters{
matrix[3,3] Sigma;
Sigma[1,1] = sig[1]*sig[1];
Sigma[2,2] = sig[2]*sig[2];
Sigma[3,3] = sig[3]*sig[3];
Sigma[1,2] = sig[1]*sig[2]*rho;
Sigma[1,3] = sig[1]*sig[3]*rho;
Sigma[2,3] = sig[2]*sig[3]*rho;
Sigma[2,1] = Sigma[1,2];
Sigma[3,1] = Sigma[1,3];
Sigma[3,2] = Sigma[2,3];
}

model{
X ~ multi_normal(mu, Sigma);
rho ~ uniform(-1,1);
sig ~ cauchy(0,2.5);
}

generated quantities{
real delta21;
real delta31;
real delta32;
real d_overC1;
real d_overC2;
real d_overC3;

delta21 = mu[2] - mu[1];
delta31 = mu[3] - mu[1];
delta32 = mu[3] - mu[2];
d_overC1 = (delta21>0? 1:0);
d_overC2 = (delta31>0? 1:0);
d_overC3 = (delta32>0? 1:0);
}
"
rstan_options(auto_write = TRUE)
options(mc.cores = parallel::detectCores())
fit <- stan(model_code = stancode, iter=400, warmup=100, chains=4, data = data)
print(fit, digits_summary = 2) 

連言命題が正しい確率

df<-data.frame(extract(fit))
t<-sum((df$mu.3 -df$mu.1 > 0) & (df$mu.3 -df$mu.2 > 0) =="TRUE")
round(t/ nrow(df),3)
t<-sum((df$mu.1 -df$mu.3 > 0) & (df$mu.1 -df$mu.2 > 0)  =="TRUE")
round(t/ nrow(df),3)

特定のパラメーターだけプロット

library(ggmcmc)
df_param <- ggs(fit)
df_param %>% {
  print(class(.))
  dplyr::tbl_df(.)
}
fit_param_mu <- df_param %>% dplyr::filter(grepl("^mu", Parameter))
ggs_caterpillar(fit_param_mu)

頻度論的な統計手法のオルタナティブ

  • 相関分析
    • データの格納
    • ピアソンの積率相関
    • ピアソンの積率相関 ver.ベイズ
      • stanコード格納
      • MCMC実行
  • 2群の平均値の差の検討(性差の検討を例に)
    • データの格納
    • 対応のないt検定
    • 対応のないt検定 ver.ベイズ
      • stanコード格納

相関分析

データの格納

score_1<-SNFC_1$btheta
score_2<-SNFC_1$kakusan
score<-scale(cbind(score_1,score_2))
ni<-1317
nt<-2
data<-list(y=score,ni=ni,nt=nt)
par<-c("phi")
war<-1000
ite<-21000
see<-1234
dig<-3
cha<-5
続きを読む

通常の因子分析

  • KMOとMSAの確認 サンプリングの適切性を検討する
  • 因子数の検討
    • 平行分析(通常版/ポリコリック相関行列版)
    • スクリープロット
    • 固有値
  • 探索的因子分析
    • 因子数1の検討(通常版/ポリコリック相関行列版)
    • 信頼性係数の算出(アルファとオメガ)
  • 確認的因子分析
  • 因子得点(平均)の作成
  • 因子間の相関係数

KMOとMSAの確認 サンプリングの適切性を検討する

kmo <- function(x)                  # データ行列またはデータフレーム
{
  x <- subset(x, complete.cases(x))     # 欠損値を持つケースを除く
  r <- cor(x)                             # 相関係数行列
  r2 <- r^2                               # 相関係数行列の要素の二乗
  i <- solve(r)                           # 相関係数行列の逆行列
  d <- diag(i)                            # 対角成分
  p2 <- (-i/sqrt(outer(d, d)))^2          # 偏相関係数行列の要素の二乗
  diag(r2) <- diag(p2) <- 0               # 対角成分は計算には用いない
  KMO <- sum(r2)/(sum(r2)+sum(p2))
  MSA <- colSums(r2)/(colSums(r2)+colSums(p2))
  return(list(KMO=KMO, MSA=MSA))
}
kmo(dat) #0.8超えてればOK

因子数の検討

平行分析(通常版/ポリコリック相関行列版)

fa.parallel(dat)
fa.parallel.poly(dat)
続きを読む

データの読み込みと整形

データの読み込みと整形~標準編~

データの読み込み

#作業ディレクトリの設定(適宜変更)
setwd("C:/Users/turid/OneDrive/ドキュメント/R")
#データ読み込み
library(readr)
SNFC_1 <- read_csv("SNFC_5.csv")
View(SNFC_1)

データセットの作成と確認

#データセットの作成
dat <- data.frame(SNFC_1[,8:22]) #8列目~22列目の変数を取り出し
#要約統計量を確認
summary(dat)

データの読み込みと整形~大規模データ編~

データの読み込み

library(data.table)
dat = fread("CY6_MS_CMB_STU_COG.csv")

データセットの作成

japan=subset(dat,CNTRYID=="392",c(CNTRYID,CNT,CNTSCHID,CNTSTUID))