matthias muntwiler bbd16d0f94 add files for public distribution
based on internal repository 0a462b6 2017-11-22 14:41:39 +0100
2017-11-22 14:55:20 +01:00

205 lines
10 KiB
C

#include <stdio.h>
#include "loess.h"
struct loess_struct galaxy;
struct pred_struct galaxy_contour, spine_fit, spine_se;
struct ci_struct spine_ci;
double velocity[] = {1769, 1749, 1749, 1758, 1750, 1745, 1750, 1753, 1734,
1710, 1711, 1709, 1674, 1665, 1680, 1648, 1626, 1581, 1602,
1558, 1538, 1506, 1521, 1498, 1501, 1491, 1481, 1468, 1455,
1454, 1456, 1459, 1451, 1465, 1451, 1486, 1433, 1631, 1618,
1607, 1608, 1601, 1603, 1612, 1607, 1618, 1649, 1595, 1580,
1574, 1574, 1559, 1578, 1591, 1579, 1588, 1581, 1569, 1572,
1584, 1565, 1718, 1711, 1710, 1715, 1713, 1717, 1715, 1712,
1710, 1692, 1669, 1679, 1691, 1647, 1630, 1616, 1576, 1561,
1558, 1538, 1525, 1509, 1501, 1494, 1489, 1493, 1487, 1495,
1511, 1505, 1508, 1507, 1513, 1493, 1495, 1736, 1744, 1765,
1766, 1764, 1715, 1751, 1761, 1763, 1758, 1743, 1738, 1732,
1734, 1723, 1706, 1665, 1677, 1679, 1601, 1629, 1621, 1574,
1559, 1540, 1525, 1517, 1506, 1481, 1465, 1468, 1465, 1454,
1448, 1441, 1441, 1430, 1434, 1445, 1464, 1471, 1442, 1436,
1434, 1428, 1558, 1563, 1581, 1548, 1572, 1574, 1578, 1576,
1583, 1584, 1566, 1568, 1577, 1587, 1606, 1593, 1584, 1595,
1617, 1552, 1597, 1615, 1626, 1626, 1586, 1624, 1600, 1585,
1738, 1690, 1729, 1719, 1702, 1754, 1741, 1736, 1731, 1725,
1710, 1673, 1669, 1641, 1675, 1681, 1645, 1594, 1583, 1599,
1578, 1548, 1543, 1537, 1543, 1519, 1500, 1488, 1486, 1483,
1481, 1485, 1480, 1479, 1505, 1482, 1481, 1489, 1531, 1533,
1539, 1526, 1551, 1549, 1532, 1538, 1550, 1536, 1519, 1536,
1535, 1536, 1533, 1528, 1539, 1546, 1552, 1557, 1573, 1553,
1576, 1591, 1591, 1624, 1633, 1597, 1605, 1629, 1658, 1664,
1667, 1671, 1687, 1682, 1668, 1673, 1684, 1668, 1618, 1658,
1644, 1647, 1642, 1616, 1629, 1610, 1603, 1613, 1603, 1606,
1603, 1608, 1613, 1616, 1615, 1611, 1580, 1580, 1586, 1591,
1592, 1562, 1572, 1589, 1588, 1585, 1586, 1573, 1573, 1558,
1566, 1740, 1704, 1748, 1757, 1775, 1765, 1762, 1752, 1752,
1753, 1753, 1748, 1730, 1709, 1688, 1687, 1678, 1654, 1634,
1611, 1590, 1562, 1565, 1541, 1537, 1515, 1498, 1479, 1481,
1475, 1466, 1461, 1457, 1455, 1452, 1453, 1448, 1469, 1456,
1448, 1409, 1416, 1429};
double direction[] = {8.46279, 7.96498, 7.46717, 6.96936, 6.47154, 5.97373,
5.47592, 4.97811, 4.4803, 3.98249, 3.46303, 2.96522,
2.46741, 1.9696, 1.47179, 0.973978, 0.476167, -0.021644,
-0.519455, -1.01727, -1.51508, -2.01289, -2.5107,
-3.00851, -3.52797, -4.02578, -4.52359, -5.0214,
-5.51921, -6.01702, -6.51483, -7.01264, -7.51045,
-8.00827, -8.50608, -9.5017, -11.0168, 27.8244, 21.088,
18.8425, 16.597, 14.3516, 12.1061, 9.86059, 7.61511,
5.272, 3.02652, 0.781037, -1.46444, -3.70992, -5.95541,
-8.20089, -10.4464, -12.6918, -14.9373, -17.1828,
-19.4283, -21.6738, -23.9193, -26.2624, -28.5078,
23.8699, 22.3013, 20.7327, 19.1642, 17.5956, 16.027,
14.3902, 12.8216, 11.253, 9.68438, 8.11578, 6.54718,
4.97859, 3.40999, 1.8414, 0.272799, -1.2958, -2.86439,
-4.43299, -6.00159, -7.63838, -9.20698, -10.7756,
-12.3442, -13.9128, -15.4814, -17.05, -18.6186,
-20.1872, -21.7557, -23.3243, -24.8929, -26.4615,
-28.0301, -29.6669, 18.4201, 17.5959, 16.7716, 15.9474,
14.263, 13.4388, 12.6146, 11.7903, 10.9661, 10.1418,
9.31757, 8.49332, 7.66907, 6.84483, 6.02058, 5.19634,
4.37209, 3.54784, 2.68776, 1.86351, 1.03927, 0.215021,
-0.609226, -1.43347, -2.25772, -3.08196, -3.90621,
-4.73046, -5.5547, -6.37895, -7.2032, -8.02744,
-8.88752, -9.71177, -10.536, -11.3603, -12.1845,
-13.0088, -13.833, -14.6572, -15.4815, -16.3057,
-17.13, -17.9542, -18.7785, 25.8899, 24.2078, 22.4526,
20.8436, 19.1615, 17.4794, 15.7972, 14.1151, 12.433,
10.7509, 9.06879, 7.31354, 5.70456, 3.94931, 2.19406,
0.511948, -1.09703, -2.77914, -4.46126, -6.07024,
-7.82548, -9.5076, -11.1897, -12.8718, -14.5539,
-16.2361, -23.1108, -24.7198, 1.97596, 1.77531, 1.67498,
1.57466, 1.47434, 1.37401, 1.27369, 1.17336, 1.07304,
0.972712, 0.872388, 0.767701, 0.667377, 0.567052,
0.466727, 0.366403, 0.266078, 0.165754, 0.0654291,
-0.0348955, -0.13522, -0.235545, -0.335869, -0.436194,
-0.536518, -0.636843, -0.74153, -0.841854, -0.942179,
-1.0425, -1.14283, -1.24315, -1.34348, -1.4438,
-1.54413, -1.64445, -1.74478, -1.8451, 24.8532, 23.827,
22.8007, 21.7298, 20.7036, 19.6773, 18.6511, 16.5539,
15.5723, 14.546, 13.4752, 12.4489, 11.4227, 10.3964,
9.37015, 8.3439, 7.31764, 6.29139, 5.26513, 4.23888,
3.21262, 2.18637, 1.16011, 0.133859, -0.937015,
-1.96327, -2.98953, -4.01578, -5.04204, -6.06829,
-7.04993, -8.07618, -9.14706, -10.1733, -11.1996,
-12.2258, -13.2521, -14.2783, -15.3046, -16.3308,
-17.3571, -18.3834, -19.4096, -20.4359, -21.4621,
-22.4884, 29.4841, 27.0434, 25.0908, 22.6501, 20.4046,
18.1591, 15.9136, 13.7658, 11.4227, 9.17718, 6.9317,
4.58859, 2.44074, 0.0976296, -2.05022, -4.19807,
-6.63881, -8.88429, -11.1298, -13.2776, -15.5231,
-17.8662, -20.1117, -22.3572, -24.6027, -26.8481,
-29.0936, 10.8869, 9.39348, 8.91731, 8.39786, 7.92169,
7.42388, 6.92607, 6.42826, 5.9088, 5.41099, 4.91318,
4.41537, 3.91756, 3.44139, 2.92193, 2.42412, 1.92631,
1.4285, 0.93069, 0.432879, -0.0649319, -0.562743,
-1.06055, -1.55837, -2.07782, -2.55399, -3.07344,
-3.57125, -4.06906, -4.56688, -5.06469, -5.5625,
-6.06031, -6.55812, -7.05593, -7.57539, -8.0732,
-8.54937, -9.09046, -9.58827, -10.0428, -10.5406,
-11.0601,
-38.1732, -35.9277, -33.6822, -31.4367, -29.1912,
-26.9458, -24.7003, -22.4548, -20.2093, -17.9638, -15.6207,
-13.3753, -11.1298, -8.88429, -6.63881, -4.39333, -2.14785,
0.0976296, 2.34311, 4.58859, 6.83407, 9.07955, 11.325,
13.5705, 15.9136, 18.1591, 20.4046, 22.6501, 24.8955,
27.141, 29.3865, 31.632, 33.8775, 36.123, 38.3684, 42.8594,
49.6935, 6.16853, 4.6751, 4.17728, 3.67947, 3.18166, 2.68385,
2.18604, 1.68823, 1.16877, 0.670963, 0.173152, -0.324659,
-0.822471, -1.32028, -1.81809, -2.3159, -2.81371, -3.31153,
-3.80934, -4.30715, -4.80496, -5.30277, -5.82223, -6.32004,
-25.5974, -23.9153, -22.2332, -20.551, -18.8689, -17.1868,
-15.4316, -13.7494, -12.0673, -10.3852, -8.70311, -7.021,
-5.33888, -3.65677, -1.97466, -0.292541, 1.38957, 3.07169,
4.7538, 6.43591, 8.19116, 9.87327, 11.5554, 13.2375, 14.9196,
16.6017, 18.2838, 19.966, 21.6481, 23.3302, 25.0123, 26.6944,
28.3765, 30.0586, 31.8139, -47.986, -45.8388, -43.6916,
-41.5443, -37.1565, -35.0093, -32.862, -30.7148, -28.5676,
-26.4203, -24.2731, -22.1259, -19.9786, -17.8314, -15.6842,
-13.5369, -11.3897, -9.24245, -7.00185, -4.85462, -2.70738,
-0.560148, 1.58709, 3.73432, 5.88156, 8.02879, 10.176,
12.3233, 14.4705, 16.6177, 18.765, 20.9122, 23.1528, 25.3,
27.4473, 29.5945, 31.7417, 33.889, 36.0362, 38.1834, 40.3307,
42.4779, 44.6251, 46.7724, 48.9196, 24.1427, 22.5741, 20.9373,
19.437, 17.8684, 16.2998, 14.7312, 13.1626, 11.594, 10.0254,
8.45678, 6.81998, 5.31959, 3.68279, 2.04599, 0.477399, -1.023,
-2.59159, -4.16019, -5.66059, -7.29738, -8.86598, -10.4346,
-12.0032, -13.5718, -15.1404, -21.5511, -23.0515, -45.2569,
-40.6613, -38.3635, -36.0656, -33.7678, -31.47, -29.1722,
-26.8744, -24.5766, -22.2788, -19.981, -17.5832, -15.2854,
-12.9876, -10.6898, -8.392, -6.09419, -3.79638, -1.49857,
0.799239, 3.09705, 5.39486, 7.69267, 9.99048, 12.2883,
14.5861, 16.9838, 19.2816, 21.5794, 23.8773, 26.1751, 28.4729,
30.7707, 33.0685, 35.3663, 37.6641, 39.9619, 42.2597, 49.8478,
47.7895, 45.7311, 43.5833, 41.525, 39.4666, 37.4083, 33.2021,
31.2332, 29.1749, 27.027, 24.9687, 22.9103, 20.852, 18.7936,
16.7353, 14.6769, 12.6186, 10.5602, 8.50188, 6.44353, 4.38518,
2.32683, 0.26848, -1.87936, -3.93771, -5.99606, -8.05441,
-10.1128, -12.1711, -14.14, -16.1983, -18.3462, -20.4045,
-22.4629, -24.5212, -26.5796, -28.6379, -30.6962, -32.7546,
-34.8129, -36.8713, -38.9296, -40.988, -43.0463, -45.1047,
6.53648, 5.99538, 5.5625, 5.0214, 4.52359, 4.02578, 3.52797,
3.0518, 2.53234, 2.03453, 1.53672, 1.01727, 0.541099,
0.021644, -0.454523, -0.93069, -1.47179, -1.9696, -2.46741,
-2.94358, -3.44139, -3.96084, -4.45866, -4.95647, -5.45428,
-5.95209, -6.4499, -49.1077, -42.3712, -40.2234, -37.8803,
-35.7324, -33.487, -31.2415, -28.996, -26.6529, -24.4074,
-22.1619, -19.9164, -17.671, -15.5231, -13.18, -10.9345,
-8.68903, -6.44355, -4.19807, -1.95259, 0.292889, 2.53837,
4.78385, 7.02933, 9.37244, 11.5203, 13.8634, 16.1089, 18.3544,
20.5998, 22.8453, 25.0908, 27.3363, 29.5818, 31.8272, 34.1704,
36.4158, 38.5637, 41.0044, 43.2499, 45.3001, 47.5456,
49.8887};
double ew[59], ns[99], grid[11682], fit_eval[200], ci_eval[30];
double tmp, range = 98, coverage = .99;
int n = 323, p = 2, m, se_fit = FALSE;
int i, j, k;
main() {
printf("\nloess(&galaxy):\n");
loess_setup(direction, velocity, n, p, &galaxy);
galaxy.model.span = 0.35;
galaxy.model.normalize = FALSE;
galaxy.model.family = "symmetric";
loess(&galaxy);
loess_summary(&galaxy);
m = 5841;
tmp = -29.0;
for(i = 0; i < 59; i++)
ew[i] = tmp++;
tmp = -49.0;
for(i = 0; i < 99; i++)
ns[i] = tmp++;
for(i = 0; i < 99; i++) {
k = i * 59;
for(j = 0; j < 59; j++) {
grid[k + j] = ew[j];
grid[m + k + j] = ns[i];
}
}
predict(grid, m, &galaxy, &galaxy_contour, se_fit);
m = 100;
tmp = range / 99;
for(i = 0; i < 100; i++) {
fit_eval[i + 100] = -49 + tmp * i;
fit_eval[i] = fit_eval[i + 100] / (-3.7);
}
predict(fit_eval, m, &galaxy, &spine_fit, se_fit);
m = 15;
se_fit = TRUE;
tmp = range / 14;
for(i = 0; i < m; i++) {
ci_eval[i + m] = -49 + tmp * i;
ci_eval[i] = fit_eval[i + 100] / (-3.7);
}
predict(ci_eval, m, &galaxy, &spine_se, se_fit);
pointwise(&spine_se, m, coverage, &spine_ci);
loess_free_mem(&galaxy);
pred_free_mem(&galaxy_contour);
pred_free_mem(&spine_fit);
pred_free_mem(&spine_se);
}