27 #ifndef SHORE_STATISTICS_BERRY_HPP__
28 #define SHORE_STATISTICS_BERRY_HPP__
45 typedef long double obs_t;
61 workspace(
const int g,
const size_t rows);
80 obs_t search(Iter observations)
82 const int DF=m_lm.get_residual_df();
85 *std::min_element(observations,observations+m_lm.
nrows());
87 *std::max_element(observations,observations+m_lm.
nrows());
89 shore::seq(m_min_num-min,9.999*max,m_grid_size,m_ws.Cs);
94 for(
int i=0;i<m_depth;++i)
96 for(
int j=0;j<m_grid_size;++j)
98 const obs_t c=m_ws.Cs[j];
100 for(
size_t k=0;k<m_lm.
nrows();++k)
105 m_lm.fit(m_ws.log_obs);
109 m_ws.residuals+m_lm.
nrows(),m_ws.skewkurt,
true);
111 m_ws.g0[j]=std::abs(m_ws.skewkurt[0])
112 +std::abs(m_ws.skewkurt[1]+6.0/(DF+2));
115 const obs_t*
const min_ptr=
116 std::min_element(m_ws.g0,m_ws.g0+m_grid_size);
118 const obs_t min_g0= *min_ptr;
119 const obs_t min_c=m_ws.Cs[min_ptr-m_ws.g0];
122 if((i!=0)&&(std::abs(last_g0-min_g0)<=m_conv_crit))
124 return (last_g0<min_g0)?last_c:min_c;
132 shore::seq(m_ws.Cs[0],m_ws.Cs[1],m_grid_size,m_ws.Cs);
134 else if(min_ptr==(&m_ws.g0[m_grid_size-1]))
137 m_ws.Cs[m_grid_size-1],m_grid_size,m_ws.Cs);
142 m_ws.Cs[min_ptr-m_ws.g0+1],m_grid_size,m_ws.Cs);
152 #endif // SHORE_STATISTICS_BERRY_HPP__