double LinearModel::calculateMallowC(LinearModel * submodel) { // Mallow's C = RSSm / S^2 + 2(m+1)-n // where S^2 = RSSk / (n-k-1); double Sk = calculateRSS() / ( nind - np - 1); return ( submodel->calculateRSS() / Sk ) + 2 * ( submodel->np+1)-nind; }
double LinearModel::calculateFTest(LinearModel * submodel) { double RSSk = calculateRSS(); double RSSm = submodel->calculateRSS(); return ( ( RSSm - RSSk ) / (double)( np - submodel->np ) ) / ( RSSk / (double)(nind - np - 1 ) ); }
double printRSS(cluster* clusters, int n) { double result = 0; for(int i=0; i<n; i++) { double rss = calculateRSS(clusters[i]); printf("Cluster %d: RSS = %f Members = %d\n", i, rss, clusters[i].members.size()); result += rss; } printf("Total RSS = %f\n", result); return result; }
double LinearModel::calculateRSquared() { // Return coefficient of determination. Ifnot already calculated, // get residual sum of squares first (set to -1) if ( RSS < 0 ) RSS = calculateRSS(); double SSy = varY * (nind-1); double r = ( SSy - RSS ) / SSy; return r > 0 ? ( r > 1 ? 1 : r ) : 0; }