morの解析ブログ

解析疫学、リスクにまつわるメモや計算

「推定」のまわりをさぐる.教科書では「解析はMHにより行う、因子が多ければ重回帰を用いる」という風で詳しい例は少ない.独自(のつもり)な思いつきで具体に試行.
 数理を用いるべきアセスメントにも切り込む.

Rで 曝露グループ egを作る記述

・曝露gをRで扱う試行
 曝露gの特徴は、IDの重複なしに分類して因子効果をみること.


■ dfの名前 、作り方
    eg : 曝露グループ;単純に結合
・具体
      列番号 1     2       3       4         5           6        7        8
   列名   "y" "wat" "tya" "mesi" "tori"     "sake" "tam" "potesara"
* 曝露g 一般型 
  
      wtymtostp  dr[,2]*dr[,3]*dr[,4]*dr[,5]*dr[,6]*dr[,7]*dr[,8]


      から             m       s       t     p 
                          4        6      7      8
  の4因子とする.
 記述
mstpzz<- dr[,4]*dr[,6]*dr[,7]*dr[,8]
mstzz<- dr[,4]*dr[,6]*dr[,7]*(1-dr[,8])
mspzz<-dr[,4]*dr[,6]*(1- dr[,7])*dr[,8]
mszz<-  dr[,4]*dr[,6]*(1- dr[,7])*(1-dr[,8])


mtpzz<- dr[,4]*(1-dr[,6])* dr[,7] *dr[,8]
mtzz<- dr[,4]*(1-dr[,6])* dr[,7] *(1-dr[,8])
mpzz<- dr[,4]*(1-dr[,6])*(1- dr[,7]) *dr[,8]
mzz<- dr[,4]*(1-dr[,6])*(1- dr[,7]) *(1-dr[,8])
 #                m           s        t     p   
stpzz <- (1-dr[,4])*dr[,6]*dr[,7]*dr[,8]    
stzz<- (1-dr[,4])*dr[,6]*dr[,7]*(1-dr[,8]) 
spzz <-(1-dr[,4])*dr[,6]*(1- dr[,7])*dr[,8]
szz<- (1-dr[,7])*(1-dr[,4])*dr[,6]*(1-dr[,8])


tpzz<- (1-dr[,4])*(1-dr[,6])*dr[,7]*dr[,8] 
tzz<- (1-dr[,4])*(1-dr[,6])*dr[,7]*(1-dr[,8])
pzz<-(1-dr[,4])*(1-dr[,6])*(1- dr[,7])*dr[,8]
noezz<- (1-dr[,7])*(1-dr[,4])*(1-dr[,6])*(1-dr[,8])
 # yと16通りの曝露
eg <- cbind(dr[,1],mstpzz,mstzz, mspzz, mszz,mtpzz,mtzz, mpzz, mzz,  stpzz,stzz, spzz,szz,tpzz,tzz,pzz, noezz)  
 ----


■ 曝露gでの発生
繰り返し処理を一部、簡略化した記述が可能.
gのy1と率
 g 分母 sum( eg[ 1:258,1 ]  )、分子 sum(    eg[  1:258,1  ] *  eg[1:258   , i ] )
-- 繰り返し :曝露gごとの率
  asum<-NULL 
 tasum<-NULL
 atos<-NULL
 tatos<-NULL
 rato<-NULL
  for(i in 1:17) {
 asum <- sum( eg[ 1:258,1 ] * eg[1:258 , i ] ) # 分子 ベクトル
 tasum<-rbind(tasum,asum)           # 17行の データができる
   atos <- sum( eg[1:258 , i ])
tatos <- rbind(tatos,atos)                #   17 分母
rato<- rbind(rato,tasum[i]/tatos[i])        #   17個の 割合 
  }
 ----    
 asum<-NULL
 tasum<-NULL
 for(i in 1:17) {
  asum <- sum( eg[ 1:258,1 ] * eg[1:258 , i ] )
  tasum<-rbind(tasum,asum)
}
 # 分子分母 率
  egrate<- cbind(tasum,tatos,rato)
 

  行名はrownames(egrate)<-t(colnames(eg)) で.


・検算 
 注意点 1行目はyなので、除いて和する.
 sum(egrate[2:17,2])
 [1] 258
  → 空白を除いた ID 和に一致.

×

非ログインユーザーとして返信する