home *** CD-ROM | disk | FTP | other *** search
- stlnrg(k,nyval,xy,ans)
-
- /* this function computes the slope and other statistics */
- /* for a linear regression with several y values for each x */
- /* value or with one independent variable. */
-
- int k,nyval[];
- float xy[],ans[];
-
- {
-
- int i,j,m,n,nx,ny;
- float a12,a13,en,ends1,en1,en2,s1,s2,s4,sumx,sumx2,sumxy,sumy;
- extern double sqrt();
-
- sumx = 0.;
- sumx2 = 0.;
- sumy = 0.;
- ans[5] = 0.;
- sumxy = 0.0;
- n = 0;
- nx = 1;
- ny = 2;
-
- for(j = 1; j <= k; j++)
- {
- m = nyval[j-1];
- n = n + m;
-
- for(i = 1; i <= m; i++)
- {
- sumx = sumx + xy[nx-1];
- sumx2 = sumx2 + xy[nx-1] * xy[nx-1];
- sumy = sumy + xy[ny-1];
- ans[5] = ans[5] + xy[ny-1] * xy[ny-1];
- sumxy = sumxy + xy[nx-1] * xy[ny-1];
- ny++;
- }
- nx = nx + nyval[j-1] + 1;
- ny++;
- }
- en = n;
- ans[0] = en;
- s1 = ans[0] * sumx2 - sumx * sumx;
- s2 = ans[0] * sumxy - sumx * sumy;
- en1 = en - 1.;
- en2 = en1 - 1.;
- ans[1] = s2 / s1;
- ans[2] = sumy / en;
- ans[3] = sumx / en;
- ans[4] = ans[2] - ans[1] * ans[3];
- ans[6] = ans[2] * sumy;
- ans[7] = ans[1] * s2 / en;
- ans[8] = ans[5] - ans[6] - ans[7];
- s4 = ans[8] / (en - 2.);
- ends1 = en / s1;
- ans[9] = sqrt(1./(en1 * ends1));
- ans[10] = sqrt((ans[5] - ans[6]) / en1);
- ans[11] = sqrt(s4);
- a12 = s4 / en;
- ans[12] = sqrt(a12);
- a13 = s4 * ends1;
- ans[13] = sqrt(a13);
- ans[14] = sqrt(a12 + a13 * ans[3] * ans[3]);
- ans[15] = ans[7] / s4;
- }