必要なlibraryの読み込み
library(tidyverse)
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.1 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.1 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the ]8;;http://conflicted.r-lib.org/conflicted package]8;; to force all conflicts to become errors
library(readxl)
library(tableone)
library(lubridate)
library(skimr)
library(svglite)
library(haven)
library(summarytools)
## Warning in system2("/usr/bin/otool", c("-L", shQuote(DSO)), stdout = TRUE):
## 命令 ''/usr/bin/otool' -L
## '/Library/Frameworks/R.framework/Resources/library/tcltk/libs//tcltk.so''
## の実行は状態 1 を持ちました
##
## 次のパッケージを付け加えます: 'summarytools'
##
## 以下のオブジェクトは 'package:tibble' からマスクされています:
##
## view
library(naniar)
##
## 次のパッケージを付け加えます: 'naniar'
##
## 以下のオブジェクトは 'package:skimr' からマスクされています:
##
## n_complete
library(devtools)
## 要求されたパッケージ usethis をロード中です
library(reader)
## 要求されたパッケージ NCmisc をロード中です
##
## 次のパッケージを付け加えます: 'reader'
##
## 以下のオブジェクトは 'package:NCmisc' からマスクされています:
##
## cat.path, get.ext, rmv.ext
library(stringr)
library(missForest)
library(mice)
##
## 次のパッケージを付け加えます: 'mice'
##
## 以下のオブジェクトは 'package:stats' からマスクされています:
##
## filter
##
## 以下のオブジェクトは 'package:base' からマスクされています:
##
## cbind, rbind
library(geepack)
library(ggplot2)
library(cobalt)
## cobalt (Version 4.4.1, Build Date: 2022-11-03)
library(tableone)
library(sandwich)
library(survey)
## 要求されたパッケージ grid をロード中です
## 要求されたパッケージ Matrix をロード中です
##
## 次のパッケージを付け加えます: 'Matrix'
##
## 以下のオブジェクトは 'package:tidyr' からマスクされています:
##
## expand, pack, unpack
##
## 要求されたパッケージ survival をロード中です
##
## 次のパッケージを付け加えます: 'survey'
##
## 以下のオブジェクトは 'package:graphics' からマスクされています:
##
## dotchart
library(WeightIt)
library(twang)
## To reproduce results from prior versions of the twang package, please see the version="legacy" option described in the documentation.
library(naniar)
pacman::p_load(norm2, miceadds, lmtest, car, ROCR, pROC)
データ読み込み
data <- read_excel("varix_analysis_0412.xlsx")
データの確認
str(data)
## tibble [791 × 48] (S3: tbl_df/tbl/data.frame)
## $ hosp_id : num [1:791] 1001 1001 1001 1001 1001 ...
## $ pt_id : num [1:791] 1 2 4 5 6 9 12 14 16 17 ...
## $ ad_num : num [1:791] 1 1 1 1 1 1 1 1 1 1 ...
## $ year : num [1:791] 2012 2011 2011 2010 2017 ...
## $ antibio_exposure : num [1:791] 0 0 0 0 0 0 0 0 1 0 ...
## $ antibio_type_a : chr [1:791] "99" "99" "99" "99" ...
## $ antibio_type_b : chr [1:791] "99" "99" "99" "99" ...
## $ antibio_term : num [1:791] 0 0 0 0 0 0 0 0 5 0 ...
## $ age_num : num [1:791] 50 80 44 67 47 73 65 41 38 62 ...
## $ sex : chr [1:791] "M" "M" "M" "F" ...
## $ bmi_num : num [1:791] NA 25.3 14.5 NA 21 ...
## $ smoking : num [1:791] 0 0 240 0 270 1000 0 210 0 0 ...
## $ brthel_cate : num [1:791] NA 2 1 NA NA 0 1 1 1 2 ...
## $ child_numl : num [1:791] 11 6 8 NA 11 9 6 8 NA 9 ...
## $ child_score : chr [1:791] "c" "a" "b" NA ...
## $ cci_num : num [1:791] 4 4 4 4 4 4 5 5 4 4 ...
## $ malignancy : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ hd : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ hcc : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ alocohol : num [1:791] 1 0 0 0 1 1 0 1 1 0 ...
## $ past_varix_rup : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ antiplate_user_01: num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ anticoag_user01 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ nsaids_user01 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ steroid_user01 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ ppi_user01 : num [1:791] 1 1 1 1 1 1 1 1 1 1 ...
## $ map_day0 : num [1:791] 0 2 6 2 0 4 0 6 0 8 ...
## $ shock : num [1:791] 1 0 1 1 0 1 0 1 0 NA ...
## $ t_bil : num [1:791] 2.2 1.2 3.4 1.2 7.5 2.2 0.4 1.5 1.8 0.5 ...
## $ ast : num [1:791] 217 31 129 52 112 55 55 56 169 56 ...
## $ alt : num [1:791] 63 22 46 36 53 20 67 12 36 30 ...
## $ wbc : num [1:791] 7400 5000 9100 3900 9800 11100 2900 8700 9300 14600 ...
## $ hb : num [1:791] 6.9 10.8 10.7 6.3 12.2 5.6 5.7 4.9 10.9 3.7 ...
## $ plt : num [1:791] 115 77 162 63 69 124 61 129 90 437 ...
## $ alb : num [1:791] 2.2 3.2 2.9 2.8 2.6 2.3 4 2.2 3.2 2.1 ...
## $ eGFR : num [1:791] 58 57.7 112.4 123.6 89.3 ...
## $ eGFR30 : num [1:791] 0 0 0 0 0 0 1 0 0 0 ...
## $ crp : num [1:791] 0.92 0.29 0.29 0.29 0.1 NA 0.04 0.44 0.09 0.17 ...
## $ pt : num [1:791] 37.8 55 37.8 74.6 28.5 45.9 71.5 43.6 66.7 51.3 ...
## $ aptt : num [1:791] 29.4 29 35.3 30.1 37.8 27.5 25 24.8 20.8 30.9 ...
## $ death_day2 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ ivr_day2 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ ope_day2 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ ivr_ope_day2 : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ rebleed_end_hemo : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ sepsis : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ outcome : num [1:791] 0 0 0 0 0 0 0 0 0 0 ...
## $ los : num [1:791] 12 7 10 3 6 8 5 8 5 2 ...
データの整理
df <-
data|> #miceパッケージが順序ありの因子型でないと読めないためこれを指定。
mutate(
hosp_id=as.integer(hosp_id),
year=as.integer(year),
pt_id=as.integer(pt_id),
ad_num=as.integer(ad_num),
antibio_exposure=as.integer(antibio_exposure), #geeglmを回すにはfactorでは回らない
antibio_type_a= factor(antibio_type_a, levels = c("a", "b","c","d","e","f","g","h","i","99")),
antibio_type_b= factor(antibio_type_b, levels = c("c","d","f","h","i","99")),
antibio_term= as.integer(antibio_term ),
age_num=as.integer(age_num),
sex= factor(sex, levels = c("M", "F")),
smoking= as.integer(smoking),
brthel_cate= factor(brthel_cate, levels = c("0", "1", "2")),
child_numl= as.integer(child_numl),
child_score=factor(child_score, levels = c("a", "b", "c")),
cci_num=as.integer(cci_num),
malignancy=factor(malignancy),
hd=factor(hd),
hcc=factor(hcc),
alocohol=factor(alocohol),
past_varix_rup=factor(past_varix_rup),
antiplate_user_01=factor(antiplate_user_01),
anticoag_user01=factor(anticoag_user01),
nsaids_user01=factor(nsaids_user01),
steroid_user01=factor(steroid_user01),
ppi_user01=factor(ppi_user01),
map_day0= as.integer(map_day0),
shock=factor(shock),
eGFR30=factor(eGFR30),
death_day2=factor(death_day2),
ivr_day2=factor(ivr_day2),
ope_day2=factor(ope_day2),
ivr_ope_day2=factor(ivr_ope_day2),
rebleed_end_hemo=factor(rebleed_end_hemo),
sepsis=factor(sepsis),
outcome=factor(outcome),
los=as.integer(los)
)
整理後の確認
str(df)
## tibble [791 × 48] (S3: tbl_df/tbl/data.frame)
## $ hosp_id : int [1:791] 1001 1001 1001 1001 1001 1001 1001 1001 1001 1001 ...
## $ pt_id : int [1:791] 1 2 4 5 6 9 12 14 16 17 ...
## $ ad_num : int [1:791] 1 1 1 1 1 1 1 1 1 1 ...
## $ year : int [1:791] 2012 2011 2011 2010 2017 2010 2013 2014 2016 2019 ...
## $ antibio_exposure : int [1:791] 0 0 0 0 0 0 0 0 1 0 ...
## $ antibio_type_a : Factor w/ 10 levels "a","b","c","d",..: 10 10 10 10 10 10 10 10 4 10 ...
## $ antibio_type_b : Factor w/ 6 levels "c","d","f","h",..: 6 6 6 6 6 6 6 6 6 6 ...
## $ antibio_term : int [1:791] 0 0 0 0 0 0 0 0 5 0 ...
## $ age_num : int [1:791] 50 80 44 67 47 73 65 41 38 62 ...
## $ sex : Factor w/ 2 levels "M","F": 1 1 1 2 1 1 1 2 1 2 ...
## $ bmi_num : num [1:791] NA 25.3 14.5 NA 21 ...
## $ smoking : int [1:791] 0 0 240 0 270 1000 0 210 0 0 ...
## $ brthel_cate : Factor w/ 3 levels "0","1","2": NA 3 2 NA NA 1 2 2 2 3 ...
## $ child_numl : int [1:791] 11 6 8 NA 11 9 6 8 NA 9 ...
## $ child_score : Factor w/ 3 levels "a","b","c": 3 1 2 NA 3 2 1 2 NA 2 ...
## $ cci_num : int [1:791] 4 4 4 4 4 4 5 5 4 4 ...
## $ malignancy : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ hd : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ hcc : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ alocohol : Factor w/ 2 levels "0","1": 2 1 1 1 2 2 1 2 2 1 ...
## $ past_varix_rup : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ antiplate_user_01: Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ anticoag_user01 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ nsaids_user01 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ steroid_user01 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ ppi_user01 : Factor w/ 2 levels "0","1": 2 2 2 2 2 2 2 2 2 2 ...
## $ map_day0 : int [1:791] 0 2 6 2 0 4 0 6 0 8 ...
## $ shock : Factor w/ 2 levels "0","1": 2 1 2 2 1 2 1 2 1 NA ...
## $ t_bil : num [1:791] 2.2 1.2 3.4 1.2 7.5 2.2 0.4 1.5 1.8 0.5 ...
## $ ast : num [1:791] 217 31 129 52 112 55 55 56 169 56 ...
## $ alt : num [1:791] 63 22 46 36 53 20 67 12 36 30 ...
## $ wbc : num [1:791] 7400 5000 9100 3900 9800 11100 2900 8700 9300 14600 ...
## $ hb : num [1:791] 6.9 10.8 10.7 6.3 12.2 5.6 5.7 4.9 10.9 3.7 ...
## $ plt : num [1:791] 115 77 162 63 69 124 61 129 90 437 ...
## $ alb : num [1:791] 2.2 3.2 2.9 2.8 2.6 2.3 4 2.2 3.2 2.1 ...
## $ eGFR : num [1:791] 58 57.7 112.4 123.6 89.3 ...
## $ eGFR30 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 2 1 1 1 ...
## $ crp : num [1:791] 0.92 0.29 0.29 0.29 0.1 NA 0.04 0.44 0.09 0.17 ...
## $ pt : num [1:791] 37.8 55 37.8 74.6 28.5 45.9 71.5 43.6 66.7 51.3 ...
## $ aptt : num [1:791] 29.4 29 35.3 30.1 37.8 27.5 25 24.8 20.8 30.9 ...
## $ death_day2 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ ivr_day2 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ ope_day2 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ ivr_ope_day2 : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ rebleed_end_hemo : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ sepsis : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ outcome : Factor w/ 2 levels "0","1": 1 1 1 1 1 1 1 1 1 1 ...
## $ los : int [1:791] 12 7 10 3 6 8 5 8 5 2 ...
確認その2
dfSummary(df)
## Data Frame Summary
## df
## Dimensions: 791 x 48
## Duplicates: 0
##
## ------------------------------------------------------------------------------------------------------------------------
## No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
## ---- ------------------- ----------------------------- --------------------- ---------------------- ---------- ---------
## 1 hosp_id Mean (sd) : 1021.6 (21.9) 44 distinct values : 791 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 1001 < 1017 < 1075 :
## IQR (CV) : 20 (0) : : :
## : : : : : :
##
## 2 pt_id Mean (sd) : 416.6 (243.1) 680 distinct values : . 791 0
## [integer] min < med < max: : : : . : : : : (100.0%) (0.0%)
## 1 < 425 < 839 : : : : : : : :
## IQR (CV) : 431 (0.6) : : : : : : : : .
## : : : : : : : : :
##
## 3 ad_num Mean (sd) : 1.2 (0.6) 1 : 673 (85.1%) IIIIIIIIIIIIIIIII 791 0
## [integer] min < med < max: 2 : 79 (10.0%) I (100.0%) (0.0%)
## 1 < 1 < 6 3 : 26 ( 3.3%)
## IQR (CV) : 0 (0.5) 4 : 9 ( 1.1%)
## 5 : 2 ( 0.3%)
## 6 : 2 ( 0.3%)
##
## 4 year Mean (sd) : 2015.9 (3.8) 13 distinct values : . : 791 0
## [integer] min < med < max: : : : (100.0%) (0.0%)
## 2010 < 2016 < 2022 : : . : . :
## IQR (CV) : 7 (0) : : : : : : : : : :
## : : : : : : : : : :
##
## 5 antibio_exposure Min : 0 0 : 558 (70.5%) IIIIIIIIIIIIII 791 0
## [integer] Mean : 0.3 1 : 233 (29.5%) IIIII (100.0%) (0.0%)
## Max : 1
##
## 6 antibio_type_a 1. a 4 ( 0.5%) 791 0
## [factor] 2. b 32 ( 4.0%) (100.0%) (0.0%)
## 3. c 52 ( 6.6%) I
## 4. d 104 (13.1%) II
## 5. e 2 ( 0.3%)
## 6. f 12 ( 1.5%)
## 7. g 2 ( 0.3%)
## 8. h 22 ( 2.8%)
## 9. i 3 ( 0.4%)
## 10. 99 558 (70.5%) IIIIIIIIIIIIII
##
## 7 antibio_type_b 1. c 1 ( 0.1%) 791 0
## [factor] 2. d 5 ( 0.6%) (100.0%) (0.0%)
## 3. f 2 ( 0.3%)
## 4. h 4 ( 0.5%)
## 5. i 2 ( 0.3%)
## 6. 99 777 (98.2%) IIIIIIIIIIIIIIIIIII
##
## 8 antibio_term Mean (sd) : 1.4 (3.3) 23 distinct values : 791 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 0 < 0 < 35 :
## IQR (CV) : 1 (2.4) :
## : .
##
## 9 age_num Mean (sd) : 61.1 (13) 65 distinct values : . 791 0
## [integer] min < med < max: . : : : (100.0%) (0.0%)
## 24 < 62 < 93 : : : : .
## IQR (CV) : 19 (0.2) : : : : : : :
## . : : : : : : : .
##
## 10 sex 1. M 599 (75.7%) IIIIIIIIIIIIIII 791 0
## [factor] 2. F 192 (24.3%) IIII (100.0%) (0.0%)
##
## 11 bmi_num Mean (sd) : 23.4 (4) 553 distinct values : 705 86
## [numeric] min < med < max: : (89.1%) (10.9%)
## 13.7 < 22.8 < 44.7 :
## IQR (CV) : 5 (0.2) : : :
## : : : .
##
## 12 smoking Mean (sd) : 257.5 (390) 116 distinct values : 694 97
## [integer] min < med < max: : (87.7%) (12.3%)
## 0 < 0 < 2200 :
## IQR (CV) : 410 (1.5) :
## : : . .
##
## 13 brthel_cate 1. 0 270 (41.3%) IIIIIIII 654 137
## [factor] 2. 1 215 (32.9%) IIIIII (82.7%) (17.3%)
## 3. 2 169 (25.8%) IIIII
##
## 14 child_numl Mean (sd) : 8.3 (2) 11 distinct values : . : 689 102
## [integer] min < med < max: : : : : (87.1%) (12.9%)
## 5 < 8 < 15 : : : : :
## IQR (CV) : 3 (0.2) : : : : : . .
## : : : : : : : .
##
## 15 child_score 1. a 135 (19.0%) III 711 80
## [factor] 2. b 376 (52.9%) IIIIIIIIII (89.9%) (10.1%)
## 3. c 200 (28.1%) IIIII
##
## 16 cci_num Mean (sd) : 4.5 (1.3) 11 distinct values : 791 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 3 < 4 < 13 :
## IQR (CV) : 1 (0.3) : :
## : : : .
##
## 17 malignancy 1. 0 697 (88.1%) IIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 94 (11.9%) II (100.0%) (0.0%)
##
## 18 hd 1. 0 780 (98.6%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 11 ( 1.4%) (100.0%) (0.0%)
##
## 19 hcc 1. 0 641 (81.0%) IIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 150 (19.0%) III (100.0%) (0.0%)
##
## 20 alocohol 1. 0 418 (52.8%) IIIIIIIIII 791 0
## [factor] 2. 1 373 (47.2%) IIIIIIIII (100.0%) (0.0%)
##
## 21 past_varix_rup 1. 0 601 (76.0%) IIIIIIIIIIIIIII 791 0
## [factor] 2. 1 190 (24.0%) IIII (100.0%) (0.0%)
##
## 22 antiplate_user_01 1. 0 780 (98.6%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 11 ( 1.4%) (100.0%) (0.0%)
##
## 23 anticoag_user01 1. 0 778 (98.4%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 13 ( 1.6%) (100.0%) (0.0%)
##
## 24 nsaids_user01 1. 0 773 (97.7%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 18 ( 2.3%) (100.0%) (0.0%)
##
## 25 steroid_user01 1. 0 789 (99.7%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 2 ( 0.3%) (100.0%) (0.0%)
##
## 26 ppi_user01 1. 0 91 (11.5%) II 791 0
## [factor] 2. 1 700 (88.5%) IIIIIIIIIIIIIIIII (100.0%) (0.0%)
##
## 27 map_day0 Mean (sd) : 2.9 (2.9) 13 distinct values : 791 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 0 < 4 < 26 : :
## IQR (CV) : 4 (1) : : .
## : : : .
##
## 28 shock 1. 0 476 (62.1%) IIIIIIIIIIII 767 24
## [factor] 2. 1 291 (37.9%) IIIIIII (97.0%) (3.0%)
##
## 29 t_bil Mean (sd) : 2.1 (1.9) 254 distinct values : 766 25
## [numeric] min < med < max: : (96.8%) (3.2%)
## 0.2 < 1.4 < 13.7 :
## IQR (CV) : 1.6 (0.9) : :
## : : : .
##
## 30 ast Mean (sd) : 77.3 (90.1) 195 distinct values : 774 17
## [numeric] min < med < max: : (97.9%) (2.1%)
## 13 < 49 < 984 :
## IQR (CV) : 56 (1.2) :
## : .
##
## 31 alt Mean (sd) : 39.9 (44.5) 124 distinct values : 774 17
## [numeric] min < med < max: : (97.9%) (2.1%)
## 7 < 28 < 562 :
## IQR (CV) : 25 (1.1) :
## : .
##
## 32 wbc Mean (sd) : 8413.7 (4638.1) 345 distinct values : 777 14
## [numeric] min < med < max: : : (98.2%) (1.8%)
## 1400 < 7400 < 58400 : :
## IQR (CV) : 5020 (0.6) : :
## : : :
##
## 33 hb Mean (sd) : 8.8 (2.5) 120 distinct values . . : 777 14
## [numeric] min < med < max: : : : (98.2%) (1.8%)
## 2.1 < 8.6 < 16.5 : : : :
## IQR (CV) : 3.3 (0.3) : : : : : .
## . : : : : : : . .
##
## 34 plt Mean (sd) : 116.4 (69.3) 217 distinct values : 777 14
## [numeric] min < med < max: : (98.2%) (1.8%)
## 18 < 102 < 1073 : .
## IQR (CV) : 68 (0.6) : :
## : : .
##
## 35 alb Mean (sd) : 2.9 (0.6) 35 distinct values : 755 36
## [numeric] min < med < max: : : (95.4%) (4.6%)
## 1.1 < 2.9 < 4.9 : : :
## IQR (CV) : 0.8 (0.2) : : : :
## : : : : : .
##
## 36 eGFR Mean (sd) : 71.6 (30.7) 737 distinct values : . 776 15
## [numeric] min < med < max: : : . (98.1%) (1.9%)
## 4.3 < 69.1 < 196 : : :
## IQR (CV) : 40.7 (0.4) : : : : .
## : : : : : : . .
##
## 37 eGFR30 1. 0 717 (92.3%) IIIIIIIIIIIIIIIIII 777 14
## [factor] 2. 1 60 ( 7.7%) I (98.2%) (1.8%)
##
## 38 crp Mean (sd) : 0.7 (1.4) 360 distinct values : 754 37
## [numeric] min < med < max: : (95.3%) (4.7%)
## 0 < 0.3 < 18.6 :
## IQR (CV) : 0.7 (1.9) :
## : .
##
## 39 pt Mean (sd) : 57.1 (16.7) 384 distinct values . . : 745 46
## [numeric] min < med < max: : : : (94.2%) (5.8%)
## 13.4 < 58 < 107.9 : : : : :
## IQR (CV) : 23.8 (0.3) . : : : : : .
## . : : : : : : : . .
##
## 40 aptt Mean (sd) : 32.7 (14.3) 234 distinct values : 701 90
## [numeric] min < med < max: : (88.6%) (11.4%)
## 17.6 < 30.2 < 200 :
## IQR (CV) : 7.6 (0.4) :
## : :
##
## 41 death_day2 1. 0 743 (93.9%) IIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 48 ( 6.1%) I (100.0%) (0.0%)
##
## 42 ivr_day2 1. 0 787 (99.5%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 4 ( 0.5%) (100.0%) (0.0%)
##
## 43 ope_day2 1. 0 787 (99.5%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 4 ( 0.5%) (100.0%) (0.0%)
##
## 44 ivr_ope_day2 1. 0 783 (99.0%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 8 ( 1.0%) (100.0%) (0.0%)
##
## 45 rebleed_end_hemo 1. 0 680 (86.0%) IIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 111 (14.0%) II (100.0%) (0.0%)
##
## 46 sepsis 1. 0 782 (98.9%) IIIIIIIIIIIIIIIIIII 791 0
## [factor] 2. 1 9 ( 1.1%) (100.0%) (0.0%)
##
## 47 outcome 1. 0 629 (79.5%) IIIIIIIIIIIIIII 791 0
## [factor] 2. 1 162 (20.5%) IIII (100.0%) (0.0%)
##
## 48 los Mean (sd) : 13 (15) 58 distinct values : 791 0
## [integer] min < med < max: : (100.0%) (0.0%)
## 2 < 9 < 217 :
## IQR (CV) : 9 (1.2) :
## : .
## ------------------------------------------------------------------------------------------------------------------------
確認その3
dfSummary(df) %>% view()
## Switching method to 'browser'
## Output file written: /var/folders/n9/tf_wmwpn3gl2t7l1cz4tqk000000gn/T//RtmpzS2jMH/file69f39ddaee.html
欠測評価
gg_miss_var(df,show_pct = T)
## Warning: The `guide` argument in `scale_*()` cannot be `FALSE`. This was deprecated in
## ggplot2 3.3.4.
## ℹ Please use "none" instead.
## ℹ The deprecated feature was likely used in the naniar package.
## Please report the issue at <]8;;https://github.com/njtierney/naniar/issueshttps://github.com/njtierney/naniar/issues]8;;>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
欠測評価2
vis_miss(df,cluster = T)
## Warning: `gather_()` was deprecated in tidyr 1.2.0.
## ℹ Please use `gather()` instead.
## ℹ The deprecated feature was likely used in the visdat package.
## Please report the issue at <]8;;https://github.com/ropensci/visdat/issueshttps://github.com/ropensci/visdat/issues]8;;>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
素データでのtable1の作成
col_continuous <-
c("age_num","child_numl","cci_num", "map_day0", "t_bil", "ast", "alt", "wbc", "hb", "plt", "alb", "crp", "pt", "aptt")
col_factors <-
c("sex", "brthel_cate", "malignancy", "child_score", "hd", "hcc", "alocohol", "past_varix_rup", "antiplate_user_01", "anticoag_user01", "nsaids_user01" ,"steroid_user01", "ppi_user01", "shock", "eGFR30")
df|> select(c(col_continuous, col_factors, "antibio_exposure"))|>
CreateTableOne(vars = c(col_continuous, col_factors), strata = "antibio_exposure", factorVars = col_factors) -> tableone
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(col_continuous)
##
## # Now:
## data %>% select(all_of(col_continuous))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(col_factors)
##
## # Now:
## data %>% select(all_of(col_factors))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
print(tableone, smd = T, missing = T, test = T, explain = T)
## Stratified by antibio_exposure
## 0 1 p test
## n 558 233
## age_num (mean (SD)) 61.54 (12.63) 60.05 (13.75) 0.141
## child_numl (mean (SD)) 8.30 (1.96) 8.41 (2.03) 0.508
## cci_num (mean (SD)) 4.51 (1.32) 4.52 (1.33) 0.967
## map_day0 (mean (SD)) 2.86 (2.92) 3.12 (2.98) 0.254
## t_bil (mean (SD)) 2.01 (1.88) 2.26 (2.02) 0.107
## ast (mean (SD)) 74.97 (82.14) 82.95 (106.36) 0.259
## alt (mean (SD)) 38.83 (42.49) 42.48 (48.91) 0.295
## wbc (mean (SD)) 8194.22 (4242.15) 8929.18 (5431.81) 0.043
## hb (mean (SD)) 8.69 (2.47) 9.00 (2.40) 0.111
## plt (mean (SD)) 116.49 (61.73) 116.29 (84.69) 0.971
## alb (mean (SD)) 2.91 (0.57) 2.93 (0.64) 0.761
## crp (mean (SD)) 0.76 (1.39) 0.72 (1.57) 0.679
## pt (mean (SD)) 57.00 (16.56) 57.44 (17.09) 0.740
## aptt (mean (SD)) 31.95 (12.69) 34.40 (17.30) 0.036
## sex = F (%) 141 (25.3) 51 (21.9) 0.358
## brthel_cate (%) 0.494
## 0 186 (41.5) 84 (40.8)
## 1 152 (33.9) 63 (30.6)
## 2 110 (24.6) 59 (28.6)
## malignancy = 1 (%) 65 (11.6) 29 (12.4) 0.845
## child_score (%) 0.776
## a 93 (18.8) 42 (19.4)
## b 266 (53.7) 110 (50.9)
## c 136 (27.5) 64 (29.6)
## hd = 1 (%) 8 ( 1.4) 3 ( 1.3) 1.000
## hcc = 1 (%) 112 (20.1) 38 (16.3) 0.258
## alocohol = 1 (%) 246 (44.1) 127 (54.5) 0.009
## past_varix_rup = 1 (%) 127 (22.8) 63 (27.0) 0.233
## antiplate_user_01 = 1 (%) 8 ( 1.4) 3 ( 1.3) 1.000
## anticoag_user01 = 1 (%) 8 ( 1.4) 5 ( 2.1) 0.681
## nsaids_user01 = 1 (%) 13 ( 2.3) 5 ( 2.1) 1.000
## steroid_user01 = 1 (%) 2 ( 0.4) 0 ( 0.0) 0.890
## ppi_user01 = 1 (%) 486 (87.1) 214 (91.8) 0.074
## shock = 1 (%) 197 (36.5) 94 (41.2) 0.255
## eGFR30 = 1 (%) 40 ( 7.3) 20 ( 8.6) 0.642
## Stratified by antibio_exposure
## SMD Missing
## n
## age_num (mean (SD)) 0.113 0.0
## child_numl (mean (SD)) 0.054 12.9
## cci_num (mean (SD)) 0.003 0.0
## map_day0 (mean (SD)) 0.089 0.0
## t_bil (mean (SD)) 0.126 3.2
## ast (mean (SD)) 0.084 2.1
## alt (mean (SD)) 0.080 2.1
## wbc (mean (SD)) 0.151 1.8
## hb (mean (SD)) 0.126 1.8
## plt (mean (SD)) 0.003 1.8
## alb (mean (SD)) 0.024 4.6
## crp (mean (SD)) 0.032 4.7
## pt (mean (SD)) 0.026 5.8
## aptt (mean (SD)) 0.162 11.4
## sex = F (%) 0.080 0.0
## brthel_cate (%) 0.100 17.3
## 0
## 1
## 2
## malignancy = 1 (%) 0.025 0.0
## child_score (%) 0.058 10.1
## a
## b
## c
## hd = 1 (%) 0.013 0.0
## hcc = 1 (%) 0.098 0.0
## alocohol = 1 (%) 0.210 0.0
## past_varix_rup = 1 (%) 0.099 0.0
## antiplate_user_01 = 1 (%) 0.013 0.0
## anticoag_user01 = 1 (%) 0.054 0.0
## nsaids_user01 = 1 (%) 0.012 0.0
## steroid_user01 = 1 (%) 0.085 0.0
## ppi_user01 = 1 (%) 0.155 0.0
## shock = 1 (%) 0.096 3.0
## eGFR30 = 1 (%) 0.047 1.8
連続量の可視化
df |> #全体
select(col_continuous) |>
pivot_longer(cols = col_continuous, names_to = "name", values_to = "value") |>
ggplot()+
geom_histogram(aes(x = value), color = "black")+
facet_wrap(~ name, scales = "free", ncol = 5) +
theme_bw()+
theme(text = element_text(size = 12))
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
## Warning: Removed 412 rows containing non-finite values (`stat_bin()`).
単変量の解析をみてみる
# Load necessary libraries
library(tidyverse)
library(MASS)
##
## 次のパッケージを付け加えます: 'MASS'
## 以下のオブジェクトは 'package:dplyr' からマスクされています:
##
## select
library(broom)
# Univariate logistic regression for outcome, death_day2, rebleed_end_hemo, and sepsis
outcome_model <- glm(outcome ~ antibio_exposure, data = df, family = binomial(link = "logit"))
death_day2_model <- glm(death_day2 ~ antibio_exposure, data = df, family = binomial(link = "logit"))
rebleed_end_hemo_model <- glm(rebleed_end_hemo ~ antibio_exposure, data = df, family = binomial(link = "logit"))
sepsis_model <- glm(sepsis ~ antibio_exposure, data = df, family = binomial(link = "logit"))
# Univariate negative binomial regression for los
los_model <- glm.nb(los ~ antibio_exposure, data = df)
# Calculate odds ratios
outcome_or <- coef(outcome_model) %>% exp()
death_day2_or <- coef(death_day2_model) %>% exp()
rebleed_end_hemo_or <- coef(rebleed_end_hemo_model) %>% exp()
sepsis_or <- coef(sepsis_model) %>% exp()
# Calculate rate ratio for LOS
los_rr <- coef(los_model) %>% exp()
# Get odds ratios and 95% confidence intervals for logistic regression models
outcome_ci <- confint(outcome_model, method = "Wald") %>% as.data.frame() %>%
rownames_to_column("term") %>%
mutate(estimate = exp(`2.5 %`), conf.low = exp(`2.5 %`), conf.high = exp(`97.5 %`))
## Waiting for profiling to be done...
death_day2_ci <- confint(death_day2_model, method = "Wald") %>% as.data.frame() %>%
rownames_to_column("term") %>%
mutate(estimate = exp(`2.5 %`), conf.low = exp(`2.5 %`), conf.high = exp(`97.5 %`))
## Waiting for profiling to be done...
rebleed_end_hemo_ci <- confint(rebleed_end_hemo_model, method = "Wald") %>% as.data.frame() %>%
rownames_to_column("term") %>%
mutate(estimate = exp(`2.5 %`), conf.low = exp(`2.5 %`), conf.high = exp(`97.5 %`))
## Waiting for profiling to be done...
sepsis_ci <- confint(sepsis_model, method = "Wald") %>% as.data.frame() %>%
rownames_to_column("term") %>%
mutate(estimate = exp(`2.5 %`), conf.low = exp(`2.5 %`), conf.high = exp(`97.5 %`))
## Waiting for profiling to be done...
# Get rate ratios and 95% confidence intervals for negative binomial regression model
los_ci <- confint(los_model, method = "Wald") %>% as.data.frame() %>%
rownames_to_column("term") %>%
mutate(estimate = exp(`2.5 %`), conf.low = exp(`2.5 %`), conf.high = exp(`97.5 %`))
## Waiting for profiling to be done...
# Print results with rounding
print("Outcome:")
## [1] "Outcome:"
print(paste("OR:", round(outcome_or["antibio_exposure"], 4), "95% CI:", round(outcome_ci$conf.low[2], 4), "to", round(outcome_ci$conf.high[2], 4)))
## [1] "OR: 1.3491 95% CI: 0.9302 to 1.9421"
print("Death day 2:")
## [1] "Death day 2:"
print(paste("OR:", round(death_day2_or["antibio_exposure"], 4), "95% CI:", round(death_day2_ci$conf.low[2], 4), "to", round(death_day2_ci$conf.high[2], 4)))
## [1] "OR: 0.9852 95% CI: 0.5029 to 1.8344"
print("Rebleed end hemo:")
## [1] "Rebleed end hemo:"
print(paste("OR:", round(rebleed_end_hemo_or["antibio_exposure"], 4), "95% CI:", round(rebleed_end_hemo_ci$conf.low[2], 4), "to", round(rebleed_end_hemo_ci$conf.high[2], 4)))
## [1] "OR: 1.6308 95% CI: 1.0691 to 2.4663"
print("Sepsis:")
## [1] "Sepsis:"
print(paste("OR:", round(sepsis_or["antibio_exposure"], 4), "95% CI:", round(sepsis_ci$conf.low[2], 4), "to", round(sepsis_ci$conf.high[2], 4)))
## [1] "OR: 0.2963 95% CI: 0.0159 to 1.628"
print("LOS:")
## [1] "LOS:"
print(paste("RR:", round(los_rr["antibio_exposure"], 4), "95% CI:", round(los_ci$conf.low[2], 4), "to", round(los_ci$conf.high[2], 4)))
## [1] "RR: 1.0132 95% CI: 0.9023 to 1.1393"
多重代入
imp1 <- mice(df,
m=5, #mは代入の結果として作成するデータセットの数
maxit = 5, #maxitは反復回数
method="pmm",
seed = 10
)
##
## iter imp variable
## 1 1 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 1 2 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 1 3 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 1 4 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 1 5 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 2 1 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt
## 2 2 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 2 3 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt*
## 2 4 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt*
## 2 5 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 3 1 bmi_num smoking brthel_cate child_numl* child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 3 2 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt
## 3 3 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 3 4 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 3 5 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt*
## 4 1 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt*
## 4 2 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt
## 4 3 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 4 4 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 4 5 bmi_num smoking brthel_cate* child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 5 1 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp* pt* aptt*
## 5 2 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 5 3 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## 5 4 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt
## 5 5 bmi_num smoking brthel_cate child_numl child_score* shock t_bil ast alt wbc* hb* plt* alb eGFR* eGFR30* crp pt* aptt*
## Warning: Number of logged events: 655
主要評価解析
# Function to perform IPTW analysis on different outcomes
perform_iptw_analysis <- function(outcome_name) {
gee_results <- list()
summary_tables <- list()
conf_ints <- list()
weighted_data <- list()
ps_data <- list()
for (i in 1:5) {
imputed_data <- complete(imp1, i)
# Fit GEE propensity score model
propensity_model <- geeglm(antibio_exposure ~ age_num + sex + brthel_cate + child_numl + cci_num + malignancy + hd + hcc + alocohol + past_varix_rup + antiplate_user_01 + anticoag_user01 + nsaids_user01 + steroid_user01 + ppi_user01 + map_day0 + shock + t_bil + ast + alt + wbc + hb + plt + alb + eGFR30 + crp + pt + aptt,
data = imputed_data,
id = hosp_id,
family = binomial("logit"),
corstr = "exchangeable")
# Calculate propensity scores
ps <- predict(propensity_model, type = "response", newdata = imputed_data)
imputed_data$ps <- ps
# Calculate IPTW and fit the logistic regression model
stabilized_weights <- with(imputed_data, antibio_exposure/(ps) + (1 - antibio_exposure)/(1 - ps))
iptw_model <- glm(as.formula(paste0(outcome_name, " ~ antibio_exposure")), data = imputed_data, weights = stabilized_weights, family = binomial("logit"))
# Store the results
gee_results[[i]] <- iptw_model
summary_tables[[i]] <- summary(iptw_model)
conf_ints[[i]] <- confint(iptw_model, level = 0.95, method = "Wald")
# Store weighted data
imputed_data$weight <- stabilized_weights
weighted_data[[i]] <- imputed_data
ps_data[[i]] <- imputed_data[, c("ps", "antibio_exposure")]
}
# Save the results from each imputed dataset
params <- list()
for (i in 1:5) {
params[[i]] <- data.frame(Estimate = coef(gee_results[[i]])[2],
Std.Error = coef(summary_tables[[i]])[2, "Std. Error"],
df = Inf)
}
# Calculate the pooled estimates
Qbar <- mean(sapply(params, function(x) x$Estimate))
se_Qbar <- sqrt(sum(sapply(params, function(x) x$Std.Error^2))/length(params))
# Calculate the pooled odds ratio and confidence intervals
pooled_or <- exp(Qbar)
pooled_lower <- exp(Qbar - 1.96 * se_Qbar)
pooled_upper <- exp(Qbar + 1.96 * se_Qbar)
# Calculate the pooled p-value (two-tailed)
pooled_p <- 2 * (1 - pnorm(abs(Qbar / se_Qbar)))
return(list(OR = pooled_or, Lower_CI = pooled_lower, Upper_CI = pooled_upper, P_value = pooled_p, PS_data = ps_data))
}
# Perform IPTW analysis for each outcome
outcomes <- c("outcome", "death_day2", "rebleed_end_hemo", "sepsis")
results <- lapply(outcomes, perform_iptw_analysis)
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Waiting for profiling to be done...
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
## Warning in eval(family$initialize): non-integer #successes in a binomial glm!
# Combine results into a data frame for plotting
forest_plot_data <- data.frame(
Outcome = outcomes,
OR = sapply(results, function(x) x$OR),
Lower_CI = sapply(results, function(x) x$Lower_CI),
Upper_CI = sapply(results, function(x) x$Upper_CI),
P_value = sapply(results, function(x) x$P_value)
)
# Reorder forest_plot_data by the desired order of outcomes
forest_plot_data$Outcome <- factor(forest_plot_data$Outcome, levels = c("outcome", "death_day2", "rebleed_end_hemo", "sepsis"))
# Display results as a table
print(forest_plot_data)
## Outcome OR Lower_CI Upper_CI P_value
## 1 outcome 1.3083878 1.0361863 1.6520953 0.023901862
## 2 death_day2 0.8770159 0.5869584 1.3104115 0.521840146
## 3 rebleed_end_hemo 1.6330407 1.2463294 2.1397409 0.000374995
## 4 sepsis 0.3071999 0.1008344 0.9359087 0.037844259
# Create forest plot with the specified order and adjusted p-value position
forest_plot_ordered <- ggplot(forest_plot_data, aes(x = Outcome, y = OR, ymin = Lower_CI, ymax = Upper_CI)) +
geom_pointrange(size = 0.5) +
geom_hline(yintercept = 1, linetype = "dashed") +
scale_y_log10() +
coord_flip() +
theme_bw() +
labs(
x = "Outcome",
y = "Odds Ratio (95% Confidence Interval)"
) +
geom_text(aes(label = sprintf("p = %.3f", P_value)), vjust = -1.0, size = 3) +
scale_x_discrete(limits = c("sepsis", "rebleed_end_hemo", "death_day2","outcome"))
# Display forest plot
forest_plot_ordered
# Calculate and display c-statistics for each imputed dataset
c_statistics <- lapply(results[[1]]$PS_data, function(data) {
roc_obj <- roc(data$antibio_exposure, data$ps)
auc(roc_obj)
})
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
## Setting levels: control = 0, case = 1
## Setting direction: controls < cases
# Print c-statistics
print(c_statistics)
## [[1]]
## Area under the curve: 0.5984
##
## [[2]]
## Area under the curve: 0.6128
##
## [[3]]
## Area under the curve: 0.6155
##
## [[4]]
## Area under the curve: 0.6411
##
## [[5]]
## Area under the curve: 0.6179
# Plot the propensity score overlap for each imputed dataset
for (i in 1:5) {
ggplot(results[[1]]$PS_data[[i]], aes(x = ps, fill = as.factor(antibio_exposure))) +
geom_histogram(position = "identity", alpha = 0.5, bins = 30) +
labs(
title = paste0("Imputed dataset ", i),
x = "Propensity Score",
y = "Count",
fill = "Antibio Exposure"
) +
theme_bw() +
scale_fill_discrete(labels = c("No Exposure", "Exposure")) +
xlim(0, 1) +
guides(fill = guide_legend(reverse = TRUE)) -> p
print(p)
}
## Warning: Removed 4 rows containing missing values (`geom_bar()`).
## Warning: Removed 4 rows containing missing values (`geom_bar()`).
## Warning: Removed 4 rows containing missing values (`geom_bar()`).
## Warning: Removed 4 rows containing missing values (`geom_bar()`).
## Warning: Removed 4 rows containing missing values (`geom_bar()`).
forest plotの名称変更
# Install and load the plyr package
if (!requireNamespace("plyr", quietly = TRUE)) {
install.packages("plyr")
}
library(plyr)
## ------------------------------------------------------------------------------
## You have loaded plyr after dplyr - this is likely to cause problems.
## If you need functions from both plyr and dplyr, please load plyr first, then dplyr:
## library(plyr); library(dplyr)
## ------------------------------------------------------------------------------
##
## 次のパッケージを付け加えます: 'plyr'
## 以下のオブジェクトは 'package:dplyr' からマスクされています:
##
## arrange, count, desc, failwith, id, mutate, rename, summarise,
## summarize
## 以下のオブジェクトは 'package:purrr' からマスクされています:
##
## compact
# Modify labels in the data frame
forest_plot_data$Outcome <- revalue(forest_plot_data$Outcome,
c("outcome" = "Complex outcome",
"death_day2" = "Death in hospitalization",
"rebleed_end_hemo" = "Rebleeding",
"sepsis" = "Bacteraemia"))
# Reorder forest_plot_data by the desired order of outcomes
forest_plot_data$Outcome <- factor(forest_plot_data$Outcome,
levels = c("Complex outcome",
"Death in hospitalization",
"Rebleeding",
"Bacteraemia"))
# Display results as a table
print(forest_plot_data)
## Outcome OR Lower_CI Upper_CI P_value
## 1 Complex outcome 1.3083878 1.0361863 1.6520953 0.023901862
## 2 Death in hospitalization 0.8770159 0.5869584 1.3104115 0.521840146
## 3 Rebleeding 1.6330407 1.2463294 2.1397409 0.000374995
## 4 Bacteraemia 0.3071999 0.1008344 0.9359087 0.037844259
# Create forest plot with the specified order and adjusted p-value position
forest_plot_ordered <- ggplot(forest_plot_data, aes(x = Outcome, y = OR, ymin = Lower_CI, ymax = Upper_CI)) +
geom_pointrange(size = 0.5) +
geom_hline(yintercept = 1, linetype = "dashed") +
scale_y_log10() +
coord_flip() +
theme_bw() +
labs(
x = "Outcome",
y = "Odds Ratio (95% Confidence Interval)"
) +
geom_text(aes(label = sprintf("p = %.3f", P_value)), vjust = -1.0, size = 3) + # Adjust vjust value to change p-value position
scale_x_discrete(limits = c("Bacteraemia", "Rebleeding", "Death in hospitalization", "Complex outcome"))
# Display forest plot
forest_plot_ordered
副次評価 解析
#LOS
# 本解析: IPTW models on imputed data with Gamma distribution
gee_results <- list()
summary_tables <- list()
conf_ints <- list()
weighted_data <- list()
for (i in 1:5) {
imputed_data <- complete(imp1, i)
# Fit GEE propensity score model
propensity_model <- geeglm(antibio_exposure ~ age_num + sex + brthel_cate + child_numl + cci_num + malignancy + hd + hcc + alocohol + past_varix_rup + antiplate_user_01 + anticoag_user01 + nsaids_user01 + steroid_user01 + ppi_user01 + map_day0 + shock + t_bil + ast + alt + wbc + hb + plt + alb + eGFR30 + crp + pt + aptt,
data = imputed_data,
id = hosp_id,
family = binomial("logit"),
corstr = "exchangeable")
# Calculate propensity scores
ps <- predict(propensity_model, type = "response", newdata = imputed_data)
imputed_data$ps <- ps
# Calculate IPTW and fit the gamma regression model
stabilized_weights <- with(imputed_data, antibio_exposure/(ps) + (1 - antibio_exposure)/(1 - ps))
iptw_model <- glm(los ~ antibio_exposure, data = imputed_data, weights = stabilized_weights, family = Gamma("log"))
# Store the results
gee_results[[i]] <- iptw_model
summary_tables[[i]] <- summary(iptw_model)
conf_ints[[i]] <- confint(iptw_model, level = 0.95, method = "Wald")
# Store weighted data
imputed_data$weight <- stabilized_weights
weighted_data[[i]] <- imputed_data
}
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
# Save the results from each imputed dataset
params <- list()
for (i in 1:5) {
params[[i]] <- data.frame(estimate = coef(gee_results[[i]])[2],
std.error = coef(summary_tables[[i]])[2, "Std. Error"],
df = Inf) # Add infinite degrees of freedom
}
# Manually pool the results
Qbar <- mean(sapply(params, function(x) x$estimate))
se_Qbar <- sqrt(sum(sapply(params, function(x) x$std.error^2))/length(params))
# Calculate the pooled rate ratio and confidence intervals
pooled_rr <- exp(Qbar)
pooled_lower <- exp(Qbar - 1.96 * se_Qbar)
pooled_upper <- exp(Qbar + 1.96 * se_Qbar)
# Calculate the pooled z-value
pooled_z <- Qbar / se_Qbar
# Calculate the pooled p-value (two-tailed)
pooled_p <- 2 * (1 - pnorm(abs(pooled_z)))
cat("\nPooled results (IPTW with Gamma distribution)\n")
##
## Pooled results (IPTW with Gamma distribution)
cat("\nRate Ratio:", pooled_rr, "\n")
##
## Rate Ratio: 1.020283
cat("\n95% Confidence Interval: (", pooled_lower, ", ", pooled_upper, ")\n")
##
## 95% Confidence Interval: ( 0.8485043 , 1.226837 )
cat("\nP-value:", pooled_p, "\n")
##
## P-value: 0.8309559
負の二項分布で解析してみる
# Install and load the MASS package
if (!requireNamespace("MASS", quietly = TRUE)) {
install.packages("MASS")
}
library(MASS)
# LOS
# 本解析: IPTW models on imputed data with Negative Binomial distribution
gee_results <- list()
summary_tables <- list()
conf_ints <- list()
weighted_data <- list()
for (i in 1:5) {
imputed_data <- complete(imp1, i)
# Fit GEE propensity score model
propensity_model <- geeglm(antibio_exposure ~ age_num + sex + brthel_cate + child_numl + cci_num + malignancy + hd + hcc + alocohol + past_varix_rup + antiplate_user_01 + anticoag_user01 + nsaids_user01 + steroid_user01 + ppi_user01 + map_day0 + shock + t_bil + ast + alt + wbc + hb + plt + alb + eGFR30 + crp + pt + aptt,
data = imputed_data,
id = hosp_id,
family = binomial("logit"),
corstr = "exchangeable")
# Calculate propensity scores
ps <- predict(propensity_model, type = "response", newdata = imputed_data)
imputed_data$ps <- ps
# Calculate IPTW and fit the negative binomial regression model
stabilized_weights <- with(imputed_data, antibio_exposure/(ps) + (1 - antibio_exposure)/(1 - ps))
iptw_model <- glm.nb(los ~ antibio_exposure, data = imputed_data, weights = stabilized_weights)
# Store the results
gee_results[[i]] <- iptw_model
summary_tables[[i]] <- summary(iptw_model)
conf_ints[[i]] <- confint(iptw_model, level = 0.95, method = "Wald")
# Store weighted data
imputed_data$weight <- stabilized_weights
weighted_data[[i]] <- imputed_data
}
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
## Waiting for profiling to be done...
# Save the results from each imputed dataset
params <- list()
for (i in 1:5) {
params[[i]] <- data.frame(estimate = coef(gee_results[[i]])[2],
std.error = coef(summary_tables[[i]])[2, "Std. Error"],
df = Inf) # Add infinite degrees of freedom
}
# Manually pool the results
Qbar <- mean(sapply(params, function(x) x$estimate))
se_Qbar <- sqrt(sum(sapply(params, function(x) x$std.error^2))/length(params))
# Calculate the pooled rate ratio and confidence intervals
pooled_rr <- exp(Qbar)
pooled_lower <- exp(Qbar - 1.96 * se_Qbar)
pooled_upper <- exp(Qbar + 1.96 * se_Qbar)
# Calculate the pooled z-value
pooled_z <- Qbar / se_Qbar
# Calculate the pooled p-value (two-tailed)
pooled_p <- 2 * (1 - pnorm(abs(pooled_z)))
cat("\nPooled results (IPTW with Negative Binomial distribution)\n")
##
## Pooled results (IPTW with Negative Binomial distribution)
cat("\nRate Ratio:", pooled_rr, "\n")
##
## Rate Ratio: 1.020283
cat("\n95% Confidence Interval: (", pooled_lower, ", ", pooled_upper, ")\n")
##
## 95% Confidence Interval: ( 0.9456284 , 1.100831 )
cat("\nP-value:", pooled_p, "\n")
##
## P-value: 0.6044956
サマリー表の作成 補完後IPTW前
# 補完データの1つを選択 (例: 最初の補完データ)
selected_data <- complete(imp1, 1)
# IPTW前のデータのTable 1
unweighted_tableone <- CreateTableOne(vars = c(col_continuous, col_factors), strata = "antibio_exposure",data = selected_data, factorVars = col_factors)
print(unweighted_tableone, smd = T, missing = T, test = T, explain = T)
## Stratified by antibio_exposure
## 0 1 p test
## n 558 233
## age_num (mean (SD)) 61.54 (12.63) 60.05 (13.75) 0.141
## child_numl (mean (SD)) 8.12 (2.02) 8.29 (2.09) 0.281
## cci_num (mean (SD)) 4.51 (1.32) 4.52 (1.33) 0.967
## map_day0 (mean (SD)) 2.86 (2.92) 3.12 (2.98) 0.254
## t_bil (mean (SD)) 1.99 (1.86) 2.23 (2.01) 0.107
## ast (mean (SD)) 76.27 (83.60) 82.97 (106.04) 0.345
## alt (mean (SD)) 39.28 (43.00) 42.31 (48.75) 0.386
## wbc (mean (SD)) 8120.04 (4229.65) 8917.08 (5423.23) 0.027
## hb (mean (SD)) 8.82 (2.59) 9.02 (2.43) 0.302
## plt (mean (SD)) 114.65 (62.22) 116.10 (84.56) 0.789
## alb (mean (SD)) 2.93 (0.58) 2.93 (0.64) 0.976
## crp (mean (SD)) 1.19 (2.96) 0.78 (1.85) 0.050
## pt (mean (SD)) 59.23 (18.16) 58.52 (17.64) 0.615
## aptt (mean (SD)) 45.16 (43.06) 44.53 (40.28) 0.848
## sex = F (%) 141 (25.3) 51 (21.9) 0.358
## brthel_cate (%) 0.372
## 0 232 (41.6) 97 (41.6)
## 1 191 (34.2) 70 (30.0)
## 2 135 (24.2) 66 (28.3)
## malignancy = 1 (%) 65 (11.6) 29 (12.4) 0.845
## child_score (%) 0.895
## a 93 (16.7) 42 (18.0)
## b 266 (47.7) 110 (47.2)
## c 199 (35.7) 81 (34.8)
## hd = 1 (%) 8 ( 1.4) 3 ( 1.3) 1.000
## hcc = 1 (%) 112 (20.1) 38 (16.3) 0.258
## alocohol = 1 (%) 246 (44.1) 127 (54.5) 0.009
## past_varix_rup = 1 (%) 127 (22.8) 63 (27.0) 0.233
## antiplate_user_01 = 1 (%) 8 ( 1.4) 3 ( 1.3) 1.000
## anticoag_user01 = 1 (%) 8 ( 1.4) 5 ( 2.1) 0.681
## nsaids_user01 = 1 (%) 13 ( 2.3) 5 ( 2.1) 1.000
## steroid_user01 = 1 (%) 2 ( 0.4) 0 ( 0.0) 0.890
## ppi_user01 = 1 (%) 486 (87.1) 214 (91.8) 0.074
## shock = 1 (%) 204 (36.6) 95 (40.8) 0.301
## eGFR30 = 1 (%) 40 ( 7.2) 20 ( 8.6) 0.591
## Stratified by antibio_exposure
## SMD Missing
## n
## age_num (mean (SD)) 0.113 0.0
## child_numl (mean (SD)) 0.084 0.0
## cci_num (mean (SD)) 0.003 0.0
## map_day0 (mean (SD)) 0.089 0.0
## t_bil (mean (SD)) 0.124 0.0
## ast (mean (SD)) 0.070 0.0
## alt (mean (SD)) 0.066 0.0
## wbc (mean (SD)) 0.164 0.0
## hb (mean (SD)) 0.082 0.0
## plt (mean (SD)) 0.020 0.0
## alb (mean (SD)) 0.002 0.0
## crp (mean (SD)) 0.166 0.0
## pt (mean (SD)) 0.040 0.0
## aptt (mean (SD)) 0.015 0.0
## sex = F (%) 0.080 0.0
## brthel_cate (%) 0.110 0.0
## 0
## 1
## 2
## malignancy = 1 (%) 0.025 0.0
## child_score (%) 0.037 0.0
## a
## b
## c
## hd = 1 (%) 0.013 0.0
## hcc = 1 (%) 0.098 0.0
## alocohol = 1 (%) 0.210 0.0
## past_varix_rup = 1 (%) 0.099 0.0
## antiplate_user_01 = 1 (%) 0.013 0.0
## anticoag_user01 = 1 (%) 0.054 0.0
## nsaids_user01 = 1 (%) 0.012 0.0
## steroid_user01 = 1 (%) 0.085 0.0
## ppi_user01 = 1 (%) 0.155 0.0
## shock = 1 (%) 0.087 0.0
## eGFR30 = 1 (%) 0.053 0.0
補完後IPTW後のSMD算出
# 1. Calculate SMD for all covariates
calculate_smd <- function(data, weights, col_continuous, col_factors) {
smd_continuous <- sapply(col_continuous, function(x) {
cov_unexposed <- data[data$antibio_exposure == 0, x]
cov_exposed <- data[data$antibio_exposure == 1, x]
w_unexposed <- weights[data$antibio_exposure == 0]
w_exposed <- weights[data$antibio_exposure == 1]
mean_unexposed <- sum(w_unexposed * cov_unexposed) / sum(w_unexposed)
mean_exposed <- sum(w_exposed * cov_exposed) / sum(w_exposed)
sd_unexposed <- sqrt(sum(w_unexposed * (cov_unexposed - mean_unexposed)^2) / sum(w_unexposed))
sd_exposed <- sqrt(sum(w_exposed * (cov_exposed - mean_exposed)^2) / sum(w_exposed))
smd <- (mean_exposed - mean_unexposed) / sqrt((sd_exposed^2 + sd_unexposed^2) / 2)
return(smd)
})
smd_factors <- sapply(col_factors, function(x) {
prop_unexposed <- tapply(weights[data$antibio_exposure == 0], data[data$antibio_exposure == 0, x], sum) / sum(weights[data$antibio_exposure == 0])
prop_exposed <- tapply(weights[data$antibio_exposure == 1], data[data$antibio_exposure == 1, x], sum) / sum(weights[data$antibio_exposure == 1])
common_levels <- intersect(names(prop_unexposed), names(prop_exposed))
prop_unexposed <- prop_unexposed[common_levels]
prop_exposed <- prop_exposed[common_levels]
smd <- sum((prop_exposed - prop_unexposed) / sqrt((prop_exposed * (1 - prop_exposed) + prop_unexposed * (1 - prop_unexposed)) / 2), na.rm = TRUE)
return(smd)
})
return(c(smd_continuous, smd_factors))
}
# 2. Calculate SMD for each imputed dataset
smd_results <- lapply(weighted_data, function(data) {
calculate_smd(data, data$weight, col_continuous, col_factors)
})
# 3. Create a data frame with the mean SMD for each covariate
mean_smd_dataframe <- function(smd_results, col_continuous, col_factors) {
mean_smd_continuous <- sapply(1:length(col_continuous), function(i) {
mean(sapply(smd_results, function(x) x[i]))
})
mean_smd_factors <- sapply((length(col_continuous) + 1):(length(col_continuous) + length(col_factors)), function(i) {
mean(sapply(smd_results, function(x) x[i]))
})
mean_smd_continuous_rounded <- round(mean_smd_continuous, 4)
mean_smd_factors_rounded <- round(mean_smd_factors, 4)
smd_df_continuous <- data.frame(Covariate = col_continuous, Mean_SMD = mean_smd_continuous_rounded)
smd_df_factors <- data.frame(Covariate = col_factors, Mean_SMD = mean_smd_factors_rounded)
smd_df <- rbind(smd_df_continuous, smd_df_factors)
smd_df <- smd_df[order(abs(smd_df$Mean_SMD), decreasing = TRUE),]
return(smd_df)
}
# 4. Display the mean SMD dataframe
mean_smd_df <- mean_smd_dataframe(smd_results, col_continuous, col_factors)
cat("Mean SMD for all covariates (rounded to 4 decimal places):\n")
## Mean SMD for all covariates (rounded to 4 decimal places):
print(mean_smd_df)
## Covariate Mean_SMD
## 1 age_num -0.1145
## 26 steroid_user01 0.0740
## 5 t_bil 0.0720
## 2 child_numl 0.0647
## 14 aptt -0.0533
## 12 crp -0.0329
## 4 map_day0 0.0324
## 10 plt -0.0285
## 13 pt -0.0282
## 3 cci_num 0.0276
## 9 hb 0.0275
## 8 wbc 0.0236
## 16 brthel_cate -0.0056
## 11 alb 0.0049
## 18 child_score 0.0046
## 6 ast -0.0039
## 7 alt 0.0039
## 15 sex 0.0000
## 17 malignancy 0.0000
## 19 hd 0.0000
## 20 hcc 0.0000
## 21 alocohol 0.0000
## 22 past_varix_rup 0.0000
## 23 antiplate_user_01 0.0000
## 24 anticoag_user01 0.0000
## 25 nsaids_user01 0.0000
## 27 ppi_user01 0.0000
## 28 shock 0.0000
## 29 eGFR30 0.0000
love plotで比較
# Calculate pre-imputation SMD
pre_smd_continuous <- sapply(col_continuous, function(x) {
cov_unexposed <- data[data$antibio_exposure == 0, x, drop = FALSE]
cov_exposed <- data[data$antibio_exposure == 1, x, drop = FALSE]
mean_unexposed <- mean(cov_unexposed[[x]], na.rm = TRUE)
mean_exposed <- mean(cov_exposed[[x]], na.rm = TRUE)
sd_unexposed <- sd(cov_unexposed[[x]], na.rm = TRUE)
sd_exposed <- sd(cov_exposed[[x]], na.rm = TRUE)
smd <- (mean_exposed - mean_unexposed) / sqrt((sd_exposed^2 + sd_unexposed^2) / 2)
return(smd)
})
pre_smd_factors <- calculate_smd(data, rep(1, nrow(data)), c(), col_factors)
pre_smd <- c(pre_smd_continuous, pre_smd_factors)
# Calculate the absolute SMD
abs_pre_smd_continuous <- abs(pre_smd_continuous)
abs_pre_smd_factors <- abs(unlist(pre_smd_factors))
abs_mean_smd <- abs(mean_smd_df$Mean_SMD)
# Combine pre- and post-imputation SMDs
smd_df_pre_post <- data.frame(
Covariate = rep(c(col_continuous, col_factors), 2),
SMD = c(abs_pre_smd_continuous, abs_pre_smd_factors, abs_mean_smd),
Imputation = rep(c("Pre IPTW", "Post IPTW"), each = length(col_continuous) + length(col_factors))
)
# Create Love plot
ggplot(smd_df_pre_post, aes(x = Covariate, y = SMD, color = Imputation)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
coord_flip() +
theme_bw() +
labs(
x = "Covariate",
y = "Absolute Standardized Mean Difference"
) +
guides(color = guide_legend(title = NULL))
# Covariate name mapping
covariate_name_mapping <- c(
"age_num" = "Age",
"child_numl" = "Child-Pugh score",
"cci_num" = "Charlson Comorbidity Index",
"map_day0" = "RBC transfusion",
"t_bil" = "Total bilirubin",
"ast" = "Aspartate aminotransferase",
"alt" = "Alanine aminotransferase",
"wbc" = "White blood cell",
"hb" = "Hemoglobin",
"plt" = "Platelet",
"alb" = "Albumin",
"crp" = "C-reactive protein",
"pt" = "Prothrombin time",
"aptt" = "Activated partial thromboplastin time",
"sex" = "Sex",
"brthel_cate" = "Barthel index",
"malignancy" = "Malignant tomor history",
"child_score" = "Child-Pugh classification",
"hd" = "Maintenance hemodialysis",
"hcc" = "Hepatic cancer",
"alocohol" = "Alcohol related disease",
"past_varix_rup" = "Past varix rupture history",
"antiplate_user_01" = "Antiplatelet use",
"anticoag_user01" = "Anticoagulant use",
"nsaids_user01" = "NSAIDs use",
"steroid_user01" = "Corticosteroid use",
"ppi_user01" = "Acid blocker use",
"shock" = "Shock index > 1",
"eGFR30" = "eGFR < 30"
)
# Update Covariate names in smd_df_pre_post
smd_df_pre_post$Covariate <- covariate_name_mapping[as.character(smd_df_pre_post$Covariate)]
smd_df_pre_post$Covariate <- factor(smd_df_pre_post$Covariate, levels = covariate_name_mapping[sort(c(col_continuous, col_factors))])
# Create Love plot
ggplot(smd_df_pre_post, aes(x = Covariate, y = SMD, color = Imputation)) +
geom_point() +
geom_hline(yintercept = 0, linetype = "dashed") +
coord_flip() +
theme_bw() +
labs(
x = "Covariate",
y = "Absolute Standardized Mean Difference"
) +
guides(color = guide_legend(title = NULL))
素データでの背景サマリーの作成
# Rename columns
col_continuous <- c("Age", "Child-Pugh score", "Charlson Comorbidity Index", "RBC transfusion", "Total bilirubin", "Aspartate aminotransferase", "Alanine aminotransferase", "White blood cell", "Hemoglobin", "Platelet", "Albumin", "C-reactive protein", "Prothrombin time", "Activated partial thromboplastin time")
col_factors <- c("Sex", "Barthel index", "Child-Pugh classification", "Maintenance hemodialysis", "Hepatic cancer", "Malignant tomor history", "Alcohol related disease", "Past varix rupture history", "Antiplatelet use", "Anticoagulant use", "NSAIDs use", "Corticosteroid use", "Acid blocker use", "Shock index > 1", "eGFR < 30")
# Update column names in the dataframe
colnames(df)[colnames(df) %in% c("age_num", "child_numl", "cci_num", "map_day0", "t_bil", "ast", "alt", "wbc", "hb", "plt", "alb", "crp", "pt", "aptt")] <- col_continuous
colnames(df)[colnames(df) %in% c("sex", "brthel_cate", "child_score", "hd", "hcc", "malignancy", "alocohol", "past_varix_rup", "antiplate_user_01", "anticoag_user01", "nsaids_user01", "steroid_user01", "ppi_user01", "shock", "eGFR30")] <- col_factors
# Change order of columns
ordered_colnames <- c("Age", "Sex", "Barthel index", "Child-Pugh classification", "Child-Pugh score", "Charlson Comorbidity Index", "Maintenance hemodialysis", "Hepatic cancer", "Malignant tomor history", "Alcohol related disease", "Past varix rupture history", "Antiplatelet use", "Anticoagulant use", "NSAIDs use", "Corticosteroid use", "Acid blocker use", "RBC transfusion", "Total bilirubin", "Aspartate aminotransferase", "Alanine aminotransferase", "Albumin", "White blood cell", "Hemoglobin", "Platelet", "eGFR < 30", "C-reactive protein", "Prothrombin time", "Activated partial thromboplastin time", "Shock index > 1")
# Create table
tableone <- CreateTableOne(vars = c(ordered_colnames, "antibio_exposure"), strata = "antibio_exposure", data = df, factorVars = col_factors)
# Print table
print(tableone, smd = T, missing = T, test = T, explain = T)
## Stratified by antibio_exposure
## 0
## n 558
## Age (mean (SD)) 61.54 (12.63)
## Sex = F (%) 141 (25.3)
## Barthel index (%)
## 0 186 (41.5)
## 1 152 (33.9)
## 2 110 (24.6)
## Child-Pugh classification (%)
## a 93 (18.8)
## b 266 (53.7)
## c 136 (27.5)
## Child-Pugh score (mean (SD)) 8.30 (1.96)
## Charlson Comorbidity Index (mean (SD)) 4.51 (1.32)
## Maintenance hemodialysis = 1 (%) 65 (11.6)
## Hepatic cancer = 1 (%) 8 ( 1.4)
## Malignant tomor history = 1 (%) 112 (20.1)
## Alcohol related disease = 1 (%) 246 (44.1)
## Past varix rupture history = 1 (%) 127 (22.8)
## Antiplatelet use = 1 (%) 8 ( 1.4)
## Anticoagulant use = 1 (%) 8 ( 1.4)
## NSAIDs use = 1 (%) 13 ( 2.3)
## Corticosteroid use = 1 (%) 2 ( 0.4)
## Acid blocker use = 1 (%) 486 (87.1)
## RBC transfusion (mean (SD)) 2.86 (2.92)
## Total bilirubin (mean (SD)) 2.01 (1.88)
## Aspartate aminotransferase (mean (SD)) 74.97 (82.14)
## Alanine aminotransferase (mean (SD)) 38.83 (42.49)
## Albumin (mean (SD)) 2.91 (0.57)
## White blood cell (mean (SD)) 8194.22 (4242.15)
## Hemoglobin (mean (SD)) 8.69 (2.47)
## Platelet (mean (SD)) 116.49 (61.73)
## eGFR < 30 = 1 (%) 40 ( 7.3)
## C-reactive protein (mean (SD)) 0.76 (1.39)
## Prothrombin time (mean (SD)) 57.00 (16.56)
## Activated partial thromboplastin time (mean (SD)) 31.95 (12.69)
## Shock index > 1 = 1 (%) 197 (36.5)
## antibio_exposure (mean (SD)) 0.00 (0.00)
## Stratified by antibio_exposure
## 1 p
## n 233
## Age (mean (SD)) 60.05 (13.75) 0.141
## Sex = F (%) 51 (21.9) 0.358
## Barthel index (%) 0.494
## 0 84 (40.8)
## 1 63 (30.6)
## 2 59 (28.6)
## Child-Pugh classification (%) 0.776
## a 42 (19.4)
## b 110 (50.9)
## c 64 (29.6)
## Child-Pugh score (mean (SD)) 8.41 (2.03) 0.508
## Charlson Comorbidity Index (mean (SD)) 4.52 (1.33) 0.967
## Maintenance hemodialysis = 1 (%) 29 (12.4) 0.845
## Hepatic cancer = 1 (%) 3 ( 1.3) 1.000
## Malignant tomor history = 1 (%) 38 (16.3) 0.258
## Alcohol related disease = 1 (%) 127 (54.5) 0.009
## Past varix rupture history = 1 (%) 63 (27.0) 0.233
## Antiplatelet use = 1 (%) 3 ( 1.3) 1.000
## Anticoagulant use = 1 (%) 5 ( 2.1) 0.681
## NSAIDs use = 1 (%) 5 ( 2.1) 1.000
## Corticosteroid use = 1 (%) 0 ( 0.0) 0.890
## Acid blocker use = 1 (%) 214 (91.8) 0.074
## RBC transfusion (mean (SD)) 3.12 (2.98) 0.254
## Total bilirubin (mean (SD)) 2.26 (2.02) 0.107
## Aspartate aminotransferase (mean (SD)) 82.95 (106.36) 0.259
## Alanine aminotransferase (mean (SD)) 42.48 (48.91) 0.295
## Albumin (mean (SD)) 2.93 (0.64) 0.761
## White blood cell (mean (SD)) 8929.18 (5431.81) 0.043
## Hemoglobin (mean (SD)) 9.00 (2.40) 0.111
## Platelet (mean (SD)) 116.29 (84.69) 0.971
## eGFR < 30 = 1 (%) 20 ( 8.6) 0.642
## C-reactive protein (mean (SD)) 0.72 (1.57) 0.679
## Prothrombin time (mean (SD)) 57.44 (17.09) 0.740
## Activated partial thromboplastin time (mean (SD)) 34.40 (17.30) 0.036
## Shock index > 1 = 1 (%) 94 (41.2) 0.255
## antibio_exposure (mean (SD)) 1.00 (0.00) <0.001
## Stratified by antibio_exposure
## test SMD Missing
## n
## Age (mean (SD)) 0.113 0.0
## Sex = F (%) 0.080 0.0
## Barthel index (%) 0.100 17.3
## 0
## 1
## 2
## Child-Pugh classification (%) 0.058 10.1
## a
## b
## c
## Child-Pugh score (mean (SD)) 0.054 12.9
## Charlson Comorbidity Index (mean (SD)) 0.003 0.0
## Maintenance hemodialysis = 1 (%) 0.025 0.0
## Hepatic cancer = 1 (%) 0.013 0.0
## Malignant tomor history = 1 (%) 0.098 0.0
## Alcohol related disease = 1 (%) 0.210 0.0
## Past varix rupture history = 1 (%) 0.099 0.0
## Antiplatelet use = 1 (%) 0.013 0.0
## Anticoagulant use = 1 (%) 0.054 0.0
## NSAIDs use = 1 (%) 0.012 0.0
## Corticosteroid use = 1 (%) 0.085 0.0
## Acid blocker use = 1 (%) 0.155 0.0
## RBC transfusion (mean (SD)) 0.089 0.0
## Total bilirubin (mean (SD)) 0.126 3.2
## Aspartate aminotransferase (mean (SD)) 0.084 2.1
## Alanine aminotransferase (mean (SD)) 0.080 2.1
## Albumin (mean (SD)) 0.024 4.6
## White blood cell (mean (SD)) 0.151 1.8
## Hemoglobin (mean (SD)) 0.126 1.8
## Platelet (mean (SD)) 0.003 1.8
## eGFR < 30 = 1 (%) 0.047 1.8
## C-reactive protein (mean (SD)) 0.032 4.7
## Prothrombin time (mean (SD)) 0.026 5.8
## Activated partial thromboplastin time (mean (SD)) 0.162 11.4
## Shock index > 1 = 1 (%) 0.096 3.0
## antibio_exposure (mean (SD)) Inf 0.0
library(dplyr)
library(tidyr)
detach("package:plyr", unload = TRUE)
## Warning: 'plyr' 名前空間はアンロード出来ません
## 名前空間 'plyr' は 'pROC', 'reshape2', 'rapportools' によってインポートされているのでアンロード出来ません
# Continuous variables for which we want median and IQR
continuous_vars <- c("Age", "Child-Pugh score", "Charlson Comorbidity Index", "Total bilirubin", "Aspartate aminotransferase", "Alanine aminotransferase", "Albumin", "White blood cell", "Hemoglobin", "Platelet", "C-reactive protein", "Prothrombin time", "Activated partial thromboplastin time")
# Function to calculate median and IQR
calc_median_iqr <- function(x) {
q <- quantile(x, c(0.25, 0.5, 0.75), na.rm = TRUE)
paste0("(", round(q[2], 1), ", ", round(q[1], 1), " - ", round(q[3], 1), ")")
}
# Calculate median and IQR for continuous variables
continuous_summary <- df %>%
group_by(antibio_exposure) %>%
summarise(across(all_of(continuous_vars), calc_median_iqr), .groups = "drop") %>%
pivot_longer(cols = continuous_vars, names_to = "Variable", values_to = "Value")
## Warning: Using an external vector in selections was deprecated in tidyselect 1.1.0.
## ℹ Please use `all_of()` or `any_of()` instead.
## # Was:
## data %>% select(continuous_vars)
##
## # Now:
## data %>% select(all_of(continuous_vars))
##
## See <https://tidyselect.r-lib.org/reference/faq-external-vector.html>.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
# Calculate percentages for categorical variables
categorical_summary <- df %>%
group_by(antibio_exposure) %>%
summarise(across(all_of(col_factors), ~mean(. == "M", na.rm = TRUE)), .groups = "drop") %>%
pivot_longer(cols = col_factors, names_to = "Variable", values_to = "Value") %>%
mutate(Value = paste0(round(Value * 100, 1), "%"))
# Combine continuous and categorical summaries
tableone <- bind_rows(continuous_summary, categorical_summary) %>%
spread(key = antibio_exposure, value = Value)
# Print table
print(tableone)
## # A tibble: 28 × 3
## Variable `0` `1`
## <chr> <chr> <chr>
## 1 Acid blocker use 0% 0%
## 2 Activated partial thromboplastin time (29.6, 26.4 - 33.8) (31.1, 28.5 - 35.4)
## 3 Age (62, 52 - 70) (60, 49 - 71)
## 4 Alanine aminotransferase (27, 19 - 42) (30, 20 - 47)
## 5 Albumin (2.9, 2.5 - 3.3) (2.9, 2.5 - 3.3)
## 6 Alcohol related disease 0% 0%
## 7 Anticoagulant use 0% 0%
## 8 Antiplatelet use 0% 0%
## 9 Aspartate aminotransferase (47, 31 - 83) (54, 32.5 - 94.5)
## 10 Barthel index 0% 0%
## # … with 18 more rows
# Continuous variables for which we want median and IQR
continuous_vars <- c("Age", "Child-Pugh score", "Charlson Comorbidity Index", "Total bilirubin", "Aspartate aminotransferase", "Alanine aminotransferase", "Albumin", "White blood cell", "Hemoglobin", "Platelet", "C-reactive protein", "Prothrombin time", "Activated partial thromboplastin time", "RBC transfusion")
# Function to calculate median and IQR
calc_median_iqr <- function(x) {
q <- quantile(x, c(0.25, 0.5, 0.75), na.rm = TRUE)
paste0("(", round(q[2], 1), ", ", round(q[1], 1), " - ", round(q[3], 1), ")")
}
# Calculate median and IQR for continuous variables
continuous_summary <- df %>%
group_by(antibio_exposure) %>%
summarise(across(all_of(continuous_vars), calc_median_iqr)) %>%
pivot_longer(cols = continuous_vars, names_to = "Variable", values_to = "Value")
# Calculate percentages for categorical variables
categorical_summary <- df %>%
group_by(antibio_exposure) %>%
summarise(across(all_of(col_factors), ~mean(. == "M", na.rm = TRUE))) %>%
pivot_longer(cols = col_factors, names_to = "Variable", values_to = "Value") %>%
mutate(Value = paste0(round(Value * 100, 1), "%"))
# Combine continuous and categorical summaries
tableone <- bind_rows(continuous_summary, categorical_summary) %>%
spread(key = antibio_exposure, value = Value)
# Print table
print(tableone)
## # A tibble: 29 × 3
## Variable `0` `1`
## <chr> <chr> <chr>
## 1 Acid blocker use 0% 0%
## 2 Activated partial thromboplastin time (29.6, 26.4 - 33.8) (31.1, 28.5 - 35.4)
## 3 Age (62, 52 - 70) (60, 49 - 71)
## 4 Alanine aminotransferase (27, 19 - 42) (30, 20 - 47)
## 5 Albumin (2.9, 2.5 - 3.3) (2.9, 2.5 - 3.3)
## 6 Alcohol related disease 0% 0%
## 7 Anticoagulant use 0% 0%
## 8 Antiplatelet use 0% 0%
## 9 Aspartate aminotransferase (47, 31 - 83) (54, 32.5 - 94.5)
## 10 Barthel index 0% 0%
## # … with 19 more rows