�x�C�Y�}�b�N�X�ւ悤�����B
���v�Ɋւ��邠��₱�������R�C�܂܂ɓ��e���܂��B
�S�L���ꗗ������������B

2019�N01��01��

���m�̊m�����ʊ֐�����MAP����l�ƍō����x��� (HDI) ���v�Z���邽�߂�R�̎���֐�

�@�����܂��Ă��߂łƂ��������܂��Bmutopsy�ł��B�N���Ƀm���E�C���X�炵�����̂Ɋ������Ă��܂��܂������Ԃ����C��2019�N���}���邱�Ƃ��ł��܂����B���N��������낵�����肢�������܂��B�V�N���X�ł͂���܂����C�K�v�ɋ����R�̎���֐���������̂ŋ��L���܂��B

�@���ɕ������Ă���m�����ʊ֐����g����MAP (�ő厖��m��) ����l��HDI (highest density interval; �ō����x���) �����߂�֐��ł��B�����l�Ƃ��ė��U�lk��Ԃ����m�̊m�����ʊ֐� (e.g., �񍀕��z) �Ŏ��㕪�z���\���ł���ꍇ�ɁC���̂悤�Ȏ��㕪�z��MAP��HDI���v�Z����̂Ɏg���܂��B���Ȃ݂ɘA���l��Ԃ��m�����x�֐��̏ꍇ�ł��C���U������΂��̊֐����g���ċߎ��I��MAP����l��HDI�����߂邱�Ƃ��ł���͂��ł��B

�@2019�N1��2���NjL�FMAP�ƂȂ�l��HDI�͈̔͂�2�ˆȏ゠��ꍇ (�Ⴆ��2�����z�Ȃ�) �ɂ��Ή��ł���悤�Ɋ֐����C�����܂����B���ʂ̏o�͂̎d�������C���B

R�R�[�h01: ���m�̊m�����ʊ֐�����MAP����l��HDI���v�Z����֐�
hdimass <- function(prob.k,start.k=0,credMass=0.95){
  #�x�����b�Z�[�W
  if(sum(prob.k)>1) print("�x���F�m���̘a��1���z���Ă��܂��B")
  if(credMass<0|credMass>1) print("�x���FcredMass�̒l������������܂���B")
  
  #HDI�̌v�Z�̉�����
  credMass1m <- 1 - credMass
  accum<-1:length(prob.k)
  for(k in 1:length(prob.k)){
    if(k ==1){
      accum[k] <- sort(prob.k)[k]
    }else{
      accum[k] <- accum[k-1] + sort(prob.k)[k]
    }
  }
  Interval <- grep(TRUE,prob.k>max(sort(prob.k)[accum<=(min(abs(accum-credMass1m))+credMass1m)]))
  
  #HDI����������ꍇ��HDI�����݂��Ȃ��ꍇ (�S�͈͂�HDI) ���l��
  if (length(Interval) <= 1){
    Check <- 0
    Interval <- 1:length(prob.k)
  } else{
    Check <- Interval[2:length(Interval)]-Interval[1:(length(Interval)-1)]-1
  }
  if(sum(Check)==0){
    Lower <- min(Interval) + (start.k-1)
    Upper <- max(Interval) + (start.k-1)
  } else{
    Lower <- c(min(Interval),Interval[grep(TRUE,Check!=0)+1]) + (start.k-1)
    Upper <- c(Interval[grep(TRUE,Check!=0)],max(Interval)) + (start.k-1)
  }
  
  #���ۂɂ��͈̔͂̒l�ƂȂ�m��
  ActualProb <- sum(prob.k[Interval])
  
  #MAP�̌v�Z
  MAP <- grep(TRUE,prob.k == max(prob.k)) + (start.k-1)
  
  #���ʂ����X�g�ɂ܂Ƃ߂ĕԂ�
  Result <- list(MAP=MAP,Lower=Lower,Upper=Upper,ActualProb=ActualProb)
  return(Result)
}

�@��1���� (prob.k) �Ƃ��Ă��ꂼ���k����������m���̃x�N�g�����C��2���� (start.k) �Ƃ���k�̍ŏ��l (�f�t�H���g��start.k=0) ��^���邱�ƂŁCMAP��95% HDI�̏���E�������i�[�������X�g���Ԃ�l�Ƃ��ē����܂��B�܂��C���ۂ�HDI�͈͓̔��̒l���Ƃ�m�����Ԃ��Ă���܂� (���U���z�Ȃ̂�95% HDI�ł����Ă������ɂ�95%�ɂ͂Ȃ�܂��񂪁C95%�ɍł��߂��l�ɂȂ�͂��ł�)�B��1���� (prob.k) �ɂ͌����I�Ȓ����̃x�N�g����^����Ώ\���ł��B�Ⴆ�� N = 20�C�� = 0.5 �̓񍀕��z�ł���΁C������20������Α��a���ق�1�ɂȂ�̂Ōv�Z��͖�肠��܂��� (�ȉ��̗�ł͈�т��Ē���500�̃x�N�g����^���Ă��܂��������Ə��Ȃ��Ă����ʂ͕ς��܂���)�B���Ȃ݂ɑ�3�����ł���creadMass��(0,1)�͈̔͂̒l��^����� (�Ⴆ��credMass = 0.99)�C�قȂ�m�x��HDI���o�͂��邱�Ƃ��ł��܂� (99% HDI�Ȃ�)�B

�@�v�Z�̒��g���ȒP�ɐ������܂��B�܂��ŏ���for���Ŋm������ (prob.k)�������Ƀ\�[�g���C���Ԃɗݐϊm�����v�Z���Ă��܂��B���ɁC�ݐϊm����臒l (95% HDI�Ȃ�5%)�ɍł��߂��_��T���C�e�X��k��HDI�Ɋ܂܂�邩�ۂ���_���l�x�N�g���ŕ\�����܂��B���̘_���l�x�N�g�����g���āC(credMass)% HDI�Ɋ܂܂��k�̒l�𒊏o���CInterval�Ƃ��������̕ϐ��Ɋi�[���Ă��܂��BHDI��1�‚����Ȃ��ꍇ�́CInterval�̍ŏ��l�ƍő�l����HDI�̉����E����Ƃ݂Ȃ��Ă��܂��BHDI��2�ˆȏ゠��ꍇ�́CInterval���Ő��l����є�тɂȂ��Ă��镔�������‚��Ă��̕ω��_��HDI�̋��E�Ƃ݂Ȃ��Ă��܂��BMAP����l�͍ő厖��m������������k�̒l�����߂邱�ƂŌv�Z���Ă��܂��B

�@���ۂɂ��̊֐����g���āC���܂��܂ȃp�����[�^�����“񍀕��z��MAP��HDI���v�Z���Ă݂܂����B

R�R�[�h02: �p�����[�^�ƈ�����ς��Ȃ���񍀕��z�Ŏ����Ă݂�����
> #(1) �����m��0.5�C���s��20�̓񍀕��z (95% HDI)
> hdimass(dbinom(0:500,20,0.5),start.k = 0)
$MAP
[1] 10

$Lower
[1] 6

$Upper
[1] 14

$ActualProb
[1] 0.9586105

> #(2) �����m��0.2�C���s��20�̓񍀕��z (95% HDI)
> hdimass(dbinom(0:500,20,0.2),start.k = 0)
$MAP
[1] 4

$Lower
[1] 1

$Upper
[1] 7

$ActualProb
[1] 0.9563281

> #(3) �����m��0.6�C���s��100�̓񍀕��z (95% HDI)
> hdimass(dbinom(0:500,100,0.6),start.k = 0)
$MAP
[1] 60

$Lower
[1] 51

$Upper
[1] 69

$ActualProb
[1] 0.948118

> #(4) �����m��0.6�C���s��100�̓񍀕��z (99% HDI)
> hdimass(dbinom(0:500,100,0.6),start.k = 0,credMass = 0.99)
$MAP
[1] 60

$Lower
[1] 48

$Upper
[1] 72

$ActualProb
[1] 0.9896389

> #(5) �����m��0.5�C���s��20�Ck>=7�̐ؒf�񍀕��z (95% HDI)
> hdimass(dbinom(7:500,20,0.5)/sum(dbinom(7:500,20,0.5)),start.k = 7,credMass = 0.95)
$MAP
[1] 10

$Lower
[1] 7

$Upper
[1] 13

$ActualProb
[1] 0.9388129

> #(6) MAP��HDI��2�‚��‚��鍬���񍀕��z (95% HDI)
> hdimass(dbinom(0:500,100,0.3) * 0.5 + dbinom(0:500,100,0.7) * 0.5)
$MAP
[1] 30 70

$Lower
[1] 22 61

$Upper
[1] 39 78

$ActualProb
[1] 0.9501802
#��95% HDI��[22,39]�܂���[61,78]�͈̔�

�@���������Ɍv�Z�ł��Ă���Ǝv���܂��B

�@�Ō�ɁC���̊֐���������o�܂����������������܂��B�l�����s���Ă��镪�͂ŗ��U�p�����[�^�̐�����s���Ă���̂ł����CMCMC�̌��ʂ���MAP����l��HDI���\���������x�Ōv�Z���邽�߂ɂ͔���������MCMC�T���v���̐� (JAGS��n.iter�̒l) �����Ȃ葝�₳�Ȃ���΂Ȃ�Ȃ����Ƃ�������܂����B����͌����I�ł͂Ȃ������̂ŁC���l�ϕ��𗘗p���Ď��㕪�z���ߎ��I�Ɍv�Z���C���̎��㕪�z����MAP����l��HDI���v�Z���邱�Ƃɂ��܂����B���̕��Y���Ƃ��č���̊֐����ł����Ƃ�����ł��BR���g���Ď��㕪�z���ߎ��I�ɋ��߂���@�ɂ‚��Ă����‚��L���ʼn�����邩������܂���B

�@�Ƃ�����ŁC���v�����邩�ǂ������������N���֐��̏Љ��2019�N���n�܂�܂����BEnjoy!

posted by mutopsy at 16:52 | R�Ɋւ���Tips