/** * 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)); } } }
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); } }