def d3logpdf_dlink3(self, link_f, y, Y_metadata=None):
c = np.zeros_like(y)<EOL>if Y_metadata is not None and '<STR_LIT>' in Y_metadata.keys():<EOL><INDENT>c = Y_metadata['<STR_LIT>']<EOL><DEDENT>val = np.log(y) - link_f<EOL>val_scaled = val/np.sqrt(self.variance)<EOL>val_scaled2 = val/self.variance<EOL>a = (<NUM_LIT:1> - stats.norm.cdf(val_scaled))<EOL>uncensored = <NUM_LIT:0><EOL>censored = c *( <NUM_LIT:2>*np.exp(-<NUM_LIT:3>*(val**<NUM_LIT:2>)/(<NUM_LIT:2>*self.variance)) / ((a**<NUM_LIT:3>)*(<NUM_LIT:2>*np.pi*self.variance)**(<NUM_LIT:3>/<NUM_LIT>))<EOL>- val*np.exp(-(val**<NUM_LIT:2>)/self.variance)/ ( (a**<NUM_LIT:2>)*np.pi*self.variance**<NUM_LIT:2>)<EOL>- val*np.exp(-(val**<NUM_LIT:2>)/self.variance)/ ( (a**<NUM_LIT:2>)*<NUM_LIT:2>*np.pi*self.variance**<NUM_LIT:2>)<EOL>- np.exp(-(val**<NUM_LIT:2>)/(<NUM_LIT:2>*self.variance))/ ( a*(self.variance**(<NUM_LIT>))*np.sqrt(<NUM_LIT:2>*np.pi))<EOL>+ (val**<NUM_LIT:2>)*np.exp(-(val**<NUM_LIT:2>)/(<NUM_LIT:2>*self.variance))/ ( a*np.sqrt(<NUM_LIT:2>*np.pi*self.variance)*self.variance**<NUM_LIT:2> ) )<EOL>d3pdf_dlink3 = uncensored + censored<EOL>return d3pdf_dlink3<EOL>
Gradient of the log-likelihood function at y given f, w.r.t shape parameter

.. math::

:param inv_link_f: latent variables link(f)
:type inv_link_f: Nx1 array
:param y: data
:type y: Nx1 array
:param Y_metadata: includes censoring information in dictionary key 'censored'
:returns: derivative of likelihood evaluated at points f w.r.t variance parameter
:rtype: float