With bayesmh, you can create a custom prior density with the density() option of prior().
And that probability density function can be a function of the parameter (see first example below).
And a parameter for a factor variable can have a custom density (see second example below).
But when I try to create a custom density that combines both of these, that is, is a function of the parameter for a factor variable, I get an error message whose complaints I've ruled out (third example below).
Here's the code (I have also attached a do-file containing the complete code for two reproducible examples)
and here's the result (I've also attached an SMCL log file that contains the result).
.ÿ/*ÿNotÿaÿproblemÿforÿtheÿcustomÿdensityÿtoÿbeÿaÿfunctionÿofÿaÿparameterÿ(orÿitsÿlinearÿcombi
>ÿnation)ÿ*/
.ÿbayesmhÿforeign,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿdensity(exp({foreign:_cons})ÿ/ÿ(1ÿ+ÿexp({foreign:_cons}))^2))
>ÿÿ///
>ÿÿÿÿÿÿÿÿÿnomodelsummary
ÿÿ
Burn-inÿ...
Simulationÿ...
BayesianÿlogisticÿregressionÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿiterationsÿÿ=ÿÿÿÿÿ12,500
Random-walkÿMetropolis-HastingsÿsamplingÿÿÿÿÿÿÿÿÿBurn-inÿÿÿÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ2,500
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿsampleÿsizeÿ=ÿÿÿÿÿ10,000
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNumberÿofÿobsÿÿÿÿ=ÿÿÿÿÿÿÿÿÿ74
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAcceptanceÿrateÿÿ=ÿÿÿÿÿÿ.4486
Logÿmarginalÿlikelihoodÿ=ÿ-47.010554ÿÿÿÿÿÿÿÿÿÿÿÿÿEfficiencyÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ.2163
ÿ
------------------------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEqual-tailed
ÿÿÿÿÿforeignÿ|ÿÿÿÿÿÿMeanÿÿÿStd.ÿDev.ÿÿÿÿÿMCSEÿÿÿÿÿMedianÿÿ[95%ÿCred.ÿInterval]
-------------+----------------------------------------------------------------
ÿÿÿÿÿÿÿ_consÿ|ÿ-.8417671ÿÿÿ.2630011ÿÿÿ.005654ÿÿ-.8390754ÿÿ-1.384746ÿÿ-.3504125
------------------------------------------------------------------------------
.ÿ
.ÿ/*ÿNotÿaÿproblemÿforÿaÿfactorÿvariableÿtoÿhaveÿcustomÿdensityÿpriorÿ*/
.ÿbayesmhÿforeignÿi.k,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿnormal(0,ÿ5))ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:i1.k},ÿdensity(1))ÿ///
>ÿÿÿÿÿÿÿÿÿnomodelsummary
ÿÿ
Burn-inÿ...
Simulationÿ...
BayesianÿlogisticÿregressionÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿiterationsÿÿ=ÿÿÿÿÿ12,500
Random-walkÿMetropolis-HastingsÿsamplingÿÿÿÿÿÿÿÿÿBurn-inÿÿÿÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ2,500
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿsampleÿsizeÿ=ÿÿÿÿÿ10,000
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNumberÿofÿobsÿÿÿÿ=ÿÿÿÿÿÿÿÿÿ74
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAcceptanceÿrateÿÿ=ÿÿÿÿÿÿ.2666
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEfficiency:ÿÿminÿ=ÿÿÿÿÿÿÿ.136
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿavgÿ=ÿÿÿÿÿÿ.1436
Logÿmarginalÿlikelihoodÿ=ÿ-47.085067ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmaxÿ=ÿÿÿÿÿÿ.1513
ÿ
------------------------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEqual-tailed
ÿÿÿÿÿforeignÿ|ÿÿÿÿÿÿMeanÿÿÿStd.ÿDev.ÿÿÿÿÿMCSEÿÿÿÿÿMedianÿÿ[95%ÿCred.ÿInterval]
-------------+----------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿ1.kÿ|ÿ-.0355851ÿÿÿ.4936124ÿÿÿÿ.01269ÿÿ-.0221173ÿÿ-.9684661ÿÿÿ.9078394
ÿÿÿÿÿÿÿ_consÿ|ÿ-.8504277ÿÿÿ.3452926ÿÿÿ.009364ÿÿ-.8448572ÿÿÿ-1.54843ÿÿÿ-.212137
------------------------------------------------------------------------------
.ÿ
.ÿ/*ÿProblemÿwhenÿcustomÿdensityÿpriorÿisÿaÿfunctionÿofÿtheÿfactorÿvariable'sÿ
>ÿÿÿÿparameterÿ(orÿitsÿlinearÿcombination)ÿ*/
.ÿbayesmhÿforeignÿi.k,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿnormal(0,ÿ5))ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:i1.k},ÿdensity(exp({foreign:i1.k})ÿ/ÿ(1ÿ+ÿexp({foreign:i1.k}))^2))
noÿpriorÿspecifiedÿforÿforeign:i1.k
ÿÿÿÿPriorÿdistributionsÿmustÿbeÿspecifiedÿforÿallÿmodelÿparameters.ÿYouÿmayÿhaveÿomitted
ÿÿÿÿoptionÿprior()ÿforÿsomeÿofÿtheÿparametersÿorÿmistypedÿtheÿnamesÿofÿtheÿparametersÿinÿthe
ÿÿÿÿspecifiedÿprior()ÿoptions.
r(198);
And that probability density function can be a function of the parameter (see first example below).
And a parameter for a factor variable can have a custom density (see second example below).
But when I try to create a custom density that combines both of these, that is, is a function of the parameter for a factor variable, I get an error message whose complaints I've ruled out (third example below).
Here's the code (I have also attached a do-file containing the complete code for two reproducible examples)
Code:
quietly sysuse auto generate byte k = mod(_n, 2) /* Not a problem for the custom density to be a function of a parameter (or its linear combination) */ bayesmh foreign, likelihood(logistic) /// prior({foreign:_cons}, density(exp({foreign:_cons}) / (1 + exp({foreign:_cons}))^2)) /// nomodelsummary /* Not a problem for a factor variable to have custom density prior */ bayesmh foreign i.k, likelihood(logistic) /// prior({foreign:_cons}, normal(0, 5)) /// prior({foreign:i1.k}, density(1)) /// nomodelsummary /* Problem when custom density prior is a function of the factor variable's parameter (or its linear combination) */ bayesmh foreign i.k, likelihood(logistic) /// prior({foreign:_cons}, normal(0, 5)) /// prior({foreign:i1.k}, density(exp({foreign:i1.k}) / (1 + exp({foreign:i1.k}))^2)) exit
.ÿ/*ÿNotÿaÿproblemÿforÿtheÿcustomÿdensityÿtoÿbeÿaÿfunctionÿofÿaÿparameterÿ(orÿitsÿlinearÿcombi
>ÿnation)ÿ*/
.ÿbayesmhÿforeign,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿdensity(exp({foreign:_cons})ÿ/ÿ(1ÿ+ÿexp({foreign:_cons}))^2))
>ÿÿ///
>ÿÿÿÿÿÿÿÿÿnomodelsummary
ÿÿ
Burn-inÿ...
Simulationÿ...
BayesianÿlogisticÿregressionÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿiterationsÿÿ=ÿÿÿÿÿ12,500
Random-walkÿMetropolis-HastingsÿsamplingÿÿÿÿÿÿÿÿÿBurn-inÿÿÿÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ2,500
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿsampleÿsizeÿ=ÿÿÿÿÿ10,000
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNumberÿofÿobsÿÿÿÿ=ÿÿÿÿÿÿÿÿÿ74
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAcceptanceÿrateÿÿ=ÿÿÿÿÿÿ.4486
Logÿmarginalÿlikelihoodÿ=ÿ-47.010554ÿÿÿÿÿÿÿÿÿÿÿÿÿEfficiencyÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ.2163
ÿ
------------------------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEqual-tailed
ÿÿÿÿÿforeignÿ|ÿÿÿÿÿÿMeanÿÿÿStd.ÿDev.ÿÿÿÿÿMCSEÿÿÿÿÿMedianÿÿ[95%ÿCred.ÿInterval]
-------------+----------------------------------------------------------------
ÿÿÿÿÿÿÿ_consÿ|ÿ-.8417671ÿÿÿ.2630011ÿÿÿ.005654ÿÿ-.8390754ÿÿ-1.384746ÿÿ-.3504125
------------------------------------------------------------------------------
.ÿ
.ÿ/*ÿNotÿaÿproblemÿforÿaÿfactorÿvariableÿtoÿhaveÿcustomÿdensityÿpriorÿ*/
.ÿbayesmhÿforeignÿi.k,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿnormal(0,ÿ5))ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:i1.k},ÿdensity(1))ÿ///
>ÿÿÿÿÿÿÿÿÿnomodelsummary
ÿÿ
Burn-inÿ...
Simulationÿ...
BayesianÿlogisticÿregressionÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿiterationsÿÿ=ÿÿÿÿÿ12,500
Random-walkÿMetropolis-HastingsÿsamplingÿÿÿÿÿÿÿÿÿBurn-inÿÿÿÿÿÿÿÿÿÿ=ÿÿÿÿÿÿ2,500
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿMCMCÿsampleÿsizeÿ=ÿÿÿÿÿ10,000
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿNumberÿofÿobsÿÿÿÿ=ÿÿÿÿÿÿÿÿÿ74
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿAcceptanceÿrateÿÿ=ÿÿÿÿÿÿ.2666
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEfficiency:ÿÿminÿ=ÿÿÿÿÿÿÿ.136
ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿavgÿ=ÿÿÿÿÿÿ.1436
Logÿmarginalÿlikelihoodÿ=ÿ-47.085067ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿmaxÿ=ÿÿÿÿÿÿ.1513
ÿ
------------------------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿÿÿÿÿ|ÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿEqual-tailed
ÿÿÿÿÿforeignÿ|ÿÿÿÿÿÿMeanÿÿÿStd.ÿDev.ÿÿÿÿÿMCSEÿÿÿÿÿMedianÿÿ[95%ÿCred.ÿInterval]
-------------+----------------------------------------------------------------
ÿÿÿÿÿÿÿÿÿ1.kÿ|ÿ-.0355851ÿÿÿ.4936124ÿÿÿÿ.01269ÿÿ-.0221173ÿÿ-.9684661ÿÿÿ.9078394
ÿÿÿÿÿÿÿ_consÿ|ÿ-.8504277ÿÿÿ.3452926ÿÿÿ.009364ÿÿ-.8448572ÿÿÿ-1.54843ÿÿÿ-.212137
------------------------------------------------------------------------------
.ÿ
.ÿ/*ÿProblemÿwhenÿcustomÿdensityÿpriorÿisÿaÿfunctionÿofÿtheÿfactorÿvariable'sÿ
>ÿÿÿÿparameterÿ(orÿitsÿlinearÿcombination)ÿ*/
.ÿbayesmhÿforeignÿi.k,ÿlikelihood(logistic)ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:_cons},ÿnormal(0,ÿ5))ÿ///
>ÿÿÿÿÿÿÿÿÿprior({foreign:i1.k},ÿdensity(exp({foreign:i1.k})ÿ/ÿ(1ÿ+ÿexp({foreign:i1.k}))^2))
noÿpriorÿspecifiedÿforÿforeign:i1.k
ÿÿÿÿPriorÿdistributionsÿmustÿbeÿspecifiedÿforÿallÿmodelÿparameters.ÿYouÿmayÿhaveÿomitted
ÿÿÿÿoptionÿprior()ÿforÿsomeÿofÿtheÿparametersÿorÿmistypedÿtheÿnamesÿofÿtheÿparametersÿinÿthe
ÿÿÿÿspecifiedÿprior()ÿoptions.
r(198);
Comment