2標本のグラフ、記述統計
下のサイトに移転しました
単回帰分析を一括で実行する方法
tokei.net 全人類が分かる統計学より
to-kei.net
上記サイトに自分なりの注釈をつけました。
sampleもまったく同じです。
番号 <- c(1:30) 年齢 <- c(22,23,24,25,27,28,28,29,30,31,32,32,33,33,34,36,37,37,38,39,40,42,46,49,50,53,56,58,64,65) 血圧 <- c(110,128,104,112,108,126,126,104,125,120,116,124,106,134,128,128,116,132,134,116,120,130,126,140,156,124,118,144,142,144) 肺活量 <- c(110,128,104,112,108,126,126,104,125,120,116,124,106,134,128,128,116,132,134,116,120,130,126,140,156,124,118,144,142,144) 性別 <- c("M","M","F","F","M","F","F","F","F","F","M","M","F","F","M","M","M","M","F","M","F","F","M","F","M","M","M","M","F","F") 病気 <- c(1,1,0,0,0,0,1,1,1,1,1,0,0,0,1,1,1,1,0,1,1,1,0,0,1,1,1,0,1,0) 体重 <- c(79,65,53,45,80,50,43,55,47,49,64,61,48,41,70,55,70,90,39,86,50,65,58,45,60,71,62,51,40,42) data <- data.frame(番号, 年齢, 血圧, 肺活量, 性別, 病気, 体重) head(data, n=3) dat <- data names(dat)[6] <- "Y" # 6列目をYに変更 #まず関数を作成して、どんな解析の、どこの結果を記載するのか決めます #func01は、関数名なのでなんでもOK、他は特に変更する必要なし func01 <- function(dat,filename,response) { ans <- lm(dat$Y~.,data=dat) #重回帰 s.ans=summary(ans) #重回帰の要約 coe <- s.ans$coef #重回帰の結果(係数、標準誤差、t値、p値) CI.low <- coe[,1]-1.96*coe[,2] #係数の検定結果 95%信頼区間下限 CI.up <- coe[,1]+1.96*coe[,2] #係数の検定結果 95%信頼区間上限 aic <- AIC(ans) #AIC N <- nrow(dat) #セットの行数 result <- cbind(coe,CI.low,CI.up,aic,N) #95%信頼区間とAICを合体 result[2:nrow(result),c(7,8)]="" #2行目以降の7、8列目を空白にする・・・? res <- paste("Y = ",response) #単回帰の結果の1行目の文字列になる #ファイルの構成 write.table(res,filename,append=T,quote=F,sep=",",row.names=F,col.names=F) write.table(matrix(c("",colnames(result)),nrow=1),filename,append=T,quote=F,sep=",",row.names=F,col.names=F) write.table(result,filename,append=T,quote=F,sep=",",row.names=T,col.names=F) write.table("",filename,append=T,quote=F,sep=",",row.names=F,col.names=F) } filename <- "てすとファイル1.csv" #ファイル名を作成 df1 <- dat[,-1] #番号をカット(入れてても問題なし) for(i in 1:ncol(df1)) #列数分繰り返す(6回) { if(i != 5) #5回目(5行目)を回避 { #単回帰を繰り返すために2列のデータフレームを作成(ここでは5列目が目的変数) dat2 <- df1[ , c(5,i)] colnames(dat2)[1] = "Y" #2列になったdatの1列目が目的変数 func01(dat2, filename, "病気") #各解析結果の1行目Y =の後に目的変数名「病気」を挿入 } } #if(i != 5) #5回目(5行目)を回避しなくてもやれる! dat <- data names(dat)[6] <- "Y" # 6列目をYに変更 filename <- "てすとファイル2.csv" df2 <- dat[,-1] #IDをカット 入れてても大丈夫 for(i in 1:ncol(df2)) #列数分繰り返す(6回) { dat3 <- df2[,c(5,i)] colnames(dat3)[1] = "Y" #datが2列 func01(dat3, filename, "病気") #ここで目的変数を挿入 } #同じ変数同士で、fitし過ぎているので注意されます #essentially perfect fit!!!
エラーバー付きのグラフ ggplot2
下記のサイトに移転しました
簡単なエラーバーの描き方
下のサイトに移転しました
比較した箱ひげにアスタリスクを入れる
下記のサイトに移転しました
sample
解析の練習で使うデータサンプル集 随時更新
sample1
症例 <- c(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20) 性別 <- c("男性","男性","女性","男性","男性","女性","男性","男性","男性","男性","女性","女性","女性","女性","男性","女性","女性","女性","女性","男性") 治療 <- c("B","A","B","A","A","B","B","A","A","B","A","B","B","B","A","B","B","B","A","A") 治療前BP <- c(160,135,177,141,142,155,175,145,149,155,135,156,170,150,138,160,150,180,155,140) 治療後BP <- c(148,133,160,138,139,145,157,142,142,145,132,145,157,142,134,150,140,160,149,136) BP変化量 <- c(12,2,17,3,3,10,18,3,7,10,3,11,13,8,4,10,10,20,6,4) sample1 <- data.frame(症例,性別,治療,治療前BP,治療後BP,BP変化量 )
sample2
対応のある2群
ID <- c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) pre <- c(18, 8, 14, 15, 16, 13, 23, 20, 14, 20) post <- c(23, 27, 15, 22, 15, 20, 20, 20, 18, 25) sample2 <- data.frame(ID, pre, post)
sample3
独立した2群
グループ <- c("A","A","B","B","A","B","A","B","B","A","A","A","B","A","B","B","B","B","A","A") ROMT <- c(18, 8, 23, 27, 14, 15, 15, 22, 15, 16, 13, 23, 20, 20, 20, 20, 18, 25, 14, 20) sample3 <- data.frame(グループ, ROMT)
sample4
クロス表
sample4 判定 <- c(rep("非該当",30), rep("要支援", 25)) 歩行 <- c(rep("可能", 20), rep("不可能", 10), rep("可能", 10), rep("不可能", 15)) sample4 <- data.frame(判定, 歩行)
テーブルをベクトルに変換
症例 性別 治療 治療前BP 治療後BP BP変化量 1 1 男性 B 160 148 12 2 2 男性 A 135 133 2 3 3 女性 B 177 160 17 4 4 男性 A 141 138 3 5 5 男性 A 142 139 3 6 6 女性 B 155 145 10 7 7 男性 B 175 157 18 8 8 男性 A 145 142 3 9 9 男性 A 149 142 7 10 10 男性 B 155 145 10 11 11 女性 A 135 132 3 12 12 女性 B 156 145 11 13 13 女性 B 170 157 13 14 14 女性 B 150 142 8 15 15 男性 A 138 134 4 16 16 女性 B 160 150 10 17 17 女性 B 150 140 10 18 18 女性 B 180 160 20 19 19 女性 A 155 149 6 20 20 男性 A 140 136 4
上記テーブルの性別を切り出し
テキスト形式のベクトルに変換
data <- read.table("clipboard", header = T) 性別2 <- factor(data$性別) install.packages("stringr") library(stringr) 性別3 <- str_replace_all(性別2, pattern="k", replacement="*") #性別3をwordで置換 スペースを,に変換 性別 <-c("男性","男性","女性","男性","男性","女性","男性","男性","男性","男性", "女性","女性","女性","女性","男性","女性","女性","女性","女性","男性")