- 1 名前:132人目の素数さん [2020/02/29(土) 02:18:41 ID:twdO677Q.net]
- 東大数学科卒の元官僚はこう分析してるが、お前らはどうなると思う?
www.zakzak.co.jp/soc/news/200220/dom2002200003-n2.html 中国国外感染者の中国国内との比率をみると、 1月20日の数字公表以降は、0・8〜2・6%で比較的安定している。 これは、新型肺炎の感染者のほとんどは中国国内、それも湖北省に集中しているからだ。 ちなみに中国国外での感染者数は、中国国内の1・1%だ(2月16日現在)。 本コラムで紹介したが、現時点では、最終的な中国国内の感染者数は20万人超と筆者は推計している。 となると、中国国外の感染者は数千人程度になるだろう。 中国国外のうち日本の比率は1割弱なので、日本の感染者数は数百人程度であろう。 その場合、死者も数人から10人程度になるだろう。 こうした推計をすると、今の感染者は氷山の一角だと思われるが、今後の増加ペースはどうなるだろうか。 新型コロナウイルスの検査は簡単に行えるので、今後、日本での感染者数は増えていくだろう。 ある時点ではそれがネズミ算的に増えるかのように思える局面もあるだろうが、 筆者の推計が正しければ、現時点ではせいぜい数百人が一つのメドだ。
- 102 名前:132人目の素数さん mailto:sage [2020/03/23(月) 19:12:11 ID:O5lTfF0I.net]
- >>95
誤解や、誤解を引き起こしかねない内容があったので、勝手に補足させていただきます。 >>っちゅうことで、感度70%で特異度が100%なら検査陽性率の3割増し >>が有病率だとみなせばよろしいんでしょ。 この場合、検査陽性率の期待値=有病率×感度 なのだから、1/(0.7)=1.4285... 3割増しではなく、4割強増しと言うべき。 >>一方、特異度が90%しかなかったりすると陽性率の期待値が10%も >>水増しされちゃうから、有病率の推定が大幅に困難になる。 感度70、特異度100で、有病率 1%、0.1%、0.01%、0.001%の時、10万人に検査したときの 検査陽性者数は700,70,7,0.7人です。 有病率に比例して増減し、これらは、はっきり見極めできます。 一方、感度70、特異度90で、同じ事をすると、それぞれ、10600,10060,10006,10000.6人です。 有病率に応じて差はあるのですが、常に偽陽性が約10000人いて、誤差を考えると、見極めは困難です。 「陽性率の期待値が10%も水増しされちゃうから」と書かれていますが、これは、 検査対象者10万人に対する約10%=1万人が常に水増しされているのであって、 陽性と判定される人の数が10%水増しされていると誤解しないよう、補足しておきます。
- 103 名前:132人目の素数さん [2020/03/24(火) 01:26:59.63 ID:EUfp1x4d.net]
- >>98
心配性だねw 3割が4割でもたいして変わらんがな。 陽性率の期待値が10%水増しってのも、期待値の10%じゃなくて、 期待値そのものが10%上昇するんだってことくらい、元の式見りゃ 自明だしね。 そもそも感度や特異度の具体的な数値はよくわかんないんだから、 具体的な数字にこだわってもしょうがない。 有病率が低いときの、有病率と陽性率と特異度の関係がわかれば よろし。
- 104 名前:132人目の素数さん mailto:sage [2020/03/24(火) 01:40:13 ID:TnHQvRcs.net]
- こういう計算が必要になる。
事前分布を選択する(例. 有病率は高々10%として(0.0.1]の一様分布とする)、 陽性確率は真陽性確率と偽陽性確率の和、 陽性数はこの確率で二項分布、 以上を実際に得られた検査数と陽性数から最尤値となるパラメータとして有病率の分布を出して期待値や信頼区間を出す。 手計算では無理。
- 105 名前:132人目の素数さん mailto:sage [2020/03/24(火) 08:34:40.14 ID:TnHQvRcs.net]
- 感度0.7 特異度0.9でコンピュータに計算させると
陽性率が30%なら有病率の推測値は > PCRj(100,30) mean lower upper 0.3396123 0.1994400 0.4964517 > PCRj(1000,300) mean lower upper 0.3343576 0.2876152 0.3832246 > PCRj(10000,3000) mean lower upper 0.3333387 0.3186388 0.3481056 > PCRj(100000,30000) mean lower upper 0.3332425 0.3286774 0.3380952 と 期待値も信頼区間もそれらしい値になるが、 陽性率が1%なら有病率の推測値は偽陽性が増えまくるので陽性率と有病率が乖離する、 > PCRs(100,1) mean lower upper 0.01497496587 0.00004299248 0.04480331292 > PCRs(1000,10) mean lower upper 0.001642898836 0.000001299175 0.004982795701 > PCRs(10000,100) mean lower upper 0.000174692810 0.000000052897 0.000560041026 > PCRs(100000,1000) mean lower upper 0.000016780530193 0.000000002738145 0.000051489256688 陽性率が60%なら、今度は偽陰性が増えまくるので偽陰性が増えまくるので陽性率と有病率が乖離する。 > PCRs(100,1) > PCRs(100,60) mean lower upper 0.8280581 0.6766480 0.9764282 > PCRs(1000,600) mean lower upper 0.8335023 0.7826355 0.8825766 > PCRs(10000,6000) mean lower upper 0.8334634 0.8187334 0.8492064 > PCRs(100000,60000) mean lower upper 0.8332873 0.8289242 0.8379535
- 106 名前:132人目の素数さん mailto:sage [2020/03/24(火) 08:42:02.80 ID:TnHQvRcs.net]
- Rとstanでベイズ統計ができるなら、以下のコードで実行可能。
パッケージ rstan と BEST(信頼区間グラフ描出用)が必要 library("BEST") library("rstan") rstan_options(auto_write = TRUE) options(mc.cores = parallel::detectCores()) options(scipen = 5) model.string=' data{ int n; // sample size int x; // number of positive test real<lower=0,upper=1> sen; // sensitivity 0.7 real<lower=0,upper=1> spc; // specificity 0.9 real<lower=0,upper=1> ul; // uniform(0,ul) } parameters{ real<lower=0,upper=1> prev; // prevalence } transformed parameters{ real<lower=0,upper=1> p; p = prev*sen + (1-prev)*(1-spc) ; // probability of positive test result } model{ x ~ binomial(n,p); prev ~ uniform(0,ul); } ' writeLines( model.string , con='model.stan' ) corona1.model=stan_model('model.stan') # saveRDS(corona1.model,file='corona1.rds') # corona1.model=readRDS('corona1.rds') PCRs <- function(N=1000,X=10,UL=1,SEN=0.7,SPC=0.9,verbose=FALSE,...){ data = list(n=N,x=X,sen=SEN,spc=SPC,ul=UL) fit.corona = sampling(corona1.model, data=data, seed=1234,control=list(adapt_delta=0.99),...) if(verbose) print(fit.corona, prob=c(0.025,0.5,0.975),pars=c('prev'),digits=8) ms=rstan::extract(fit.corona) BEST::plotPost(ms$prev,showMode = T,xlab='prevalence') ; lines(density(ms$prev),col='skyblue') c(mean=mean(ms$prev),HDInterval::hdi(ms$prev)[1:2]) }
- 107 名前:132人目の素数さん mailto:sage [2020/03/24(火) 08:46:15.46 ID:TnHQvRcs.net]
- >>102(補足)
非対称分布の信頼区間計算にパッケージHDIntervalも必要。
- 108 名前:132人目の素数さん mailto:sage [2020/03/24(火) 08:51:43.98 ID:TnHQvRcs.net]
- >>76
偽陽性率が現時点での有病率を大きく上回るから東大生の言い分が正しい。 有病率が3割程度になれば上先生の言い分が正しい。
- 109 名前:132人目の素数さん mailto:sage [2020/03/24(火) 10:27:48 ID:TnHQvRcs.net]
- >>104
1000人調べたときの検査陽性率と推定陽性率をグラフにしてみた。 灰色直線は検査陽性率=推定陽性率の直線 検査陽性率が低いときは過小評価、高いときは過大評価する。 https://i.imgur.com/wmOAj5i.png
- 110 名前:132人目の素数さん mailto:sage [2020/03/24(火) 10:29:17 ID:mBslr8ul.net]
- 何言ってんの?
市中感染率をいくらでも正しく推定できるかなんでしよ? 結論のために問題変えるなよ。 政治の話をここに持ち込むなよ。
- 111 名前:132人目の素数さん [2020/03/24(火) 10:52:19 ID:EUfp1x4d.net]
- >>104
上の言い分も一理あるし、東大生の言い分も一理あるw 特異度が90%を越える高い値だという前提があればこうなる。 1)検査陽性率が低く(数%以下)、特異度がほぼ100%でないの なら、市中感染率を推定するのは難しい。とはいえ、上限は (検査陽性率/感度)程度で抑えられる。つまり10%以下くらいの ことは言えるが、0%かもしれない。 2)一方、検査陽性率が高ければ(数十%以上)、下限は検査 陽性率程度と見込めるが、市中感染率は感度に依存して大きく 変化する。つまり、数十%以上とは言えるが100%近いかどうか までは不明。 ってことで、検査陽性率からある程度市中感染率の目安は立つが、 それがどこまで意味があるとみなせるかは疑問。TPO次第か。
- 112 名前:132人目の素数さん [2020/03/24(火) 10:58:55 ID:EUfp1x4d.net]
- あと、補足すると、感度と特異度が正確にわかっているのなら、
統計学的に市中感染率を推定することはある程度可能だけど、 実際はそうではないから、上様の言い分には意味がない。
- 113 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:03:07 ID:TnHQvRcs.net]
- >>105
感度と特異度を変化させて、検査陽性率と推定有病率の関係をグラフにしてみた。 https://i.imgur.com/YEtcSfn.png
- 114 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:06:16 ID:mBslr8ul.net]
- だから自分の言いたい結論が先に決まっててそれに合わせて好き勝手に問題読み替えてるだけじゃん?
そんな考え方しかできないなら理系板に来んなよ。
- 115 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:09:05 ID:TnHQvRcs.net]
- >>108
感度も特異度も定数でなく何らかの分布に従うパラメータとしてモデルを組めばいいだけの話だろ。
- 116 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:48:05 ID:TnHQvRcs.net]
- 感度が最頻値0.7 標準偏差0.05のベータ分布β(58.229, 25.527 )
特異度が最頻値0.9 標準偏差0.05のベータ分布β(36.172, 4.908) に従うと過程して model { x ~ dbin(p,n) p <- prev*sen + (1-prev)*(1-spc) sen ~ dbeta(sn[1],sn[2]) spc ~ dbeta(sp[1],sp[2]) prev ~ dunif(0,ul) } こういうモデルでMCMCすれば可能。 実行結果 > PCRj2(1000,10) # 陽性率1%で有病率を推定 mean lower upper 0.001667604624 0.000000053909 0.004956969423 > PCRj2(1000,300) # 陽性率30%で有病率を推定 0.33414 0.28797 0.38253 > PCRj2(1000,600) # 陽性率60%で有病率を推定 mean lower upper 0.8
- 117 名前:3296 0.78428 0.88496 []
- [ここ壊れてます]
- 118 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:56:18 ID:TnHQvRcs.net]
- β分布のパラメータを出すRスクリプト
# a,b to Mode,mean,variance ab2Mmv<-function(a,b){ M<-(a-1)/(a+b-2) m<-a/(a+b) v<-a*b/((a+b)^2*(a+b+1)) cat('Mode =',M,'mean =',m,'variance =',v,'\n') invisible(c(Mode=M,mean=m,variance=v)) } # Mode,kappa to mean,variance Mk2mvab= function( mode , kappa ) { # if ( mode < 0 | mode > 1) stop("must have 0 <= mode <= 1") # if ( kappa <2 ) stop("kappa must be >= 2 for mode parameterization") a = mode * ( kappa - 2 ) + 1 b = ( 1.0 - mode ) * ( kappa - 2 ) + 1 m=a/(a+b) v=m*(1-m)/(a+b+1) return( c( mean=m , variance=v,a=a,b=b ) ) } # Mode,variance to a,b Mv2ab = function(mode,vari){ f=function(kappa) Mk2mvab(mode,kappa)[2] - vari kappa=uniroot(f,c(2,10000))$root ab=Mk2mvab(mode,kappa)[c('a','b')] ab2Mmv(ab[1],ab[2]) return(ab) } (sn=Mv2ab(0.7,0.05^2)) curve(dbeta(x,sn[1],sn[2]),bty='l') (sp=Mv2ab(0.9,0.05^2)) curve(dbeta(x,sp[1],sp[2]),bty='l')
- 119 名前:132人目の素数さん mailto:sage [2020/03/24(火) 11:57:10 ID:TnHQvRcs.net]
- 上記の準備をして以下で実行
PCRj2 <- function( N,X, UL=1, SEN=0.7, SPC=0.9, SD=0.05, print=TRUE){ # UL:upper limit of dunif(0,UL) library(rjags) library(BEST) sn=Mv2ab(SEN,SD^2) sp=Mv2ab(SPC,SD^2) modelstring=paste0(' model { x ~ dbin(p,n) p <- prev*sen + (1-prev)*(1-spc) sen ~ dbeta(sn[1],sn[2]) spc ~ dbeta(sp[1],sp[2]) prev ~ dunif(0,ul) } ') writeLines(modelstring,'TEMPmodelj.txt') dataList=list(n=N,x=X,ul=UL,sen=SEN,spc=SPC,sn=sn,sp=sp) jagsModel = jags.model( file="TEMPmodelj.txt" ,data=dataList, quiet=TRUE) update(jagsModel) codaSamples = coda.samples( jagsModel , variable=c("prev","p","sen","spc"), n.iter=1e5, thin=5) js=as.matrix(codaSamples) if(print){ BEST::plotPost(js[,'prev'],xlab='prevalence',showMode = TRUE) lines(density(js[,'prev']),col='skyblue')} re=c(mean=mean(js[,'prev']),HDInterval::hdi(js[,'prev'])[1:2]) return(re) } options(digits = 5) options(scipen = 5) PCRj2(1000,10) # 陽性率1%で有病率を推定 PCRj2(1000,300) # 陽性率30%で有病率を推定 PCRj2(1000,600) # 陽性率60%で有病率を推定
- 120 名前:132人目の素数さん mailto:sage [2020/03/24(火) 13:15:20 ID:/QqkwKRd.net]
- >>99
期待値というのは、無次元量ではない。観測値とか物理量と同じように単位をつけて議論できる量。 従って「期待値が10%増える」等という言葉があれば、期待値が1.1倍になるのだろうと感じるのが普通。 そのような性質を持つ期待値に対し、「10%増える」と表現し、 「期待値の値そのものが、0.1増えることを意味している」 と説明しなければならないならば、やはり誤解を招きやすい表現だと思う。 今回の期待値は比率であり、無次元量であったから、「10%」と言うのが、 どちらの意味としても、通用したため発生したとは言えるが、読み手の立場に立った表現を望む。 似た議論に、選挙時の投票率がある。前回の投票率が40%。今回の投票率が50%だとする。 「前回に比べ、今回は10%増えました」 「前回に比べ、今回は25%増えました」 どちらも、言い得る表現。聞き手の混乱を避けるため、前者の意味で使う場合、 「10%ポイント増えました」とコメントするのを最近聞くようになった。 私にはよい傾向と感じるが、中には、違いは何かとか、混乱の源の存在さえ意識していない人もいるようだ。 「3割増も4割強増も大した差ではない」には、「式が違っても結果が誤差範囲なら問題ない」 という考えが背景に見える。そのような方が、混乱を引き起こしかねない表現を用いた。 だから、補足した。果たして本当に杞憂だったのだろうか?
- 121 名前:132人目の素数さん mailto:sage [2020/03/24(火) 14:42:23 ID:TnHQvRcs.net]
- 富山では62人PCR検査して陽性0人(3月22日までの集計)有病率を推定とその信頼区間を推定したい。
www.pref.toyama.jp/cms_pfile/00021629/01366377.pdf PCR検査の感度は最頻値0.6標準偏差0.1、特異度は最頻値0.9標準偏差0.05のベータ分布(正規分布は負になったり1を超えるので不適)、 有病率は一様分布として、推定される有病率の期待値と95%を計算せよ。 図示するとこんな感じ。 https://i.imgur.com/Ip6gSCa.png stanのモデルのスクリプトはこれ sn,spはβ分布のパラメータ、その計算法は既述 data{ int n; // sample size int x; // positive test result real<lower=0,upper=1> ul; // uniform(0,ul) real<lower=0> sn[2]; // sen ~ beta(sn[1],sn[2]) real<lower=0> sp[2]; // spc ~ beta(sp[1],sp[2]) } parameters{ real<lower=0,upper=1> prev; // prevalence real<lower=0,upper=1> sen; // sensitivity real<lower=0,upper=1> spc; // specificity } transformed parameters{ real<lower=0,upper=1> p; p = prev*sen + (1-prev)*(1-spc) ; // probability of positive test result } model{ x ~ binomial(n,p); prev ~ uniform(0,ul); sen ~ beta(sn[1],sn[2]); spc ~ beta(sp[1],sp[2]); }
- 122 名前:132人目の素数さん mailto:sage [2020/03/24(火) 14:54:23 ID:TnHQvRcs.net]
- >>116
ここで問題 感度特異度の分布はそのベータ分布として 何人陰性が続けば95%信頼区間の上限が0.05を下回るか?
- 123 名前:132人目の素数さん mailto:sage [2020/03/24(火) 15:14:26 ID:mBslr8ul.net]
- >>117
感度、特異度の分布???
- 124 名前:132人目の素数さん mailto:sage [2020/03/24(火) 15:56:48 ID:TnHQvRcs.net]
- >>118
何でも確率変数にするのがベイズ推計。 p値の分布すら考えるぞ。
- 125 名前:132人目の素数さん mailto:sage [2020/03/24(火) 16:10:56 ID:TnHQvRcs.net]
- PCR検査の感度は最頻値0.6標準偏差0.1、特異度は最頻値0.9標準偏差0.05のベータ分布を事前分布にしたけど、
事後分布はstanによるMCMCで 感度は期待値0.57 95%信頼区間は[0.37,0.77] 特異度は期待値0.96 95%信頼区間は[0.91,0.99] とコンピュータが計算してくれる。
- 126 名前:132人目の素数さん mailto:sage [2020/03/24(火) 17:38:05 ID:TnHQvRcs.net]
- >116のように弱情報事前分布を設定することで事後分布は次のように描ける。
https://i.imgur.com/J1Xqdfj.png
- 127 名前:132人目の素数さん mailto:sage [2020/03/24(火) 17:43:56 ID:TnHQvRcs.net]
- >>54
いや、特異度の事前分布を設定することで事後分布をMCMCで求めることができる。 >116の設定での結果が>121
- 128 名前:132人目の素数さん [2020/03/24(火) 18:10:37.68 ID:EUfp1x4d.net]
- >>122
結局事前分布の設定次第ってことはないの?
- 129 名前:132人目の素数さん mailto:sage [2020/03/24(火) 18:45:58.22 ID:TnHQvRcs.net]
- >>123
日本人の平均身長を推測するのにその値は1〜2mの間であるという弱情報事前分布は合理的。 感度特異度の分布に正規分布を使うのはアホ。 負になったり、1を超えたりするから。
- 130 名前:132人目の素数さん mailto:sage [2020/03/24(火) 19:08:27.01 ID:TnHQvRcs.net]
- >>123
感度を0.4-0.8の一様分布、特異度を0.8-1.0の一様分布にしても有病率の推定値は > round(re$mci,5) mean lower upper 0.02827 0.00000 0.08592 であまり変わらないね。
- 131 名前:132人目の素数さん mailto:sage [2020/03/24(火) 19:20:40 ID:TnHQvRcs.net]
- sensitivity ~ N(m=0.6,sd=0.1) specificity ~ N(m=0.9, sd=0.05)
にしても推測有病率は平均3%弱で 95%CIは0-8%とあまり分布の形にはよらないね。 mean lower upper 0.026841384 0.000000153 0.081071379 確率だと定義域が0-1で計算しやすいのでβ分布を使うことが多い。
- 132 名前:132人目の素数さん mailto:sage [2020/03/24(火) 21:43:16 ID:mBslr8ul.net]
- >>119
そう? 統計の推定の理論で推計する母数は確率変数ではないと習ったけど?
- 133 名前:132人目の素数さん mailto:sage [2020/03/25(水) 05:45:40 ID:jmNOx22O.net]
- >>127
時代は頻度主義統計からベイズ統計だよ。
- 134 名前:132人目の素数さん mailto:sage [2020/03/25(水) 06:04:40 ID:jmNOx22O.net]
- 頻度主義統計でも最尤推定では
データを固定してパラメータを動かすだろ。
- 135 名前:132人目の素数さん mailto:sage [2020/03/25(水) 06:30:36 ID:jmNOx22O.net]
- >>127
階層ベイズモデルを扱ったことないの? >112は簡単な実例。
- 136 名前:132人目の素数さん mailto:sage [2020/03/25(水) 07:18:32 ID:yWXBkNWD.net]
- >>128 >>130
何を持ってベイズ統計っていってんのか知らん。 pcr検査の感度とは被験者が感染者である場合の検査結果が陽性となる条件付き確率でしょ? 条件付き確率の分布ってどういうことよ? 確率がまた確率になるってなんの話してんの? 変数Xの平均とか分散とかは統計学においては推定すべき定数であって確定値。 それの分散なんて数学的に意味不明。 一体どこの統計学の教科書にそんなデタラメ書いてあんの?
- 137 名前:132人目の素数さん mailto:sage [2020/03/25(水) 07:23:50 ID:r1V62jxn.net]
- まちがえた。
確率の平均がまた確率変数になるってどういうことよ、ね。 式でかけば確率変数Xの平均E(X)の分散ってなんの話ってことになる。 確率変数Xはある標本空間上の関数だけどE(X)は実数だよ?
- 138 名前:132人目の素数さん mailto:sage [2020/03/25(水) 09:57:10 ID:2o2
]
- [ここ壊れてます]
- 139 名前:7M3ww.net mailto: >>131
ベイズ階層モデルも組めない奴とは議論にならんね。 分散の事前分布に逆ガンマ分布でなく半コーシーを使う方がいいとかいう議論も理解できんだろ。 [] - [ここ壊れてます]
- 140 名前:132人目の素数さん mailto:sage [2020/03/25(水) 10:06:13 ID:2o27M3ww.net]
- >>131
ベータ分布は定義域が[0,1]で二項分布の確率の確率密度関数としてベイズ階層モデルでは頻用されるよ。 ベイズ階層モデルを使わずにこの計算できるならやってみてくれ。 020/3/24 11:00時点で検査人数での陽性率は171/2013であるという。 新型コロナ肺炎のPCR検査の感度は5〜7割、特異度は9割前後らしい。幅をもたせた値を使って検査をうけたグループの有病率を計算せよ。
- 141 名前:132人目の素数さん mailto:sage [2020/03/25(水) 11:27:50 ID:82yASlvk.net]
- >>133
まぁ言わんとする事はもちろんわかるし伝わるけど、疫学だから数学やってる人間がなんとなく伝わるではダメだろ? 数学だけの話ではなく、疫学は実社会とキチンと繋がってるんだから? 統計学ではあくまで検定する母数は定数。 それは確率モデルでは実数値であり、定数。 そして統計データを確率変数に割り当てる。 当然それらの確率変数は一つの測度空間の一つしかない確率変数であり、平均も分散もひとつしかない定数値。 それらをいっぱい考えてどうこう言ってるんだろうとは思うけどそんなの統計学や疫学の一般的な考えにはない。 何故なら現実世界はひとつしかなく、確率変数に対応している統計量も一個しかない。 もちろん母数がめちゃめちゃ大きい統計量で例えば10000個のデータを100こずつ切って100個の統計量を100の世界からとってきたなんて考えが無理クリできなくはないが、そんな考え方は普通しない。 それはあくまで100個ずつに区切られた10000個の一つの世界の確率変数としか扱わない。 そういうオリジナルな考えで捉えたいならそれは勝手だけど、それならそれで話の中で明示しないとダメ。 数学の世界なら言わずもがなの話は言わなくてもエスパーしてもらえても、疫学、統計学の世界では実社会とつながる話だからダメ。
- 142 名前:132人目の素数さん mailto:sage [2020/03/25(水) 12:30:50.29 ID:jmNOx22O.net]
- >>135
能書きいいから、 ベイズ階層モデルを使わずにこの計算できるならやってみてくれ。 020/3/24 11:00時点で検査人数での陽性率は171/2013であるという。 新型コロナ肺炎のPCR検査の感度は5〜7割、特異度は9割前後らしい。幅をもたせた値を使って検査をうけたグループの有病率を計算せよ。
- 143 名前:132人目の素数さん mailto:sage [2020/03/25(水) 12:39:07.64 ID:jmNOx22O.net]
- >>136
こういう判断が現実には必要。 検査特性を無視して単純な割り算だと検査を受けた人の有病率は8.5%弱になるけどこれは過大評価か過小評価か?
- 144 名前:132人目の素数さん mailto:sage [2020/03/25(水) 14:59:13.04 ID:jmNOx22O.net]
- 検査感度が5-7割、特異度が9割前後なら
検査陽性率=有病率とすると常に過大評価かどうか気になったので陽性数を変化させて計算してみた。 検査感度はmode=0.6,sd=0.1 特異度はmode=0.9,sd=0.05のベータ分布に設定してJAGSでベイズ階層モデルをたてて計算。 https://i.imgur.com/zTdxRrb.png 陽性率が20%未満のときは過大評価、それ以上のときは過小評価である、という結論になった。 ベイズ統計を理解できている人の検証希望。
- 145 名前:132人目の素数さん mailto:sage [2020/03/25(水) 17:30:41 ID:jmNOx22O.net]
- >>138
プログラムの練習がてらに、 MCMCのアルゴリズムの異なるstanでベイズ階層モデルを組んで検証。 当然ながら、同様の結果。 検査陽性率が20%を境に過大評価と過小評価が入れ替わる。 https://i.imgur.com/ItSNWdD.png
- 146 名前:132人目の素数さん mailto:sage [2020/03/25(水) 21:21:08.00 ID:jmNOx22O.net]
- >>136(自己レス)
今日の都の発表で(171+41)/(2013+89) に検査陽性率が増えたので再計算。 https://i.imgur.com/THdYDqT.png
- 147 名前:132人目の素数さん mailto:sage [2020/03/25(水) 21:33:22.10 ID:jmNOx22O.net]
- >>138
サンプリング回数を増やしてグラフを完成。 https://i.imgur.com/kLjCD2y.png []- [ここ壊れてます]
- 149 名前:132人目の素数さん mailto:sage [2020/03/26(木) 16:25:58 ID:+rQz06p5.net]
- >>140
89は検査数で検査人数は74という。 計算し直すと > PCRj2(N,r,SEN=0.6,SD1=0.1,SPC=0.9,SD2=0.05,N.ITER=5e5) |**************************************************| 100% mean lower upper 0.05720165 0.00000015 0.1332385
- 150 名前:132人目の素数さん mailto:sage [2020/03/26(木) 16:34:28 ID:+rQz06p5.net]
- 41/74の推測有病率は
mean lower upper 0.8121975 0.5957315 0.9999992
- 151 名前:132人目の素数さん mailto:sage [2020/03/27(金) 11:07:27 ID:sdGiAEI7.net]
- オリンピック延期発表後の検査陽性率は88/169で52%だが、
PCR検査の感度と特異度がはっきりしないので、検査陽性率をこの集団の有病率とするのは正しくない。 88/169のときの感度・特異度と推定有病率の関係をグラフにしてみた。 https://i.imgur.com/iQC88tZ.png 感度0.6、特異度0.9のときの推定有病率は85%で陽性率からの憶測は過小評価といえる。
- 152 名前:132人目の素数さん [2020/03/27(金) 18:36:04.97 ID:8rq7DP6B.net]
- 検査陽性率が小さいときには、実際の有病率より過大評価してるし、
検査陽性率が高いときは、過小評価してるだろうってことでしょ。 そのくらいは定性的に理解できる。
- 153 名前:132人目の素数さん mailto:sage [2020/03/27(金) 20:59:08.67 ID:sdGiAEI7.net]
- >>145
どこが境目かは直感じゃわからんね。
- 154 名前:132人目の素数さん [2020/03/27(金) 22:15:19.84 ID:8rq7DP6B.net]
- そりゃ感度や特異度次第だからな。
まあ、数%と数十%では違うんだということがわかればいいんじゃね? 境目なんかどうでもいいでしょ。
- 155 名前:132人目の素数さん mailto:sage [2020/03/27(金) 22:22:39.69 ID:sdGiAEI7.net]
- 陽性率が15%でこれを有病率の推測値に使うのは過大評価なのか過小評価がわからんのはまずいね。
- 156 名前:132人目の素数さん mailto:sage [2020/03/27(金) 23:24:27 ID:sdGiAEI7.net]
- オリンピック延期決定以後の検査数と陽性数
subjects=c(74,95,87) positives=c(41,47,40) PCRs3(subjects,positives,iter=10000,warmup=1000) として、 感度・特異度を考慮した推定有病率は mean lower upper 0.77417 0.56756 0.99944 > 日々の陽性数が二項分布に従うとして計算。
- 157 名前:132人目の素数さん [2020/03/28(土) 03:24:30.89 ID:NK6wIjWT.net]
- 志村けんみたいな有名人がコロナに感染してることから日本全体のコロナ感染者数を推定してみる。
まず、日本の有名人が1000人いるとしよう。 つぎに、日本でコロナに感染していない確率をxとしよう。 すると、有名人1000人が一人も感染していない確率は、xの1000乗となる。これをyとおこう。すると、有名人が一人でも感染している確率は(1-y)となる、これをzとおこう。 まとめると以下の関係がなりたつ。 ・コロナに感染しない確率:x ・有名人が一人もコロナに感染しない確率:y=x^1000 ・有名人が一人でもコロナに感染している確率:z = 1-y
- 158 名前:132人目の素数さん [2020/03/28(土) 03:25:09.78 ID:NK6wIjWT.net]
- 志村は感染したわけなので、以下、2つのケースにわける
ケース1: zが10%のとき z=0.1, 故にy = 1-0.1=0.9 故にx = y^0.001よりx=0.9^0.001=0.999894 これがコロナに感染していない確率なので、 コロナ感染確率は、1-0.999894=0.000106 よって日本のコロナ感染者数は推定 120,000,000*0.000106=12,720人 ケース2:zが50%のとき ケース1と同様の計算で、 日本のコロナ感染者数は推定 120,000,000*0.000693=83,160人
- 159 名前:132人目の素数さん [2020/03/28(土) 09:37:19.12 ID:uwBdnirU.net]
- 検査が少ないから感染者増が緩やか?数学的に検証してみた
agora-web.jp/archives/2045047.html 主な関係国について、新型コロナ感染者数の片対数グラフがある。 agora-web.jp/cms/wp-content/uploads/2020/03/WS000876.jpg FT.comより 感染者数の伸びが日本は緩やかと解釈するのが普通だが、検査が少ないからとする解釈もある。本当はどうなのか計算してみる。 結論を先に書くと、検査が多いか少ないかは関係ない。
- 160 名前:132人目の素数さん mailto:sage [2020/03/28(土) 09:40:23.67 ID:QZo3p56d.net]
- 対数をとると係数(感染者の発見率)は定数項になり、今回の片対数グラフ
- 161 名前:フ整理法の前提としてキャンセルされる
日本が展開しているのは患者認定の精度上昇であり、医療リソースの効果を最大化して死者数を低く抑えている要因の一つといえる [] - [ここ壊れてます]
- 162 名前:132人目の素数さん mailto:sage [2020/03/28(土) 10:39:35.99 ID:BJlezchp.net]
- キャバクラ客100人から無作為に5人から検体を採取してこの検体を混合攪拌してコロナ検査したところ陽性であった。
(1)100人のキャバクラ客の陽性数の期待値と95%信頼区間を求めよ。 (2)PCR検査の感度0.6、特異度0.9として100人のキャバクラ客の感染数の期待値と95%信頼区間を求めよ。
- 163 名前:132人目の素数さん mailto:sage [2020/03/28(土) 11:58:45.95 ID:BJlezchp.net]
- >>151
> m=1000 # 有名人の人数 > n=1.268e5 # 日本の人口 > x=0:n # 感染者数:x, 非感染数:n-x > pmf=1- chooseZ(n-x,m)/chooseZ(n,m) # 1 - (m人全員非感染の確率) > pdf=pmf/sum(pmf) # 確率密度関数化して > (E=sum(x*pdf)) # 期待値を計算 Big Rational ('bigq') : [1] 63590201/1002 > as.numeric(E) [1] 63463.27 6万3000人と計算された。
- 164 名前:132人目の素数さん [2020/03/28(土) 12:46:07.99 ID:NK6wIjWT.net]
- >>155
良く分からんが、ありがとう。 こちとら高校レベルの確率の知識しかないもんで。
- 165 名前:132人目の素数さん mailto:sage [2020/03/28(土) 15:42:06.57 ID:BJlezchp.net]
- >>156
n(=10)人の中にi人の感染者がいるとき無作為にm(=2)人を選ぶ。 選ばれた2人の中に少なくとも一人の感染者がいる確率をP[x]として、 n個からr個選ぶ組み合わせの数をChoose(n,r)で表すと P[xi]=1- choose(10-x,2)/choose(10,2) xを0から10まで変化させて、 Σx*P[x]/(ΣP[x])で 期待値が求まる。
- 166 名前:132人目の素数さん mailto:sage [2020/03/28(土) 15:42:43.27 ID:BJlezchp.net]
- タイプミス修正
P[x]=1- choose(10-x,2)/choose(10,2)
- 167 名前:132人目の素数さん mailto:sage [2020/03/28(土) 16:07:51.35 ID:qsSYTF8t.net]
- 何このアホスレ?
- 168 名前:132人目の素数さん mailto:sage [2020/03/28(土) 16:53:08.32 ID:BJlezchp.net]
- 有名人の数を増やしてみても同様の結果になった。
> # 有名人が感染 > library(gmp) > m=18200 # 有名人の数(桜を見る会参加人数) > n=1.268e5 # 日本の人口 > x=0:n # 感染者数:x, 非感染数:n-x > pmf=1- chooseZ(n-x,m)/chooseZ(n,m) # 1 - (m人全員非感染の確率) > pdf=pmf/sum(pmf) # 確率密度関数化して > (E=sum(x*pdf)) # 期待値を計算 Big Rational ('bigq') : [1] 1154070201/18202 > as.numeric(E) # E=63463.27 (m=1000) , E=1154070201/18202=63403.48(m=1.268e5) [1] 63403.48
- 169 名前:132人目の素数さん [2020/03/28(土) 19:42:56.69 ID:NK6wIjWT.net]
- >>160
なんだってー。直感に反するな
- 170 名前:132人目の素数さん mailto:sage [2020/03/29(日) 09:23:06.20 ID:WogCQeQk.net]
- >>161
総人口100人として有名人の数を1〜100人まで変化させて、有名人に感染者がいたときの100人中の感染者の数をグラフにすると https://i.imgur.com/SMFnNNl.png 有名人の数を変化さえても期待値にさほどの変化はない。
- 171 名前:132人目の素数さん [2020/03/29(日) 10:18:20.74 ID:2PsxdXJm.net]
- >>162
感染者が1名以上という条件だと、 有名人の割合が一定以上になると飽和するんだな。
- 172 名前:132人目の素数さん mailto:sage [2020/03/29(日) 10:39:47.55 ID:WogCQeQk.net]
- Ax: x人の感染者がいる(x=0〜n)という事象
B:最低一人の感染陽性判定という事象 Pr[Ax|B]=Pr[B|Ax]Pr[Ax]/Pr[B] Pr[Ax]:事前確率 Pr[B|Ax]:尤度 Pr[B]:周辺尤度(規格化定数) 求めたい期待値Eは Σ(x*Pr[Ax|B])/ΣPr[Ax|B] = Σ(x*Pr[B|Ax]Pr[Ax])/Σ(Pr[B|Ax]Pr[Ax]) Pr[Ax]がxにかかわらず定数であれば E=Σ(x*Pr[B|Ax])/Σ(Pr[B|Ax]) 事前確率分布を一様分布と仮定しての計算 つまり、感染者が1人の確率も50人の確率も100人の確率,....も一定という前提での計算。
- 173 名前:132人目の素数さん mailto:sage [2020/03/29(日) 10:47:28.57 ID:WogCQeQk.net]
- >>163
そうみたいですね。 > data.frame(有名人=1:10,期待値=sapply(1:10,function(x) fn(100,x)$mean)) 有名人 期待値 1 1 67.00000 2 2 62.75000 3 3 60.20000 4 4 58.50000 5 5 57.28571 6 6 56.37500 7 7 55.66667 8 8 55.10000 9 9 54.63636 10 10 54.25000 > data.frame(有名人=1:10*10,期待値=sapply(1:10*10,function(x) fn(100,x)$mean)) 有名人 期待値 1 10 54.25000 2 20 52.31818 3 30 51.59375 4 40 51.21429 5 50 50.98077 6 60 50.82258 7 70 50.70833 8 80 50.62195 9 90 50.55435 10 100 50.50000
- 174 名前:132人目の素数さん [2020/03/29(日) 10:58:30.70 ID:1Oo79tY3.net]
- 「有名人」を「wikに載ってる人」と定義し
その数を10000人としてそのうち4人(志村、藤浪、長坂、伊藤隼人) 感染したとしても結果は変わらない
- 175 名前:132人目の素数さん mailto:sage [2020/03/29(日) 10:58:36.48 ID:WogCQeQk.net]
- 昨日の東京のコロナ陽性者は87人検査して63人陽性であったという。
検査の感度0.6 特異度0.9と仮定して、87人中に感染者は何人と推定されるか? 真陽性率=感度=0.6 偽陽性率=1−特異度=0.1 87人中の感染者数をxとすると 陽性者数= 感染者数*真陽性率 + 非感染者数*偽陽性率 63=x*0.6+(87-x)*0.1 これを解くとあり得ない答になる。
- 176 名前:132人目の素数さん mailto:sage [2020/03/29(日) 11:48:31.42 ID:WogCQeQk.net]
- >>166
総人口n人、有名人m人、そのうち感染者k人とすると n人中の感染者の期待値は x = 0 〜 nとして 、xCkはx人からk人選ぶ組み合わせの数を表す Σ(x*(xCk/nCm))/Σ(xCk/nCm) = =Σ(x*(xCk))/Σ(xCk) となるのでmの値には依存しない。 n
- 177 名前:132人目の素数さん [2020/03/29(日) 14:27:34.63 ID:2PsxdXJm.net]
- >>168
するとこの計算で出てくる推定感染者数6万人って値は意味ない感じですか?
- 178 名前:132人目の素数さん mailto:sage [2020/03/29(日) 14:33:09.96 ID:WogCQeQk.net]
- >>167
陽性者数が87人中63人になるような感度と特異度を最小二乗法で求めると。 > (opt=optim(c(0.6,0.9,63),nazo,method='CG')) $par [1] 0.916014625 0.779617519 63.002729987
- 179 名前:132人目の素数さん [2020/03/29(日) 14:48:03.55 ID:0jXKnAa1.net]
- 学術の巨大掲示板群 - アルファ・ラボ
ttp://x0000.net 数学 物理学 化学 生物学 天文学 地理地学 IT 電子 工学 言語学 国語 方言 など
- 180 名前:132人目の素数さん mailto:sage [2020/03/29(日) 15:31:10 ID:WogCQeQk.net]
- >>170
初期値に依存するから意味のないスクリプトであると判明したので撤回します。
- 181 名前:132人目の素数さん mailto:sage [2020/03/29(日) 15:31:33 ID:WogCQeQk.net]
- >>169
単なる数字の遊びだろうね。
- 182 名前:132人目の素数さん mailto:sage [2020/03/29(日) 15:37:58 ID:WogCQeQk.net]
- >>169
前提となっているのが、 日本人1億2680万人いるとして 日本人の感染者数が1人である確率も1億人である確率も同じと、一様分布を仮定しているのが現実離れしている。 よって現実的には意味がない。
- 183 名前:132人目の素数さん mailto:sage [2020/03/31(火) 03:21:38.60 ID:5/cy/U/F.net]
- https://youtu.be/WUMN_71p3Js?t=56
専門家会議がモデルを出したから議論してくれ
- 184 名前:132人目の素数さん mailto:sage [2020/03/31(火) 06:08:43.61 ID:2llZ2I8j.net]
- >>175
Reed Frost モデルかな? 何を使ったかには言及がなかった。
- 185 名前:132人目の素数さん mailto:sage [2020/03/31(火) 06:12:02.74 ID:2llZ2I8j.net]
- Reed -Frostはパラメータが1個ですむから推定しやすいんだろう。
- 186 名前:132人目の素数さん mailto:sage [2020/03/31(火) 08:54:47.69 ID:2llZ2I8j.net]
- >>76
54119人という値になった。 計算プログラムは以下の通り。 # width of 99% confidence interval when 1000 subjects are examined p2w <- function( prevalence, subjects=1000, sensitivity=0.6, specificity=0.9, conf.level=0.99){ # prevalence -> width of 99% confidence interval n=subjects p=prevalence*sensitivity+(1-prevalence)*(1-specificity) # positive rate=prev*TP+(1-prev)*FP q=1-p 2*qnorm(1-(1-conf.level))*sqrt(p*q/n) # width of 99%CI } p2w=Vectorize(p2w) prevalence=seq
- 187 名前:(0,1,by=0.01)
plot(prevalence,p2w(prevalence),bty='l',type='l',lwd=2,ylab='99%CI width', main='subjects:1000\nsensitivity:0.6\nspecificity:0.9') optimize(p2w,c(0,1),maximum=TRUE) # sj2w <- function(subjects){ # subjects -> maximum 99%CI width & its prevalence optimize(function(prev) p2w(prev,subjects),c(0,1),maximum = TRUE) } # at how many subjects 99%ci width equals 0.01 uniroot(function(x,u0=0.01) sj2w(x)$objective-u0,c(1000,100000)) [] - [ここ壊れてます]
- 188 名前:132人目の素数さん [2020/03/31(火) 09:55:37.96 ID:cpD4Fk2x.net]
- 上って、灘校東大理IIIの超秀才のはずなのに、なんで
あんなに頭の悪い発言ばかりしてんの? 変な宗教にでも取り憑かれて理性が狂わされてるのかな?
- 189 名前:132人目の素数さん mailto:sage [2020/03/31(火) 10:07:35.24 ID:2llZ2I8j.net]
- 日本人1億2680万人からX人を無作為に抽出してPCR検査して、感染者数(≠検査陽性者数)を信頼区間99%誤差±1%で検定したい。
PCR検査は感度0.6,特異度0.9とする。 何人を抽出すれば十分といえるか? 54000人程度になったけど、あってる?
- 190 名前:132人目の素数さん mailto:sage [2020/03/31(火) 14:43:06 ID:2llZ2I8j.net]
- >>179
超秀才は理Iに行くんじゃないの?
- 191 名前:132人目の素数さん mailto:sage [2020/03/31(火) 14:50:29 ID:ncBHjUEo.net]
- >>180
感染率の程度、感度・特異度の値の精度の言及無しに出された結論に、ほとんど説得力は無い。
- 192 名前:132人目の素数さん mailto:sage [2020/03/31(火) 15:19:09 ID:2llZ2I8j.net]
- >>182
感度 beta(13.6991,9.4661)でmode 0.6 sd=0.1 特異 beta(36.172,4.908) でmode 0.9 sd=0.05 でベイズの階層モデルを組んでみるかな。
- 193 名前:132人目の素数さん mailto:sage [2020/03/31(火) 15:45:31.45 ID:2llZ2I8j.net]
- >>183
そのβ分布を弱情報事前分布に設定して、乱数発生させて計算すると 54000人で99%信頼区間の幅の分布は > summary(s2w(54000)) Min. 1st Qu. Median Mean 3rd Qu. Max. 0.008144 0.009912 0.009981 0.009927 0.010005 0.010011 となるから、まあ、概ねあっていると思うな。
- 194 名前:132人目の素数さん mailto:sage [2020/03/31(火) 17:50:11.35 ID:ncBHjUEo.net]
- 最も重要なファクターは事前感染率。
事前感染率はいくらに設定したの? 偽陽性が調査対象の10パーセント程含まれる。 医者が怪しいと判断した場合にのみ検査をする場合は、真陽性が調査対象の数十パーセントが期待できる。 このような場合は、真陽性は偽陽性より多数であることが期待でき、検査対象の正確な感染率は把握できるが、 「日本人1億2680万人からX人を無作為に抽出」のような方法だと、感染率0.01%(←現在確認できている感染者の 7倍程度が実際の感染者数に相当)辺りが妥当だと思われるが、この場合、五万人調査して、真陽性5人、偽陽性5000人 のような数字が出てくる。感染率0.02%だったとすると、真陽性10人、偽陽性5000人だ。 中央値のみで判断すると、例えば、5005人の陽性が出ると、0.01%で、5010人の陽性者が出ると0.02% のような データが出てくる。誤差との見極めは困難。 このような数字から、信頼できる感染率が出せるのか?
- 195 名前:132人目の素数さん mailto:sage [2020/04/01(水) 07:44:43.76 ID:xwYPMdxl.net]
- >>185
一様分布
- 196 名前:132人目の素数さん mailto:sage [2020/04/01(水) 07:48:29.51 ID:xwYPMdxl.net]
- 確率の分布を考えずにスポットで考える思考のやつとは議論にならんな。
ベイズ階層モデルやったことないの?
- 197 名前:132人目の素数さん mailto:sage [2020/04/01(水) 09:12:32 ID:bZbNlxPT.net]
- 0%〜100% までの一様分布のようだな。
つまり、事前確率全く不明だから、1/2教の経典に従い、0.5=50%でやったということ。 医者が検査を行った方がよいと判断した集団でも、なかなか有病率50%はいかない。 そのような結果は、無作為抽出で必要なの調査人数はどれくらいか等という議論では使えない。 全住民を対象にした無作為抽出なら、十
- 198 名前:万人に一人 以上いる(いた)のは確実だった一方、
百人に一人 という程たくさんはいないだろう と見積もれる。0.001%〜1% 辺りで行うべき。 ちょっと考えれば判ることを指摘しているに過ぎない。 調査対象の有病率0.01以下の集団に対し、特異度90%の性能の機器で調査しても、ほとんどがエラー。 せめて 有病率 は、 1-特異度 と同じオーダーか、1-特異度 より大きくないと、扱えない。 特異度99.99%の機器を用意するか、でなければ、有病率を10パーセント程度以上に煮詰めてからやれというお話。 [] - [ここ壊れてます]
- 199 名前:132人目の素数さん mailto:sage [2020/04/01(水) 09:19:12 ID:deMoC1lt.net]
- >>188
東京都の行政検査では陽性率が50%を越える日があるぞ。
- 200 名前:132人目の素数さん mailto:sage [2020/04/01(水) 09:26:31 ID:deMoC1lt.net]
- 有病率の事前分布を一様分布として
日々の陽性数は二項分布に従うとして オリンピック延期決定後の検査を受けた集団での有病率をMCMC出だすと (感度特異度は既述のβ分布を仮定) > subjects=c(74,95,87,143,244,330) > positives=c(17,41,47,40,63,68) > PCRs3(subjects,positives,iter=10000,warmup=1000) mean lower upper 0.37288732 0.09822213 0.63719043
- 201 名前:132人目の素数さん mailto:sage [2020/04/01(水) 09:31:13 ID:deMoC1lt.net]
- >>188
別に有病率を(0,0.1)の一様分布にしても計算できるけど 都の行政検査も陽性率が50%を越える日もあったから一様分布でいいと思うね。行政検査に回った集団の話だけど。 感度・特異度も弱情報事前分布が設定できる。
- 202 名前:132人目の素数さん mailto:sage [2020/04/01(水) 09:33:18 ID:deMoC1lt.net]
- 一変数のポイント確率しか計算できない奴との議論は不毛だね。
|

|