Example #1
0
/**
 * Compute standardized residuals.
 * res{_by} = [log(O_{by}/\tilde(O)) - log(E_{by}/\tilde(E))] / (W_y G_y^{0.5})
**/
void logistic_normal::compute_standardized_residuals()
{

	// Assumed the covariance matrix (m_V) has already been calculated.
	// when the likelihood was called.
	
	m_residual.allocate(m_O);
	m_residual.initialize();

	int i,j,k;
	double n;
	
	for( i = m_y1; i <= m_y2; i++ )
	{
		n             = m_nB2(i);
		double gOmean = pow(prod(m_Op(i),n),1./n);
		dvector   t1  = log(m_Op(i)/gOmean);

		double gEmean = pow(prod(value(m_Ep(i)),n),1./n);
		dvector   t2  = log(value(m_Ep(i))/gEmean);

		dmatrix  I = identity_matrix(m_b1,n-1);

		dmatrix tF(m_b1,n,m_b1,n-1);
		tF.sub(m_b1,n-1) = I;
		tF(n)         = 1;

		dmatrix  Hinv    = inv(I + 1);
		dmatrix FHinv    = tF * Hinv;
		dmatrix     G    = FHinv * value(m_V(i)) * trans(FHinv);
		
		dvector sd    = sqrt(diagonal(G));
		for( j = m_b1; j <= m_nB2(i); j++ )
		{
			k = m_nAgeIndex(i)(j);
			m_residual(i)(k) = (t1(j)-t2(j)) / (sd(j)*m_dWy(i));
		}
	}
}
Example #2
0
int main() {

	srand(time(NULL));

	const double xMin = -1, yMin = -1;
	const double xMax = 1, yMax = 1;

	{
		epswriter c("circle.eps", xMin, yMin, xMax, yMax);
		epswriter cF("circleF.eps", xMin, yMin, xMax, yMax);
		const double radius = 0.5;
		const double centerX = 0;
		const double centerY = 0;

		c.circle(centerX, centerY,radius,MyRand(), MyRand(), MyRand());
		cF.filledCircle(centerX, centerY,radius,MyRand(), MyRand(), MyRand());
	}

	{
		epswriter t("triangle.eps", xMin, yMin, xMax, yMax);
		epswriter tF("triangleFilled.eps", xMin, yMin, xMax, yMax);

		const double x1= 0  , y1=.5;
		const double x2=-.25, y2=-.25;
		const double x3= .25, y3=-.25;

		t.triangle(x1,y1,x2,y2,x3,y3,MyRand(),MyRand(),MyRand());
		tF.filledTriangle(x1,y1,x2,y2,x3,y3,MyRand(),MyRand(),MyRand());
	}

	{
		epswriter s("square.eps", xMin, yMin, xMax, yMax);
		epswriter sF("squareFilled.eps", xMin, yMin, xMax, yMax);
			
		const double leftDownX = -.5, leftDownY=-.5;
		const double rightUpX = .5, rightUpY = .5;
		s.square(leftDownX, leftDownY, rightUpX, rightUpY,MyRand(),MyRand(),MyRand());
		sF.filledSquare(leftDownX, leftDownY, rightUpX, rightUpY,MyRand(),MyRand(),MyRand());
	}

	{
		epswriter l("line.eps", xMin, yMin, xMax, yMax);
		epswriter ml("multiline.eps",xMin, yMin, xMax, yMax);

		const double lineWidth = .05;
		const double x0 = -1, y0=-1;
		const double xf = .5, yf=1.0;
		std::vector<double> x,y;
		x.push_back(.5);x.push_back(.7); x.push_back(.9);
		y.push_back(-.3);y.push_back(.4); y.push_back(0);

		l.line(x0,y0,xf,yf, lineWidth, MyRand(),MyRand(),MyRand());
		ml.multiline(x,y, lineWidth, MyRand(),MyRand(),MyRand());
	}

	{
		epswriter n("names.eps", xMin, yMin, xMax, yMax);
		const double x1= 0  , y1=.5;
		const double x2=-.25, y2=-.25;

		n.writeText(x1,y1,"Very nice name", 0.2, 0,0, 0);
		n.writeText(x2,y2,"Nice name indeed", 0.2, 0,0,0);
	}
}