Up

‚Q‘I‘ðŽˆ‹­§–@3‘ΔÅ

Two Alternative Forced Choice (2AFC) Rating Method with Tri-Pair

ƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•ªŽUi•W€•ηj‚Ì„’è

 

 

Brady‚çi2023j‚ÍA‹L‰¯‚̃pƒtƒH[ƒ}ƒ“ƒX‚ÌŒ¤‹†‚É‚¨‚¢‚Ă͂QAFC‚ð—p‚¢‚邱‚Æ‚ð„§‚µ‚Ä‚¢‚邪A‚³‚ç‚ÉA•s“™•ªŽUƒ‚ƒfƒ‹‚ªROC‹Èü‚ɂ悭‡‚¤‚Æà–¾‚µ‚Ä‚¢‚éip. 442jBDecarlo(2010)‚ÍA•s“™•ªŽUƒ‚ƒfƒ‹‚ÍAL‚­—p‚¢‚ç‚ê‚Ä‚¢‚é‚Æà–¾‚µ‚Ä‚¢‚éB

•W€“I‚È‚QAFC‰Û‘è‚ł͓™•ªŽUƒ‚ƒfƒ‹‚ª‰¼’肳‚ê‚Ä‚¢‚邪A2AFC‚ðŠg’£‚µ‚Ä•s“™•ªŽUƒ‚ƒfƒ‹‚ª“K—p‚Å‚«‚邿‚¤‚ÉH•v‚³‚ꂽŽÀŒ±–@‚Æ•ªÍƒ‚ƒfƒ‹‚ª’ñˆÄ‚³‚ê‚Ä‚¢‚éiOkamoto, 2023jB•s“™•ªŽU‚ª—\‘z‚³‚ê‚éꇂÍA‚±‚ÌŠg’£2Žˆ‹­§‘I‘ð•]’è–@‚ð—p‚¢‚邱‚Æ‚ª‚Å‚«‚éB‚Ü‚½A•s“™•ªŽU‚Ƃ͓™•ªŽU‚ð‰¼’è‚µ‚È‚¢‚Æ‚¢‚¤‚±‚Ƃł ‚èAƒf[ƒ^‚ª“™•ªŽU‚Ì‚à‚̂ł ‚Á‚Ä‚à•s“™•ªŽUƒ‚ƒfƒ‹‚ð“K—p‚·‚邱‚Æ‚ª‚Å‚«‚éB‚±‚ÌꇂÍAƒVƒOƒiƒ‹ŽhŒƒ‚Ì•ªŽU‚ªƒmƒCƒYŽhŒƒ‚Æ“¯‚¶‚P‚Å‚ ‚邯‚¢‚¤•ªÍŒ‹‰Ê‚ª—\‘z‚³‚ê‚éB

Okamoto(2023)‚Å‚ÍA’ñަŽhŒƒ‘΂ÍA•W€2AFC‚̃n,s„‚ƃs,n„‚ɉÁ‚¦‚ÄAƒVƒOƒiƒ‹ŽhŒƒ‚Ì•ªŽU‚ð„’è‚·‚邽‚߂Ƀn,n„‚ƃs,s„‚Ì‚Q‘΂ª‰Á‚¦‚ç‚ê‚Ä‚¢‚éB‚µ‚©‚µAƒs,s„‚𜂢‚½‚R‘΂łàƒpƒ‰ƒ[ƒ^‚Ì„’肪‰Â”\‚Å‚ ‚é‚Ì‚ÅA‚±‚±‚Å‚ÍAƒn,n„Aƒn,s„Aƒs,n„‚Ì‚R‘΂ð—p‚¢‚½ê‡‚ɂ‚¢‚Äà–¾‚·‚éB

‚Ü‚¸Aƒ‚ƒfƒ‹‚ɂ‚¢‚Äà–¾‚ðs‚¢A‚»‚ÌŒãA•ªÍ—á‚ðŽ¦‚·Bƒtƒ@ƒCƒ‹‚ÍAtripfiles.zip‚ɂ܂Ƃ߂½B

 

 

ƒ‚ƒfƒ‹

 

ƒmƒCƒYŽhŒƒ‚ÌŠ´Šo‚ð‚ÅAƒVƒOƒiƒ‹ŽhŒƒ‚ÌŠ´Šo‚ð‚Å•\‚µA‚»‚ꂼ‚ꎟ‚̳‹K•ª•z‚É]‚¤‚Æ‚·‚éB

 

 

‚±‚±‚ÅAŠ´ŠoŽŸŒ³‚ÌŒ´“_‚Æ’PˆÊ‚ðƒmƒCƒYŽhŒƒ‚ÌŠ´Šo‚Ì•½‹Ï’l‚Æ•W€•ηi•ªŽU‚Ì•½•ûªj‚ªŽŸŽ®‚ð–ž‚½‚·‚悤‚ÉÝ’è‚·‚éiWickens, 2002jB

 

 

ŒŸo—Í‚ÍAƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•½‹Ï’l‚ƃmƒCƒYŽhŒƒŠ´Šo‚Ì•½‹Ï’l‚Ì·‚Å•\‚³‚ê‚éiGreen & Swets, 1988jB

 

 

‚Å‚ ‚éB

ƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•ªŽU‚ªƒmƒCƒYŽhŒƒŠ´Šo‚Ì•ªŽU‚Æ“™‚µ‚¢‚Æ‚«A‚·‚Ȃ킿A

 

 

‚̂Ƃ«‚ÍAŒŸo—͂͂ŕ\‚³‚ê‚éB‚·‚Ȃ킿A

 

 

‚Å‚ ‚éB

 

‚Ƃ̒l‚ÍA‚QAFC‰Û‘è‚ðˆÈ‰º‚̂悤‚ÉŠg’£‚·‚邯‹‚߂邱‚Æ‚ª‚Å‚«‚éB

‚QAFC‚Å‚ÍA’ñަŽhŒƒ‘΂̓ƒmƒCƒYAƒVƒOƒiƒ‹„‚ƃƒVƒOƒiƒ‹AƒmƒCƒY„‚Ì2Ží—Þ‚Å‚ ‚éB‚±‚ê‚ÉAƒƒmƒCƒYAƒmƒCƒY„‚ð‰Á‚¦‚ÄA‚RŽí—Þ‚ÌŽhŒƒ‘΂ɑ΂µ‚Ä•]’è–@‚ð—p‚¢‚邯AƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•½‹Ï’l‚Æ•ªŽU‚Ì„’è‚ðs‚¤‚±‚Æ‚ª‚Å‚«‚éB

‚QAFC‰Û‘è‚Å‚ÍAŠeŽŽs‚É‚¨‚¢‚Ä‚Q‚‚̎hŒƒiŽhŒƒ‘Îj‚ª—^‚¦‚ç‚ê‚éBŠeŽhŒƒ‚Ì’ñަˆÊ’ui‹óŠÔ“IAŽžŠÔ“Ij‚ðƒS1, S2„‚Å•\‚·B‘æ1’ñަˆÊ’u‚ªS1A‘æ‚Q’ñަˆÊ’u‚ªS2‚Å‚ ‚éBƒn, s„i‚ ‚é‚¢‚ÍAn-sj‚ÍA‘æ‚PˆÊ’u‚ɃmƒCƒYŽhŒƒA‘æ‚QˆÊ’u‚ɃVƒOƒiƒ‹ŽhŒƒ‚ª’ñަ‚³‚ꂽ‚±‚Æ‚ð•\‚·B

‘æ‚P’ñަˆÊ’u‚ÌŽhŒƒŠ´Šo‚ðA‘æ‚QŽhŒƒ’ñަˆÊ’u‚ÌŽhŒƒŠ´Šo‚ð‚Å•\‚·B

‘æ‚PŽhŒƒˆÊ’u‚ɑ΂·‚鑿‚QŽhŒƒˆÊ’u‚̃oƒCƒAƒX‚ðb‚Å•\‚·B‚±‚̃oƒCƒAƒX‚ÍPíŒë·‚̂悤‚ÉŠ´Šo‚Ì‚à‚̂Ɣ½‰ž‚Ì‚à‚̗̂¼ŽÒ‚ðŠÜ‚Þ‚à‚̂ł ‚éB

‚±‚̂Ƃ«AˆÈ‰º‚̂悤‚ɂȂéB

 

‚̂Ƃ«A

‚̂Ƃ«A

‚̂Ƃ«A

‚̂Ƃ«A

 

‚¢‚ÜA”»’f‚ªKŒÂ‚̃JƒeƒSƒŠ‚É‚æ‚é•]’è‚ʼnñ“š‚³‚ê‚é‚à‚̂ƂµA”»’f‚̃JƒeƒSƒŠ‹«ŠE‚ðˆÈ‰º‚̂悤‚É‚¨‚­B

 

 

‚±‚̂Ƃ«A

 

 

‚Å‚ ‚ê‚ÎA’ñަŽhŒƒ‘Î<>‚ɑ΂·‚é”»’f‚Í‚ª—^‚¦‚ç‚ê‚邯‚·‚éB‚·‚Ȃ킿A

 

 

‚Å‚ ‚éB

—Ⴆ‚ÎA”»’fƒJƒeƒSƒŠ[”‚ªŒÂ‚̂Ƃ«‚ÍA•]’è”»’f‚͈ȉº‚̂悤‚È‚à‚Ì‚ªl‚¦‚ç‚ê‚éB

 

F@ƒVƒOƒiƒ‹ŽhŒƒ‚ÍŠm‚©‚É‘æ‚PˆÊ’u‚Å‚ ‚éB

F@ƒVƒOƒiƒ‹ŽhŒƒ‚Í‘æ‚PˆÊ’u‚Å‚ ‚éB

F@ƒVƒOƒiƒ‹ŽhŒƒ‚Í‚½‚Ô‚ñ‘æ‚PŽhŒƒ‚Å‚ ‚éB

F@‚í‚©‚ç‚È‚¢^‚Ç‚¿‚ç‚à“¯‚¶‚ÆŽv‚í‚ê‚éB

F@ƒVƒOƒiƒ‹ŽhŒƒ‚Í‚½‚Ô‚ñ‘æ‚QˆÊ’u‚Å‚ ‚éB

F@ƒVƒOƒiƒ‹ŽhŒƒ‚Í‘æ‚QˆÊ’u‚Å‚ ‚éB

F@ƒVƒOƒiƒ‹ŽhŒƒ‚ÍŠm‚©‚É‘æ‚QˆÊ’u‚Å‚ ‚éB

 

•½‹ÏA•ªŽU‚̳‹K•ª•z‚Ì—ÝÏ•ª•z‚ð

 

 

‚Å•\‚µAˆÈ‰º‚̂悤‚ɕ֋X“I‚ÉÝ’è‚·‚éB

 

 

‚±‚̂Ƃ«A·‚Ì•ª•z‚͈ȉº‚̂悤‚É—^‚¦‚ç‚ê‚éB

 

 

ŽhŒƒ‘Î ‚ª’ñަ‚³‚ê‚Æ‚«A

 

 

‚µ‚½‚ª‚Á‚ÄA

 

 

 

ŽhŒƒ‘΂ª’ñަ‚³‚ꂽ‚Æ‚«A

 

 

‚µ‚½‚ª‚Á‚ÄA

 

 

 

ŽhŒƒ‘΂ª’ñަ‚³‚ꂽ‚Æ‚«A

 

 

‚µ‚½‚ª‚Á‚ÄA

 

 

 

‚¢‚ÜAƒJƒeƒSƒŠ‹«ŠE‚ªAŒ´“_‚ð’†S‚Æ‚µ‚Ä‘ÎÌ‚Éݒ肳‚ê‚Ä‚¢‚邯‚·‚éBƒoƒCƒAƒXƒpƒ‰ƒ[ƒ^‚ÌŽg—p‚É‚æ‚èAƒJƒeƒSƒŠ‹«ŠE‚ÍŒ´“_‚ð’†S‚Æ‚µ‚Äݒ肳‚ê‚Ä‚¢‚邯l‚¦‚邱‚Æ‚ª‚Å‚«‚éB

‚µ‚½‚ª‚Á‚ÄAK‚ª‹ô”‚Å‚ ‚ê‚ÎA

 

 

Šï”‚Å‚ ‚ê‚ÎA

 

 

 

ã‹L‚̃‚ƒfƒ‹‚ÌStanƒXƒNƒŠƒvƒg‚ðA‚ª‹ô”‚Ìê‡‚ðƒŠƒXƒg‚P‚ÉA‚ªŠï”‚Ìê‡‚ðƒŠƒXƒg‚Q‚ÉŽ¦‚·BƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ÍAtripfiles.zip‚ɂ܂Ƃ߂½B

‚±‚ê‚ç‚̃XƒNƒŠƒvƒg‚ð—p‚¢‚½•ªÍ—á‚ðŽŸ‚ÉŽ¦‚·B

 

 

•ªÍ—á

 

ƒJƒeƒSƒŠ”‚ª‹ô”‚ÌꇂƊÌꇂɕª‚¯‚ÄŽ¦‚·B

 

 

ƒJƒeƒSƒŠ”‚ª‹ô”‚Ìê‡

 

ƒŠƒXƒg‚P‚ÌStanƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ÆAƒŠƒXƒg‚P‚ðŽg—p‚·‚éPythonƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹iƒŠƒXƒg3jA‚¨‚æ‚Ñ“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹‚𓯂¶ƒtƒHƒ‹ƒ_‚É’u‚­B‚»‚̃tƒHƒ‹ƒ_‚ɃJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ‚ðˆÚ‚µ‚ÄACmdStanPy‚̃Cƒ“ƒXƒg[ƒ‹‚³‚ꂽŠÂ‹«‚ÅAŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚éBCmdStanPy‚̃Cƒ“ƒXƒg[ƒ‹‚ɂ‚¢‚Ä‚ÍA‚±‚̃EƒFƒuƒTƒCƒgA‚ ‚é‚¢‚Í‚±‚̃EƒFƒuƒTƒCƒg‚ȂǂðŽQÆ‚³‚ꂽ‚¢B

 

(stan) ****/evencatfiles$ python AnalTriP2AFCReven.py

 

ã‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚邯A“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹–¼‚ð•·‚¢‚Ä‚­‚éB

 

(stan) ****/evencatfiles$ python AnalTriP2AFCReven.py

Input data file (*.xlsx) = tripeven100.xlsx

 

ã‚Ì—á‚Å‚ÍAƒtƒ@ƒCƒ‹–¼tripeven100.xlsx‚ªÝ’肳‚ê‚Ä‚¢‚éB

}A1‚ÉAƒtƒ@ƒCƒ‹tripeven100.xlsx‚ðExcel‚ÅŠJ‚¢‚½‚à‚Ì‚ðŽ¦‚·B

 

}A1@Excelƒtƒ@ƒCƒ‹tripeven100.xlsx

 

ƒJƒeƒSƒŠ”‚ªK=4‚Ì‹ô”‚Ìꇂ̃f[ƒ^—á‚Å‚ ‚éB

‚Ps–Ú‚ÉA•Ï”–¼‚ª’u‚©‚ê‚Ä‚¢‚éB‚P—ñ–Ú‚ÍA”»’fƒJƒeƒSƒŠ‚ð•\‚µA‚P‚©‚ç‚S‚܂ł̔»’fƒJƒeƒSƒŠ‚ð•\‚·®”’l‚ª¸‡‚É’u‚©‚ê‚Ä‚¢‚éB‚Q—ñ–Ú‚ÍAŽhŒƒ‘΃ƒmƒCƒYŽhŒƒAƒmƒCƒYŽhŒƒ„‚ɑ΂·‚é•p“x‚Å‚ ‚éB‚R—ñ–ڂɃƒmƒCƒYŽhŒƒAƒVƒOƒiƒ‹ŽhŒƒ„‚ɑ΂·‚é•p“xA‚S—ñ–ڂɃƒVƒOƒiƒ‹ŽhŒƒAƒmƒCƒYŽhŒƒ„‚ɑ΂·‚é•p“x‚ªÝ’肳‚ê‚Ä‚¢‚éB”»’fƒJƒeƒSƒŠ”‚ª‚j‚̂Ƃ«‚ÍA}‚`‚P‚Í‚P{‚js‚̃tƒH[ƒ}ƒbƒg‚ɂȂéB

 

“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹–¼‚ðÝ’è‚·‚邯AStanƒXƒNƒŠƒvƒg‚̃rƒ‹ƒh‚ªŽn‚Ü‚éBMCMCƒTƒ“ƒvƒŠƒ“ƒO‚ªI—¹‚·‚邯AƒgƒŒ[ƒX}‚ª•\ަ‚³‚ê‚éi}A2jB

 

}A2

 

‰E‘¤‚ÉŠeƒTƒ“ƒvƒŠƒ“ƒO‚̃gƒŒ[ƒX‚ª•\ަ‚³‚êA¶‘¤‚ɃTƒ“ƒvƒŠƒ“ƒO‚ÌŽ–Œã•ª•z‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}A2‚ÌWindow‚ð•‚¶‚邯A}A3‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A3

 

ƒpƒ‰ƒ[ƒ^‚·‚Ȃ킿‚ÌŽ–Œã•ª•z‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚ÉA‘æ1Žl•ªˆÊ”A’†‰›’li‘æ‚QŽl•ªˆÊ”jA‘æ‚RŽl•ªˆÊ”‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}A3‚ÌWindow‚ð•‚¶‚邯A}A4‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A4

 

ƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•W€•η‚ÌŽ–Œã•ª•z‚̃Oƒ‰ƒt‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚ÉA‘æ‚PŽl•ªˆÊ”A’†‰›’li‘æ‚QŽl•ªˆÊ”jA‘æ‚RŽl•ªˆÊ”‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}A4‚ÌWindow‚ð•‚¶‚邯A}A5‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A5

 

”»’f‚̃JƒeƒSƒŠ‹«ŠE’l‚ÌŽ–Œã•ª•z‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚É‚ÍA‚»‚ꂼ‚ê‚Ì’†‰›’l‚ª•\ަ‚³‚ê‚Ä‚¢‚éBƒJƒeƒSƒŠ”‚ª‚S‚Ìê‡AƒJƒeƒSƒŠ‹«ŠE‚ÍC1AC2AC3‚Ì‚R“_‚Å‚ ‚邪A§–ñi‚Uj‚É‚æ‚èA‚Ȃ̂Œ蔂ł ‚éBC2‚ª’蔂O‚Å‚ ‚邱‚Æ‚ðA}A5‚Å‚ÍÔF‚Ì”¼‰~‚ÅŽ¦‚µ‚Ä‚¢‚éB

}A5‚ÌWindow‚ð•‚¶‚邯A}A6‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A6

 

ƒoƒCƒAƒXƒpƒ‰ƒ[ƒ^‚ÌŽ–Œã•ª•z‚Å‚ ‚éB‘æ‚PŽl•ªˆÊ”‚Æ‘æ‚RŽl•ªˆÊ”‚ÌŠÔ‚É‚O‚ª‚ ‚é‚Ì‚ÅAƒoƒCƒAƒX‚Å‚ ‚邯l‚¦‚Ă悢‚ÆŽv‚í‚ê‚éB

}A6‚ÌWindow‚ð•‚¶‚邯A}A7‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A7

 

’ñަŽhŒƒ‘Εʂ̔»’fƒJƒeƒSƒŠ[‚̔䗦ƒf[ƒ^‚ƃ‚ƒfƒ‹‚É‚æ‚é—\‘ªŠm—¦‚̃Oƒ‰ƒt‚Å‚ ‚éB—\‘ªŠm—¦‚ÍAMCMCƒTƒ“ƒvƒŠƒ“ƒO‚É‚æ‚鎖Œã•ª•z‚Ì’†‰›’l‚Å‚ ‚éBƒf[ƒ^‚Ì•û‚̓‰ƒ“ƒ_ƒ€‚ȕϓ®‚ªŒ©‚ç‚ê‚邪Aƒ‚ƒfƒ‹‚É‚æ‚é—\‘ª’l‚ÍAŽ–Œã•ª•z‚Ì’†‰›’l‚ðÌ—p‚µ‚Ä‚¢‚é‚̂ŃTƒ“ƒvƒŠƒ“ƒO‚ɑ΂µ‚ĈÀ’肵‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB}A7‚̃Oƒ‰ƒt‚©‚çAƒf[ƒ^‚ɑ΂µ‚ă‚ƒfƒ‹‚Í“K‡‚µ‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB

}A‚V‚ÌWindow‚ð•‚¶‚邯A}A8‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}A‚W

 

ŽhŒƒ‘΂²‚Ƃ̃JƒeƒSƒŠ—Ýϔ䗦‚ðAƒ‚ƒfƒ‹—\‘ª’l‚ɑ΂µ‚ăf[ƒ^‚Ì’l‚̃Oƒ‰ƒt‚ð•`‚¢‚½‚à‚̂ł ‚éB”jü‚ÍAƒ‚ƒfƒ‹—\‘ª’l‚ªƒf[ƒ^‚ƈê’v‚·‚éꇂ̃Oƒ‰ƒt‚Å‚ ‚éBƒ‚ƒfƒ‹—\‘ª’l‚ÍAŽ–Œã•ª•z‚Ì’†‰›’l‚ðƒpƒ‰ƒ[ƒ^’l‚Æ‚µ‚Ä‹‚ß‚ç‚ê‚Ä‚¢‚éBƒ‚ƒfƒ‹—\‘ª’l‚̃Oƒ‰ƒt‚Í”jü‚ɂ悭‡‚Á‚Ä‚¢‚é‚Ì‚ÅAƒ‚ƒfƒ‹‚̓f[ƒ^‚É“K‡‚µ‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB

 

}A‚W‚ÌWindow‚ð•‚¶‚邯AƒXƒNƒŠƒvƒg‚ÌŽÀsI—¹‚Å‚ ‚éB’[––‚ÉMCMCƒTƒ“ƒvƒ‹‚Ì“Œv—ʂȂǂª•\ަ‚³‚ê‚Ä‚¢‚邪AuNANv‚Ȃǂ̒l‚̓pƒ‰ƒ[ƒ^‚ɒ蔂ªÝ’肳‚ê‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚邱‚Ƃɂæ‚éB

 

 

 

ƒJƒeƒSƒŠ”‚ªŠï”‚Ìê‡

 

ƒŠƒXƒg‚Q‚ÌStanƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ÆAƒŠƒXƒg‚Q‚ðŽg—p‚·‚éPythonƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹iƒŠƒXƒg‚SjA‚¨‚æ‚Ñ“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹‚𓯂¶ƒtƒHƒ‹ƒ_‚É’u‚­B‚»‚̃tƒHƒ‹ƒ_‚ɃJƒŒƒ“ƒgƒfƒBƒŒƒNƒgƒŠ‚ðˆÚ‚µ‚ÄACmdStanPy‚̃Cƒ“ƒXƒg[ƒ‹‚³‚ꂽŠÂ‹«‚ÅAŽŸ‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚éBCmdStanPy‚̃Cƒ“ƒXƒg[ƒ‹‚ɂ‚¢‚Ä‚ÍA‚±‚̃EƒFƒuƒTƒCƒgA‚ ‚é‚¢‚Í‚±‚̃EƒFƒuƒTƒCƒg‚ȂǂðŽQÆ‚³‚ꂽ‚¢B

 

(stan) ****/oddcatfiles$ python AnalTriP2AFCRodd.py

 

ã‚̃Rƒ}ƒ“ƒh‚ðŽÀs‚·‚邯A“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹–¼‚ð•·‚¢‚Ä‚­‚éB

 

(stan) ****/oddcatfiles$ python AnalTriP2AFCRodd.py

Input data file (*.xlsx) = tripodd100.xlsx

 

ã‚Ì—á‚Å‚ÍAƒtƒ@ƒCƒ‹–¼tripodd100.xlsx‚ªÝ’肳‚ê‚Ä‚¢‚éB

}B1‚ÉAƒtƒ@ƒCƒ‹tripodd100.xlsx‚ðExcel‚ÅŠJ‚¢‚½‚à‚Ì‚ðŽ¦‚·B

 

}B1@Excelƒtƒ@ƒCƒ‹tripodd100.xlsx

 

ƒJƒeƒSƒŠ”‚ªK=5‚̊Ìꇂ̃f[ƒ^—á‚Å‚ ‚éB

‚Ps–Ú‚ÉA•Ï”–¼‚ª’u‚©‚ê‚Ä‚¢‚éB‚P—ñ–Ú‚ÍA”»’fƒJƒeƒSƒŠ‚ð•\‚µA‚P‚©‚ç‚T‚܂ł̔»’fƒJƒeƒSƒŠ‚ð•\‚·®”’l‚ª¸‡‚É’u‚©‚ê‚Ä‚¢‚éB‚Q—ñ–Ú‚ÍAŽhŒƒ‘΃ƒmƒCƒYŽhŒƒAƒmƒCƒYŽhŒƒ„‚ɑ΂·‚é•p“x‚Å‚ ‚éB‚R—ñ–ڂɃƒmƒCƒYŽhŒƒAƒVƒOƒiƒ‹ŽhŒƒ„‚ɑ΂·‚é•p“xA‚S—ñ–ڂɃƒVƒOƒiƒ‹ŽhŒƒAƒmƒCƒYŽhŒƒ„‚ɑ΂·‚é•p“x‚ªÝ’肳‚ê‚Ä‚¢‚éB”»’fƒJƒeƒSƒŠ”‚ª‚j‚̂Ƃ«‚ÍA}B‚P‚Í‚P{‚js‚̃tƒH[ƒ}ƒbƒg‚ɂȂéB

 

“ü—̓f[ƒ^ƒtƒ@ƒCƒ‹–¼‚ðÝ’è‚·‚邯AStanƒXƒNƒŠƒvƒg‚̃rƒ‹ƒh‚ªŽn‚Ü‚éBMCMCƒTƒ“ƒvƒŠƒ“ƒO‚ªI—¹‚·‚邯AƒgƒŒ[ƒX}‚ª•\ަ‚³‚ê‚éi}B2jB

 

}B2

 

‰E‘¤‚ÉŠeƒTƒ“ƒvƒŠƒ“ƒO‚̃gƒŒ[ƒX‚ª•\ަ‚³‚êA¶‘¤‚ɃTƒ“ƒvƒŠƒ“ƒO‚ÌŽ–Œã•ª•z‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}B2‚ÌWindow‚ð•‚¶‚邯A}B3‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B3

 

ƒpƒ‰ƒ[ƒ^‚·‚Ȃ킿‚ÌŽ–Œã•ª•z‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚ÉA‘æ1Žl•ªˆÊ”A’†‰›’li‘æ‚QŽl•ªˆÊ”jA‘æ‚RŽl•ªˆÊ”‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}B3‚ÌWindow‚ð•‚¶‚邯A}B4‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B4

 

ƒVƒOƒiƒ‹ŽhŒƒŠ´Šo‚Ì•W€•η‚ÌŽ–Œã•ª•z‚̃Oƒ‰ƒt‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚ÉA‘æ‚PŽl•ªˆÊ”A’†‰›’li‘æ‚QŽl•ªˆÊ”jA‘æ‚RŽl•ªˆÊ”‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}B4‚ÌWindow‚ð•‚¶‚邯A}B5‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B5

 

”»’f‚̃JƒeƒSƒŠ‹«ŠE’l‚ÌŽ–Œã•ª•z‚Å‚ ‚éBƒ^ƒCƒgƒ‹—“‚É‚ÍA‚»‚ꂼ‚ê‚Ì’†‰›’l‚ª•\ަ‚³‚ê‚Ä‚¢‚éB

}B5‚ÌWindow‚ð•‚¶‚邯A}B6‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B6

 

ƒoƒCƒAƒXƒpƒ‰ƒ[ƒ^‚ÌŽ–Œã•ª•z‚Å‚ ‚éB‘æ‚PŽl•ªˆÊ”‚Æ‘æ‚RŽl•ªˆÊ”‚ÌŠÔ‚Ì‹æŠÔ‚̉E’[‚É‚O‚ª‚ ‚éB•‰‚̃oƒCƒAƒX‚ªŽ¦´‚³‚ê‚Ä‚¢‚éB

 

}B6‚ÌWindow‚ð•‚¶‚邯A}B7‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B7

 

’ñަŽhŒƒ‘Εʂ̔»’fƒJƒeƒSƒŠ[‚̔䗦ƒf[ƒ^‚ƃ‚ƒfƒ‹‚É‚æ‚é—\‘ªŠm—¦‚̃Oƒ‰ƒt‚Å‚ ‚éB—\‘ªŠm—¦‚ÍAMCMCƒTƒ“ƒvƒŠƒ“ƒO‚É‚æ‚鎖Œã•ª•z‚Ì’†‰›’l‚Å‚ ‚éBƒf[ƒ^‚Ì•û‚̓‰ƒ“ƒ_ƒ€‚ȕϓ®‚ªŒ©‚ç‚ê‚邪Aƒ‚ƒfƒ‹‚É‚æ‚é—\‘ª’l‚ÍAŽ–Œã•ª•z‚Ì’†‰›’l‚ðÌ—p‚µ‚Ä‚¢‚é‚̂ŃTƒ“ƒvƒŠƒ“ƒO‚ɑ΂µ‚ĈÀ’肵‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB}B7‚̃Oƒ‰ƒt‚©‚çAƒf[ƒ^‚ɑ΂µ‚ă‚ƒfƒ‹‚Í“K‡‚µ‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB

}B‚V‚ÌWindow‚ð•‚¶‚邯A}B8‚̃Oƒ‰ƒt‚ª•\ަ‚³‚ê‚éB

 

}B‚W

 

ŽhŒƒ‘΂²‚Ƃ̃JƒeƒSƒŠ—Ýϔ䗦‚ðAƒ‚ƒfƒ‹—\‘ª’l‚ɑ΂µ‚ăf[ƒ^‚Ì’l‚̃Oƒ‰ƒt‚ð•`‚¢‚½‚à‚̂ł ‚éB”jü‚ÍAƒ‚ƒfƒ‹—\‘ª’l‚ªƒf[ƒ^‚ƈê’v‚·‚éꇂ̃Oƒ‰ƒt‚Å‚ ‚éBƒ‚ƒfƒ‹—\‘ª’l‚ÍAŽ–Œã•ª•z‚Ì’†‰›’l‚ðƒpƒ‰ƒ[ƒ^’l‚Æ‚µ‚Ä‹‚ß‚ç‚ê‚Ä‚¢‚éBƒ‚ƒfƒ‹—\‘ª’l‚̃Oƒ‰ƒt‚Í”jü‚ɂ悭‡‚Á‚Ä‚¢‚é‚Ì‚ÅAƒ‚ƒfƒ‹‚̓f[ƒ^‚É“K‡‚µ‚Ä‚¢‚邯l‚¦‚ç‚ê‚éB

 

}B‚W‚ÌWindow‚ð•‚¶‚邯AƒXƒNƒŠƒvƒg‚ÌŽÀsI—¹‚Å‚ ‚éB’[––‚ÉMCMCƒTƒ“ƒvƒ‹‚Ì“Œv—ʂȂǂª•\ަ‚³‚ê‚Ä‚¢‚邪AuNANv‚Ȃǂ̒l‚̓pƒ‰ƒ[ƒ^‚ɒ蔂ªÝ’肳‚ê‚Ä‚¢‚é‚à‚Ì‚ª‚ ‚邱‚Ƃɂæ‚éB

 

 

 

ŽQl•¶Œ£

 

Brady, T. F., Robinson, M. M., Williams, J. R., & Wixted, J. T. (2023). Measuring memory is harder than you think: How to avoid problematic measurement practices in memory research. Psychonomic Bulletin & Review, 30, 421-449.

DeCarlo, L. T. (2010). On the statistical and theoretical basis of signal detection theory and extensions: Unequal variance, random coefficients, and mixture models. Journal of Mathematical Psychology, 54, 304-313.

Green, D. M. & Swets, J. A. (1988). Signal detection theory and psychophysics. Peninsula Publishing.

Hautus, M. J., Macmillan, N. A., & Creelman, C. D. (2022) Detection theory: A userfs guide. Rootledge.

‰ª–{ˆÀ°i2019j‚¢‚Ü‚³‚ç•·‚¯‚È‚¢Python‚Ńf[ƒ^•ªÍDŠÛ‘Po”Å

Okamoto, Y. (2023). Extended 2AFC Rating Task. https://doi.org/10.17605/OSF.IO/TS2EQ

‰ª–{ˆÀ°i2025jŠ´ŠoE’mŠo‘ª’è–@D˜aŸ†“T“ñEd–ìƒE‘ºãˆè–çi•ÒjŠ´ŠoE’mŠoS—Šwƒnƒ“ƒhƒuƒbƒN ‘æŽO”Åi‘æ2ÍjA½M‘–[

Wickens, T. D. (2002). Elementary Signal Detection Theory. Oxford University Press.

Wixted, J. T. (2019). The forgotten history of signal detection theory. Journal of Experimental Psychology: Learning, Memory, & Cognition, 46, 201-233.

 

 

 

•‹L

 

 

ƒŠƒXƒg‚P@ƒJƒeƒSƒŠ”‚ª‹ô”‚Ìê‡itrip2AFC_KCat_even.stanj

 

//

//           Yasuharu Okamoto, 2026

//

functions {

    real my_phi(real x) {

        if (x <= -37.5) {

            return 0.0;

        }

        else if (x >= 8.25) {

            return 1.0;

        }

        else {

            return std_normal_cdf(x);

        }

    }

}

data {

    int K;

    array[K] int nn_cond;

    array[K] int ns_cond;

    array[K] int sn_cond;

}

transformed data {

    int hK;

    vector[K%/%2] alpha;

    hK = K %/% 2;

    for (i in 1:hK) {

        alpha[i] = 1.0;

    }

}

parameters {

    real<lower=-10, upper=10> mu_s;

    real<lower = 0.01, upper=10.0> sgm_s;

    real b;

    simplex[hK] preC;

}

transformed parameters {

    simplex[K] nn_theta;

    simplex[K] ns_theta;

    simplex[K] sn_theta;

    vector[K+1] nn_cum_p;

    vector[K+1] ns_cum_p;

    vector[K+1] sn_cum_p;

    vector[K-1] C;

    real vsum;

    real sgm_nn;

    real sgm_ns;

 

    C[hK] = 0.0;

    vsum = 0.0;

    for (i in 1:hK-1) {

        vsum += preC[i];

        C[hK+i] = vsum / (1.0 - vsum);

        C[hK-i] = -C[hK+i];

    }

 

    sgm_nn = sqrt(1.0 + 1.0);

    sgm_ns = sqrt(1.0 + square(sgm_s));

 

    nn_cum_p[1] = 0.0;

    ns_cum_p[1] = 0.0;

    sn_cum_p[1] = 0.0;

    nn_cum_p[K+1] = 1.0;

    ns_cum_p[K+1] = 1.0;

    sn_cum_p[K+1] = 1.0;

   

    for (i in 2:K) {

        nn_cum_p[i] = my_phi((C[i-1] - b) / sgm_nn); 

        ns_cum_p[i] = my_phi((C[i-1] - (mu_s + b)) / sgm_ns);

        sn_cum_p[i] = my_phi((C[i-1] - (-mu_s + b)) / sgm_ns);

    }

 

    for (i in 1:K) {

        nn_theta[i] = nn_cum_p[i+1] - nn_cum_p[i];

        ns_theta[i] = ns_cum_p[i+1] - ns_cum_p[i];

        sn_theta[i] = sn_cum_p[i+1] - sn_cum_p[i];

    }

}

model {

    mu_s ~ uniform(-10, 10); 

    sgm_s ~ uniform(0.01, 10.0); 

    preC ~ dirichlet(alpha);

    b ~ normal(0.0, 1000.0);

    nn_cond ~ multinomial(nn_theta);

    ns_cond ~ multinomial(ns_theta);

    sn_cond ~ multinomial(sn_theta);

}

 

 

 

ƒŠƒXƒg‚Q@ƒJƒeƒSƒŠ”‚ªŠï”‚Ìê‡itrip2AFC_KCat_odd.stanj

 

//

//           Yasuharu Okamoto, 2026

//

functions {

    real my_phi(real x) {

        if (x <= -37.5) {

            return 0.0;

        }

        else if (x >= 8.25) {

            return 1.0;

        }

        else {

            return std_normal_cdf(x);

        }

    }

}

data {

    int K;

    array[K] int nn_cond;

    array[K] int ns_cond;

    array[K] int sn_cond;

}

transformed data {

    int hK;

    vector[(K%/%2)+1] alpha;

    hK = K %/% 2;

    for (i in 1:hK+1) {

        alpha[i] = 1.0;

    }

}

parameters {

    real<lower=-10, upper=10> mu_s;

    real<lower = 0.01, upper=10.0> sgm_s;

    real b;

    simplex[hK+1] preC;

}

transformed parameters {

    simplex[K] nn_theta;

    simplex[K] ns_theta;

    simplex[K] sn_theta;

    vector[K+1] nn_cum_p;

    vector[K+1] ns_cum_p;

    vector[K+1] sn_cum_p;

    vector[K-1] C;

    real vsum;

    real sgm_nn;

    real sgm_ns;

 

    vsum = 0.0;

    for (i in 1:hK) {

        vsum += preC[i];

        C[hK+i] = vsum / (1.0 - vsum);

        C[hK+1-i] = -C[hK+i];

    }

 

    sgm_nn = sqrt(1.0 + 1.0);

    sgm_ns = sqrt(1.0 + square(sgm_s));

 

    nn_cum_p[1] = 0.0;

    ns_cum_p[1] = 0.0;

    sn_cum_p[1] = 0.0;

    nn_cum_p[K+1] = 1.0;

    ns_cum_p[K+1] = 1.0;

    sn_cum_p[K+1] = 1.0;

   

    for (i in 2:K) {

        nn_cum_p[i] = my_phi((C[i-1] - b) / sgm_nn); 

        ns_cum_p[i] = my_phi((C[i-1] - (mu_s + b)) / sgm_ns);

        sn_cum_p[i] = my_phi((C[i-1] - (-mu_s + b)) / sgm_ns);  

    }

 

    for (i in 1:K) {

        nn_theta[i] = nn_cum_p[i+1] - nn_cum_p[i];

        ns_theta[i] = ns_cum_p[i+1] - ns_cum_p[i];

        sn_theta[i] = sn_cum_p[i+1] - sn_cum_p[i];

    }

}

model {

    mu_s ~ uniform(-10, 10); 

    sgm_s ~ uniform(0.01, 10.0); 

    preC ~ dirichlet(alpha);

    b ~ normal(0.0, 1000.0);

    nn_cond ~ multinomial(nn_theta);

    ns_cond ~ multinomial(ns_theta);

    sn_cond ~ multinomial(sn_theta);

}

 

 

 

ƒŠƒXƒg‚R@ƒŠƒXƒg‚P‚ÌStanƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ð—˜—p‚·‚éPythonƒXƒNƒŠƒvƒgiAnalTriP2AFCReven.pyj

 

from cmdstanpy import CmdStanModel

import pandas as pd

import numpy as np

import scipy.stats as ss

import matplotlib.pyplot as plt

import seaborn as sb

import arviz as az

 

inflnm = input('Input data file (*.xlsx) = ')

 

outflnm = 'Results.txt'  # input('Output file (*.txt) = ') 

fout = open(outflnm, 'w')

 

df_raw = pd.read_excel(inflnm)

print(df_raw)

data = np.array(df_raw.values)

print(data)

K = len(data)

print('K =', K)

n_n = data.T[1]

n_s = data.T[2]

s_n = data.T[3]

 

if K % 2 == 1:

    print('K should be even.')

    import sys

    sys.exit()

 

print('n_n =', n_n)

print('n_s =', n_s)

print('s_n =', s_n)

 

model = CmdStanModel(stan_file = 'trip2AFC_KCat_even.stan')

 

Data = {'K':K, 'nn_cond':n_n, 'ns_cond':n_s, 'sn_cond':s_n}

fit = model.sample(data=Data)  

 

print(fit.summary())

fout.write(f'\n{fit.summary()}\n')

 

inf_data = az.from_cmdstanpy(fit)           #   Arviz(az) InferenceData

#   ƒgƒŒ[ƒXƒvƒƒbƒg

az.plot_trace(inf_data, var_names=['mu_s','sgm_s','C'])

plt.tight_layout()

plt.show()

 

 

fit = fit.draws_pd()     #  Pandas DataFrame

 

q1, mu_s_med, q3 = np.percentile(fit['mu_s'], [25, 50, 75])

sb.kdeplot(fit['mu_s'])

plt.xlabel(r'$\mu_s$', fontsize=16)

plt.title(r'Posterior Distribution of $\mu_s$' +

          f'\nq1={q1:.3f},  Med.={mu_s_med:.3f},  q3={q3:.3f}',

           fontsize=16)

plt.show()

 

q1, sgm_s_med, q3 = np.percentile(fit['sgm_s'], [25, 50, 75])

sb.kdeplot(fit['sgm_s'])

plt.title(r'Posterior Distribution of $\sigma_s$' +

          f'\nq1={q1:.3f},  Med.={sgm_s_med:.3f},  q3={q3:.3f}',

          fontsize=16)

plt.xlabel(r'$\sigma_s$', fontsize=16)

plt.show()

 

C = []

for k in range(K-1):

    C.append(fit[f'C[{k+1}]'])

C = np.array(C).T

 

s_title = ''

for k in range(K-1):

    if k != (K//2) - 1:

        sb.kdeplot(C.T[k]) 

        c_med = np.median(C.T[k])

        s_title += f'C{k+1}={c_med:.2f}'

        if k < K-2:

            s_title += ', '

    else:

        plt.plot([0], [0], marker = 'o', markersize = 15, c = 'r')

        s_title += f'C{k+1}=0, '

           

plt.title('Med. estimates\n' + s_title, fontsize=16)

plt.show()

 

q1, b_med, q3 = np.percentile(fit['b'], [25, 50, 75])

sb.kdeplot(fit['b'])

plt.xlabel('b', fontsize=16)

plt.title('Posterior Distribution of b' +

          f'\nq1={q1:.3f},  Med.={b_med:.3f},  q3={q3:.3f}',

          fontsize=16)

plt.show()

 

cum_n_n = np.cumsum(n_n)

pcum_n_n = cum_n_n/cum_n_n[-1]

cum_n_s = np.cumsum(n_s)

pcum_n_s = cum_n_s / cum_n_s[-1]

cum_s_n = np.cumsum(s_n)

pcum_s_n = cum_s_n / cum_s_n[-1]

 

fit_nn_cum_p = []

fit_ns_cum_p = []

fit_sn_cum_p = []

for k in range(K+1):

    fit_nn_cum_p.append(fit[f'nn_cum_p[{k+1}]'])

    fit_ns_cum_p.append(fit[f'ns_cum_p[{k+1}]'])

    fit_sn_cum_p.append(fit[f'sn_cum_p[{k+1}]'])

fit_nn_cum_p = np.array(fit_nn_cum_p).T

fit_ns_cum_p = np.array(fit_ns_cum_p).T

fit_sn_cum_p = np.array(fit_sn_cum_p).T

                       

est_pcum_n_n = np.median(fit_nn_cum_p, axis = 0)[1:-1]

est_pcum_n_s = np.median(fit_ns_cum_p, axis = 0)[1:-1]

est_pcum_s_n = np.median(fit_sn_cum_p, axis = 0)[1:-1]

 

plt.plot(est_pcum_n_n, pcum_n_n[:-1], label = 'n_n')

plt.plot(est_pcum_n_s, pcum_n_s[:-1], label = 'n_s')

plt.plot(est_pcum_s_n, pcum_s_n[:-1], label = 's_n')

plt.plot([0,1], [0,1], c = 'k', ls = '--', label = 'Obs.=Est.')

plt.xlabel('Est.Cum.P', fontsize=16)

plt.ylabel('Obs.Cum.P', fontsize=16)

plt.legend()

plt.title('Cumulative Proportions', fontsize=18)

plt.show()

 

fout.close()

print('\n', outflnm, 'was saved.\n')

 

 

 

 

ƒŠƒXƒg‚S@ƒŠƒXƒg‚Q‚ÌStanƒXƒNƒŠƒvƒgƒtƒ@ƒCƒ‹‚ð—˜—p‚·‚éPythonƒXƒNƒŠƒvƒgiAnalTriP2AFCRodd.pyj

 

from cmdstanpy import CmdStanModel

import pandas as pd

import numpy as np

import scipy.stats as ss

import matplotlib.pyplot as plt

import seaborn as sb

import arviz as az

 

inflnm = input('Input data file (*.xlsx) = ')

 

outflnm = 'Results.txt'  # input('Output file (*.txt) = ') 

fout = open(outflnm, 'w')

 

df_raw = pd.read_excel(inflnm)

print(df_raw)

data = np.array(df_raw.values)

print(data)

K = len(data)

print('K =', K)

n_n = data.T[1]

n_s = data.T[2]

s_n = data.T[3]

 

if K % 2 == 0:

    print('K should be odd.')

    import sys

    sys.exit()

 

print('n_n =', n_n)

print('n_s =', n_s)

print('s_n =', s_n)

 

model = CmdStanModel(stan_file = 'trip2AFC_KCat_odd.stan')

 

Data = {'K':K, 'nn_cond':n_n, 'ns_cond':n_s, 'sn_cond':s_n} 

fit = model.sample(data=Data)  

 

print(fit.summary())

fout.write(f'\n{fit.summary()}\n')

 

inf_data = az.from_cmdstanpy(fit)           #   Arviz(az) InferenceData

#   ƒgƒŒ[ƒXƒvƒƒbƒg

az.plot_trace(inf_data, var_names=['mu_s','sgm_s','C'])

plt.tight_layout()

plt.show()

 

fit = fit.draws_pd()                        #   Pandas DataFrame

 

q1, mu_s_med, q3 = np.percentile(fit['mu_s'], [25, 50, 75])

sb.kdeplot(fit['mu_s'])

plt.xlabel(r'$\mu_s$')

plt.title(r'Posterior Distribution of $\mu_s$' +

          f'\nq1={q1:.3f},  Med.={mu_s_med:.3f},  q3={q3:.3f}',

           fontsize=16)

plt.show()

 

q1, sgm_s_med, q3 = np.percentile(fit['sgm_s'], [25, 50, 75])

sb.kdeplot(fit['sgm_s'])

plt.title(r'Posterior Distribution of $\sigma_s$' +

          f'\nq1={q1:.3f},  Med.={sgm_s_med:.3f},  q3={q3:.3f}',

          fontsize=16)

plt.xlabel(r'$\sigma_s$')

plt.show()

 

C = []

for k in range(K-1):

    C.append(fit[f'C[{k+1}]'])

C = np.array(C).T

 

s_title = ''

for k in range(K-1):

    sb.kdeplot(C.T[k]) 

    c_med = np.median(C.T[k])

    s_title += f'C{k+1}={c_med:.2f}'

    if k < K-2:

        s_title += ', '

           

plt.title('Med. estimates\n' + s_title)

plt.show()

 

q1, b_med, q3 = np.percentile(fit['b'], [25, 50, 75])

sb.kdeplot(fit['b'])

plt.title('Posterior Distribution of b' +

          f'\nq1={q1:.3f},  Med.={b_med:.3f},  q3={q3:.3f}',

          fontsize=16)

plt.show()

 

cum_n_n = np.cumsum(n_n)

pcum_n_n = cum_n_n/cum_n_n[-1]

cum_n_s = np.cumsum(n_s)

pcum_n_s = cum_n_s / cum_n_s[-1]

cum_s_n = np.cumsum(s_n)

pcum_s_n = cum_s_n / cum_s_n[-1]

 

fit_nn_cum_p = []

fit_ns_cum_p = []

fit_sn_cum_p = []

for k in range(K+1):

    fit_nn_cum_p.append(fit[f'nn_cum_p[{k+1}]'])

    fit_ns_cum_p.append(fit[f'ns_cum_p[{k+1}]'])

    fit_sn_cum_p.append(fit[f'sn_cum_p[{k+1}]'])

fit_nn_cum_p = np.array(fit_nn_cum_p).T

fit_ns_cum_p = np.array(fit_ns_cum_p).T

fit_sn_cum_p = np.array(fit_sn_cum_p).T

                       

est_pcum_n_n = np.median(fit_nn_cum_p, axis = 0)[1:-1]

est_pcum_n_s = np.median(fit_ns_cum_p, axis = 0)[1:-1]

est_pcum_s_n = np.median(fit_sn_cum_p, axis = 0)[1:-1]

 

plt.plot(est_pcum_n_n, pcum_n_n[:-1], label = 'n_n')

plt.plot(est_pcum_n_s, pcum_n_s[:-1], label = 'n_s')

plt.plot(est_pcum_s_n, pcum_s_n[:-1], label = 's_n')

plt.plot([0,1], [0,1], c = 'k', ls = '--', label = 'Obs.=Est.')

plt.xlabel('Est.Cum.P')

plt.ylabel('Obs.Cum.P')

plt.legend()

plt.title('Cumulative Proportions')

plt.show()

 

fout.close()

print('\n', outflnm, 'was saved.\n')

 

 

 

 

Home