下午3点右眼跳+3.00cx95

北方网日新闻汇总
北方网日新闻汇总
[1000][]&&
[1001][]&&
[1002][]&&
[1003][]&&
[1004][]&&
[1005][]&&
[1006][]&&
[1007][]&&
[1008][]&&
[1009][]&&
[1010][]&&
[1011][]&&
[1012][]&&
[1013][]&&
[1014][]&&
[1015][]&&
[1016][]&&
[1017][]&&
[1018][]&&
[1019][]&&
[1020][]&&
[1021][]&&
[1022][]&&
[1023][]&&
[1024][]&&
[1025][]&&
[1026][]&&
[1027][]&&
[1028][]&&
[1029][]&&
[1030][]&&
[1031][]&&
[1032][]&&
[1033][]&&
[1034][]&&
[1035][]&&
[1036][]&&
[1037][]&&
[1038][]&&
[1039][]&&
[1040][]&&
[1041][]&&
[1042][]&&
[1043][]&&
[1044][]&&
[1045][]&&
[1046][]&&
[1047][]&&
[1048][]&&
[1049][]&&
[1050][]&&
[1051][]&&
[1052][]&&
[1053][]&&
[1054][]&&
[1055][]&&
[1056][]&&
[1057][]&&
[1058][]&&
[1059][]&&
[1060][]&&
[1061][]&&
[1062][]&&
[1063][]&&
[1064][]&&
[1065][]&&
[1066][]&&
[1067][]&&
[1068][]&&
[1069][]&&
[1070][]&&
[1071][]&&
[1072][]&&
[1073][]&&
[1074][]&&
[1075][]&&
[1076][]&&
[1077][]&&
[1078][]&&
[1079][]&&
[1080][]&&
[1081][]&&
[1082][]&&
[1083][]&&
[1084][]&&
[1085][]&&
[1086][]&&
[1087][]&&
[1088][]&&
[1089][]&&
[1090][]&&
[1091][]&&
[1092][]&&
[1093][]&&
[1094][]&&
[1095][]&&
[1096][]&&
[1097][]&&
[1098][]&&
[1099][]&&
[1100][]&&
[1101][]&&
[1102][]&&
[1103][]&&
[1104][]&&
[1105][]&&
[1106][]&&
[1107][]&&
[1108][]&&
[1109][]&&
[1110][]&&
[1111][]&&
[1112][]&&
[1113][]&&
[1114][]&&
[1115][]&&
[1116][]&&
[1117][]&&
[1118][]&&
[1119][]&&
[1120][]&&
[1121][]&&
[1122][]&&
[1123][]&&
[1124][]&&
[1125][]&&
[1126][]&&
[1127][]&&
[1128][]&&
[1129][]&&
[1130][]&&
[1131][]&&
[1132][]&&
[1133][]&&
[1134][]&&
[1135][]&&
[1136][]&&
[1137][]&&
[1138][]&&
[1139][]&&
[1140][]&&
[1141][]&&
[1142][]&&
[1143][]&&
[1144][]&&
[1145][]&&
[1146][]&&
[1147][]&&
[1148][]&&
[1149][]&&
[1150][]&&
[1151][]&&
[1152][]&&
[1153][]&&
[1154][]&&
[1155][]&&
[1156][]&&
[1157][]&&
[1158][]&&
[1159][]&&
[1160][]&&
[1161][]&&
[1162][]&&
[1163][]&&
[1164][]&&
[1165][]&&
[1166][]&&
[1167][]&&
[1168][]&&
[1169][]&&
[1170][]&&
[1171][]&&
[1172][]&&
[1173][]&&
[1174][]&&
[1175][]&&
[1176][]&&
[1177][]&&
[1178][]&&
[1179][]&&
[1180][]&&
[1181][]&&
[1182][]&&
[1183][]&&
[1184][]&&
[1185][]&&
[1186][]&&
[1187][]&&
[1188][]&&
[1189][]&&
[1190][]&&
[1191][]&&
[1192][]&&
[1193][]&&
[1194][]&&
[1195][]&&
[1196][]&&
[1197][]&&
[1198][]&&
[1199][]&&
[1200][]&&
[1201][]&&
[1202][]&&
[1203][]&&
[1204][]&&
[1205][]&&
[1206][]&&
[1207][]&&
[1208][]&&
[1209][]&&
[1210][]&&
[1211][]&&
[1212][]&&
[1213][]&&
[1214][]&&
[1215][]&&
[1216][]&&
[1217][]&&
[1218][]&&
[1219][]&&
[1220][]&&
[1221][]&&
[1222][]&&
[1223][]&&
[1224][]&&
[1225][]&&
[1226][]&&
[1227][]&&
[1228][]&&
[1229][]&&
[1230][]&&
[1231][]&&
[1232][]&&
[1233][]&&
[1234][]&&
[1235][]&&
[1236][]&&
[1237][]&&
[1238][]&&
[1239][]&&
[1240][]&&
[1241][]&&
[1242][]&&
[1243][]&&
[1244][]&&
[1245][]&&
[1246][]&&
[1247][]&&
[1248][]&&
[1249][]&&
[1250][]&&
[1251][]&&
[1252][]&&
[1253][]&&
[1254][]&&
[1255][]&&
[1256][]&&
[1257][]&&
[1258][]&&
[1259][]&&
[1260][]&&
[1261][]&&
[1262][]&&
[1263][]&&
[1264][]&&
[1265][]&&
[1266][]&&
[1267][]&&
[1268][]&&
[1269][]&&
[1270][]&&
[1271][]&&
[1272][]&&
[1273][]&&
[1274][]&&
[1275][]&&
[1276][]&&
[1277][]&&
[1278][]&&
[1279][]&&
[1280][]&&
[1281][]&&
[1282][]&&
[1283][]&&
[1284][]&&
[1285][]&&
[1286][]&&
[1287][]&&
[1288][]&&
[1289][]&&
[1290][]&&
[1291][]&&
[1292][]&&
[1293][]&&
[1294][]&&
[1295][]&&
[1296][]&&
[1297][]&&
[1298][]&&
[1299][]&&
[1300][]&&
[1301][]&&
[1302][]&&
[1303][]&&
[1304][]&&
[1305][]&&
[1306][]&&
[1307][]&&
[1308][]&&
[1309][]&&
[1310][]&&
[1311][]&&
[1312][]&&
[1313][]&&
[1314][]&&
[1315][]&&
[1316][]&&
[1317][]&&
[1318][]&&
[1319][]&&
[1320][]&&
[1321][]&&
[1322][]&&
[1323][]&&
[1324][]&&
[1325][]&&
[1326][]&&
[1327][]&&
[1328][]&&
[1329][]&&
[1330][]&&
[1331][]&&
[1332][]&&
[1333][]&&
[1334][]&&
[1335][]&&
[1336][]&&
[1337][]&&
[1338][]&&
[1339][]&&
[1340][]&&
[1341][]&&
[1342][]&&
[1343][]&&
[1344][]&&
[1345][]&&
[1346][]&&
[1347][]&&
[1348][]&&
[1349][]&&
[1350][]&&
[1351][]&&
[1352][]&&
[1353][]&&
[1354][]&&
[1355][]&&
[1356][]&&
[1357][]&&
[1358][]&&
[1359][]&&
[1360][]&&
[1361][]&&
[1362][]&&
[1363][]&&
[1364][]&&
[1365][]&&
[1366][]&&
[1367][]&&
[1368][]&&
[1369][]&&
[1370][]&&
[1371][]&&
[1372][]&&
[1373][]&&
[1374][]&&
[1375][]&&
[1376][]&&
[1377][]&&
[1378][]&&
[1379][]&&
[1380][]&&
[1381][]&&
[1382][]&&
[1383][]&&
[1384][]&&
[1385][]&&
[1386][]&&
[1387][]&&
[1388][]&&
[1389][]&&
[1390][]&&
[1391][]&&
[1392][]&&
[1393][]&&
[1394][]&&
[1395][]&&
[1396][]&&
[1397][]&&
[1398][]&&
[1399][]&&
[1400][]&&
[1401][]&&
[1402][]&&
[1403][]&&
[1404][]&&
[1405][]&&
[1406][]&&
[1407][]&&
[1408][]&&
[1409][]&&
[1410][]&&
[1411][]&&
[1412][]&&
[1413][]&&
[1414][]&&
[1415][]&&
[1416][]&&
[1417][]&&
[1418][]&&
[1419][]&&
[1420][]&&
[1421][]&&
[1422][]&&
[1423][]&&
[1424][]&&
[1425][]&&
[1426][]&&
[1427][]&&
[1428][]&&
[1429][]&&
[1430][]&&
[1431][]&&
[1432][]&&
[1433][]&&
[1434][]&&
[1435][]&&
[1436][]&&
[1437][]&&
[1438][]&&
[1439][]&&
[1440][]&&
[1441][]&&
[1442][]&&
[1443][]&&
[1444][]&&
[1445][]&&
[1446][]&&
[1447][]&&
[1448][]&&
[1449][]&&
[1450][]&&
[1451][]&&
[1452][]&&
[1453][]&&
[1454][]&&
[1455][]&&
[1456][]&&
[1457][]&&
[1458][]&&
[1459][]&&
[1460][]&&
[1461][]&&
[1462][]&&
[1463][]&&
[1464][]&&
[1465][]&&
[1466][]&&
[1467][]&&
[1468][]&&
[1469][]&&
[1470][]&&
[1471][]&&
[1472][]&&
[1473][]&&
[1474][]&&
[1475][]&&
[1476][]&&
[1477][]&&
[1478][]&&
[1479][]&&
[1480][]&&
[1481][]&&
[1482][]&&
[1483][]&&
[1484][]&&
[1485][]&&
[1486][]&&
[1487][]&&
[1488][]&&
[1489][]&&
[1490][]&&
[1491][]&&
[1492][]&&
[1493][]&&
[1494][]&&
[1495][]&&
[1496][]&&
[1497][]&&
[1498][]&&
[1499][]&&
[1500][]&&
[1501][]&&
[1502][]&&
[1503][]&&
[1504][]&&
[1505][]&&
[1506][]&&
[1507][]&&
[1508][]&&
[1509][]&&
[1510][]&&
[1511][]&&
[1512][]&&
[1513][]&&
[1514][]&&
[1515][]&&
[1516][]&&
[1517][]&&
[1518][]&&
[1519][]&&
[1520][]&&
[1521][]&&
[1522][]&&
[1523][]&&
[1524][]&&
[1525][]&&
[1526][]&&
[1527][]&&
[1528][]&&
[1529][]&&
[1530][]&&
[1531][]&&
[1532][]&&
[1533][]&&
[1534][]&&
[1535][]&&
[1536][]&&
[1537][]&&
[1538][]&&
[1539][]&&
[1540][]&&
[1541][]&&
[1542][]&&
[1543][]&&
[1544][]&&
[1545][]&&
[1546][]&&
[1547][]&&
[1548][]&&
[1549][]&&
[1550][]&&
[1551][]&&
[1552][]&&
[1553][]&&
[1554][]&&
[1555][]&&
[1556][]&&
[1557][]&&
[1558][]&&
[1559][]&&
[1560][]&&
[1561][]&&
[1562][]&&
[1563][]&&
[1564][]&&
[1565][]&&
[1566][]&&
[1567][]&&
[1568][]&&
[1569][]&&
[1570][]&&
[1571][]&&
[1572][]&&
[1573][]&&
[1574][]&&
[1575][]&&
[1576][]&&
[1577][]&&
[1578][]&&
[1579][]&&
[1580][]&&
[1581][]&&
[1582][]&&
[1583][]&&
[1584][]&&
[1585][]&&
[1586][]&&
[1587][]&&
[1588][]&&
[1589][]&&
[1590][]&&
[1591][]&&
[1592][]&&
[1593][]&&
[1594][]&&
[1595][]&&
[1596][]&&
[1597][]&&
[1598][]&&
[1599][]&&
[1600][]&&
[1601][]&&
[1602][]&&
[1603][]&&
[1604][]&&
[1605][]&&
[1606][]&&
[1607][]&&
[1608][]&&
[1609][]&&
[1610][]&&
[1611][]&&
[1612][]&&
[1613][]&&
[1614][]&&
[1615][]&&
[1616][]&&
[1617][]&&
[1618][]&&
[1619][]&&
[1620][]&&
[1621][]&&
[1622][]&&
[1623][]&&
[1624][]&&
[1625][]&&
[1626][]&&
[1627][]&&
[1628][]&&
[1629][]&&
[1630][]&&
[1631][]&&
[1632][]&&
[1633][]&&
[1634][]&&
[1635][]&&
[1636][]&&
[1637][]&&
[1638][]&&
[1639][]&&
[1640][]&&
[1641][]&&
[1642][]&&
[1643][]&&
[1644][]&&
[1645][]&&
[1646][]&&
[1647][]&&
[1648][]&&
[1649][]&&
[1650][]&&
[1651][]&&
[1652][]&&
[1653][]&&
[1654][]&&
[1655][]&&
[1656][]&&
[1657][]&&
[1658][]&&
[1659][]&&
[1660][]&&
[1661][]&&
[1662][]&&
[1663][]&&
[1664][]&&
[1665][]&&
[1666][]&&
[1667][]&&
[1668][]&&
[1669][]&&
[1670][]&&
[1671][]&&
[1672][]&&
[1673][]&&
[1674][]&&
[1675][]&&
[1676][]&&
[1677][]&&
[1678][]&&
[1679][]&&
[1680][]&&
[1681][]&&
[1682][]&&
[1683][]&&
[1684][]&&
[1685][]&&
[1686][]&&
[1687][]&&
[1688][]&&
[1689][]&&
[1690][]&&
[1691][]&&
[1692][]&&
[1693][]&&
[1694][]&&
[1695][]&&
[1696][]&&
[1697][]&&
[1698][]&&
[1699][]&&
[1700][]&&
[1701][]&&
[1702][]&&
[1703][]&&
[1704][]&&
[1705][]&&
[1706][]&&
[1707][]&&
[1708][]&&
[1709][]&&
[1710][]&&
[1711][]&&
[1712][]&&
[1713][]&&
[1714][]&&
[1715][]&&
[1716][]&&
[1717][]&&
[1718][]&&
[1719][]&&
[1720][]&&
[1721][]&&
[1722][]&&
[1723][]&&
[1724][]&&
[1725][]&&
[1726][]&&
[1727][]&&
[1728][]&&
[1729][]&&
[1730][]&&
[1731][]&&
[1732][]&&
[1733][]&&
[1734][]&&
[1735][]&&
[1736][]&&
[1737][]&&
[1738][]&&
[1739][]&&
[1740][]&&
[1741][]&&
[1742][]&&
[1743][]&&
[1744][]&&
[1745][]&&
[1746][]&&
[1747][]&&
[1748][]&&
[1749][]&&
[1750][]&&
[1751][]&&
[1752][]&&
[1753][]&&
[1754][]&&
[1755][]&&
[1756][]&&
[1757][]&&
[1758][]&&
[1759][]&&
[1760][]&&
[1761][]&&
[1762][]&&
[1763][]&&
[1764][]&&
[1765][]&&
[1766][]&&
[1767][]&&
[1768][]&&
[1769][]&&
[1770][]&&
[1771][]&&
[1772][]&&
[1773][]&&
[1774][]&&
[1775][]&&
[1776][]&&
[1777][]&&
[1778][]&&
[1779][]&&
[1780][]&&
[1781][]&&
[1782][]&&
[1783][]&&
[1784][]&&
[1785][]&&
[1786][]&&
[1787][]&&
[1788][]&&
[1789][]&&
[1790][]&&
[1791][]&&
[1792][]&&
[1793][]&&
[1794][]&&
[1795][]&&
[1796][]&&
[1797][]&&
[1798][]&&
[1799][]&&
[1800][]&&
[1801][]&&
[1802][]&&
[1803][]&&
[1804][]&&
[1805][]&&
[1806][]&&
[1807][]&&
[1808][]&&
[1809][]&&
[1810][]&&
[1811][]&&
[1812][]&&
[1813][]&&
[1814][]&&
[1815][]&&
[1816][]&&
[1817][]&&
[1818][]&&
[1819][]&&
[1820][]&&
[1821][]&&
[1822][]&&
[1823][]&&
[1824][]&&
[1825][]&&
[1826][]&&
[1827][]&&
[1828][]&&
[1829][]&&
[1830][]&&
[1831][]&&
[1832][]&&
[1833][]&&
[1834][]&&
[1835][]&&
[1836][]&&
[1837][]&&
[1838][]&&
[1839][]&&
[1840][]&&
[1841][]&&
[1842][]&&
[1843][]&&
[1844][]&&
[1845][]&&
[1846][]&&
[1847][]&&
[1848][]&&
[1849][]&&
[1850][]&&
[1851][]&&
[1852][]&&
[1853][]&&
[1854][]&&
[1855][]&&
[1856][]&&
[1857][]&&
[1858][]&&
[1859][]&&
[1860][]&&
[1861][]&&
[1862][]&&
[1863][]&&
[1864][]&&
[1865][]&&
[1866][]&&
[1867][]&&
[1868][]&&
[1869][]&&
[1870][]&&
[1871][]&&
[1872][]&&
[1873][]&&
[1874][]&&
[1875][]&&
[1876][]&&
[1877][]&&
[1878][]&&
[1879][]&&
[1880][]&&
[1881][]&&
[1882][]&&
[1883][]&&
[1884][]&&
[1885][]&&
[1886][]&&
[1887][]&&
[1888][]&&
[1889][]&&
[1890][]&&
[1891][]&&
[1892][]&&
[1893][]&&
[1894][]&&
[1895][]&&
[1896][]&&
[1897][]&&
[1898][]&&
[1899][]&&
[1900][]&&
[1901][]&&
[1902][]&&
[1903][]&&
[1904][]&&
[1905][]&&
[1906][]&&
[1907][]&&
[1908][]&&
[1909][]&&
[1910][]&&
[1911][]&&
[1912][]&&
[1913][]&&
[1914][]&&
[1915][]&&
[1916][]&&
[1917][]&&
[1918][]&&
[1919][]&&
[1920][]&&
[1921][]&&
[1922][]&&
[1923][]&&
[1924][]&&
[1925][]&&
[1926][]&&
[1927][]&&
[1928][]&&
[1929][]&&
[1930][]&&
[1931][]&&
[1932][]&&
[1933][]&&
[1934][]&&
[1935][]&&
[1936][]&&
[1937][]&&
[1938][]&&
[1939][]&&
[1940][]&&
[1941][]&&
[1942][]&&
[1943][]&&
[1944][]&&
[1945][]&&
[1946][]&&
[1947][]&&
[1948][]&&
[1949][]&&
[1950][]&&
[1951][]&&
[1952][]&&
[1953][]&&
[1954][]&&
[1955][]&&
[1956][]&&
[1957][]&&
[1958][]&&
[1959][]&&
[1960][]&&
[1961][]&&
[1962][]&&
[1963][]&&
[1964][]&&
[1965][]&&
[1966][]&&
[1967][]&&
[1968][]&&
[1969][]&&
[1970][]&&
[1971][]&&
[1972][]&&
[1973][]&&
[1974][]&&
[1975][]&&
[1976][]&&
[1977][]&&
[1978][]&&
[1979][]&&
[1980][]&&
[1981][]&&
[1982][]&&
[1983][]&&
[1984][]&&
[1985][]&&
[1986][]&&
[1987][]&&
[1988][]&&
[1989][]&&
[1990][]&&
[1991][]&&
[1992][]&&
[1993][]&&
[1994][]&&
[1995][]&&
[1996][]&&
[1997][]&&
[1998][]&&
[1999][]&&
[2000][]&&
Copyright (C) .cn,
Tianjin ENORTH NETNEWS Co.,LTD.All rights reserved
本网站由天津北方网股份有限公司版权所有巨集程式 & SAS博客列表
原文載點:這篇技術文件主要是在介紹在進行中介分析(mediator analysis)時,如何用拔靴法(bootstrap)計算effect size及其信賴區間。作者並提供了一個巨集程式供其他使用者方便使用。首先簡單描述一下中介效應。假設Y是依變數而X是應變數,則X對Y的直接效應關係可以用c來表示,但另外有一個間接效應關係是要經過一個中介變數M,用axb來表示,其中a是X對M的影響,而b是M對Y的影響。因此這張圖可以用下面這兩個模型來描述:(PS) 應當還有Y=bM本文原作者採用Fairchild et al. (2009)*的R-square法來計算effect size:其中,等號右邊那三個R-square依序是Y=bM, Y=bM+cX以及Y=cX的R-square。然後採用拔靴法來計算信賴區間,並且用一個名為%CI_MEDIATE的巨集程式來計算。這個巨集程式包含了下面幾個參數:dataset: 資料名稱y: 依變數Y的名稱x: 應變數X的名稱m: 中介變數M的名稱nboot: 拔靴法進行的迴圈數,預設值5000,若不用預設值的話,若數值不滿1000的話,程式會自動補足跑滿1000次c_i: 信賴區間的長度,從1到99,預設值是95巨集程式的原始碼請參照原文。原文提供了一個含有12個樣本數的小範例:假設要跑10000次的拔靴法,並且計算effect size的99%信賴區間,則巨集程式可以寫成:%CI_MEDIATE(dataset = example, y=outcome, x=predictor, m=mediator, nboot=10000, c_i=99);結果如下:從結果得知,此中介分析的effect size = -0.0105,而其99%的信賴區間為(-0.8)。原文後面還有進行一連串的模擬分析來驗證這個計算的精確度,在此不詳加描述。* Fairchild, A. J., MacKinnon, D. P., Taborga, M. P., & Taylor, A. B. (2009). R2 effect-size measures for mediation analysis. Behavior Research Methods, 41, 486-498.CONTACT INFORMATION&Your comments and questions are valued and encouraged. Contact the first author at:Merlande Petit-BoisUniversity of South FloridaEast Fowler Ave., EDU 105Tampa, FL 33620 SWork Phone: (813) 974-4933Fax: (813) 974-Email: mpetitbo@usf.edu
原文載點:Effect size是一種量化兩個或多個變數間關係的測度。在許多臨床試驗裡面都需要這個數據。不同的研究設計需要不同種類的Effect size,其中又以Cohen's d統計量最為流行,因為他是專門用在下面這三種的研究:(1)兩個獨立群組的試後比較; (2)一個群組內的試前試後比較; (3)兩個獨立群組的試前試後差異比較。由於SAS沒有內建任何的程序來計算Effect size,所以通常需要去找線上的計算器或者自己用Excel試算表去計算。但其實Cohen's d的公式相當簡單,裡面只有用到三種元素:各組樣本,各組平均數,各組標準差。所以我在算Cohen's d時都是自己先用PROC MEANS去算出那三個元素,然後再用PROC IML去算。2012年的SESUG發表了一篇技術文件,由兩個南佛大的人公布了一個計算Cohen's d的SAS巨集程式。這個巨集程式名為%effect_size,其共同使用下面這幾個參數:data: SAS資料名idvar: ID變數名groupvar: 群組變數名(必須先定義為1, 2)。若只有一組,則留空白timevar: 時間變數名(例如:visit=1是試前, visit=2是試後),若無則留空白respvars: 受測的反應變數(必須是連續型數值變數),如果有多個則用空白分開timevar1: 時間變數中代表"試前"的數字timevar2: 時間變數中代表"試後"的數字cl: 信賴區間%,若是要計算95%CI,則填入0.95有一個選擇性的參數為:design: 用於單一群組試前試後比較。1表示使用所使用的部分資料如下:其中,ID是受測者的編號,GROUP=1是實驗組,GROUP=2是對照組,VISIT=1是試前,VISIT=2是試後,而PCL, BSI, TRGI是三種不同的實驗反應變數。設計一:獨立兩群組試後比較若只單純比較兩組的試後反應變數差異,則其Cohen's d可從下面這個公式計算出來:其中分子是兩組的平均差,分母是兩組混合後的標準差,公式如下:Cohen's d的信賴區間公式如下:其中,Cohen's d統計量的標準差公式為:程式範例如下:設計二:單一群組試前試後比較設計二的Cohen's d公式與設計一相同,但分子變成是試後平均和試前平均的差異,分母的混合標準差變成:至於95%CI計算時需要用到的Cohen's d統計量的標準差則是:其中r12是試前與試後的相關係數。不過在使用這個巨集程式時,則多了一個design參數來讓使用者選擇要(1)直接用原始數據來算混合標準差或者是(2)用試後減掉試前的差異來算混合標準差。程式範例如下:設計三:獨立兩群組試前試後差異比較此設計的Cohen's d公式如下:同樣在這個設計下可以選用原始數據來算混合標準差(design=1)或者是用試後減掉試前的差異來算混合標準差(design=2)。程式範例如下:原文僅以設計二跑了一次範例資料,結果如下:%effect_size的原始程式可詳見原文的p7-p11。Contact Information&Rajendra Kadel, Ph. D. Candidate of BiostatisticsUniversity of South FloridaCollege of Public Health13201 Bruce B Downs, MDC56 Tampa, Florida 33612rkadel@health.usf.eduKevin E. Kip, Ph.D., FAHAProfessor and Executive Director, Research Center,University of South FloridaCollege of Nursing12901 Bruce B. Downs Blvd. Tampa, FL kkip@health.usf.edu
原文載點:/proceedings/forum8.pdf在配對分析裡面,McNemar's test一直是主要被拿來使用的統計分析,但這個方法有個先天上的限制是只支援二項資料。一旦資料成為多項資料時,就必須使用Generalized McNemar's test (或稱Stuart-Maxwell test)或者是Bhapkar's test。其中,Bhapkar's test是有被SAS/STAT內的程序所支援,但Generalized McNemar's test則無。Xuezheng Sun和Zhao Yang在2008年發表了一篇技術文件裡面,敘述了如何使用既有的SAS程序來執行Bhapkar's test,並且公佈了一個自製的巨集程式來執行Generalized McNemar's test。McNemar's test主要分析2X2的列連表,不過一旦列連表擴展為rXr (r&2)的格式,則McNemar's test就不能使用:以下使用這個列連表當作範例:資料輸入如下:執行巨集方法如下:(a) Generalized McNemar's test語法如下:%gMcNemart(dsin = , rowv =, colv = , count = );。dsin = SAS資料名稱。rowv = 行變數名。colv = 列變數名。count = 個數變數名稱使用方法如下:%gMcNemar(dsin = Vision, rowv = r, colv = c, count = count);輸出報表如下:其中PROBCHI下面那個數字就是p-value,因此這個例子顯示出p-value =0.0007 & 0.05,可以結論出左眼跟右眼的測量結果並沒有一致性。這個巨集的原始碼可至原文載點內取得。(b) Bhapkar's test這個方法可以在PROC CATMOD程序能完成:執行後會得到一個很短的輸出報表:在vis後面那個p-value就是答案。跟用%gMcNemar巨集的結果其實是差不多的。根據本人使用心得,基本上兩個方法都不錯用,但如果因為樣本稀少導致某些行或列裡面的個數全部都是0的話,則運行結果會有點問題。由於PROC CATMOD已經是編譯後的程式,所以不能去改內部的原始碼,所以必須從%gMcNemar這個巨集程式來著手。我打算有空改寫%gMcNemar來解決這個問題,若投稿到SAS Global Forum有獲得刊登的話再來分享給大家。CONTACT INFORMATIONYour comments and questions are valued and encouraged. Contact the authors at:Xuezheng SunDepartment of Epidemiology & Biostatistics,University of South CarolinaColumbia, SC 29208803-777-8907E-mail: sun4@mailbox.sc.eduZhao YangPremier Research Group plc.1800 Parkway Place, Suite 820Marietta, GA 30067, USA678-279-4848E-mail: tonyyangsxz@gmail.edu
Cox PH 模型在倖存分析(survival analysis)被廣泛的使用。一篇發表在SAS GLOBAL FORUM 2009的技術文件解說了在 SAS 底下如何用 Cox PH 模型來計算一些重要估計量的方法,並且提供一個方便的巨集程式來簡化繁複的程式寫作和運行。C-indexC-index原本是在ROC curve裡面用來解釋預測鑒別能力的測量指標,但後來在Cox PH model裡也可以應用。在倖存分析裡,C-index可以解釋為一個機率,是從某個事件(如:死亡)來的一個病人,他會比非該事件內的任何一個病人都擁有較高的機會會發生該事件。以下列程式來說明如何用 SAS 算出 C-index:proc phreg data=
model combdays*combfv(0)=
output out=obs survival=這個PROC PHREG程序並沒有什麼特別,使用者唯一需要額外做的就是利用一個ODS OUTPUT指令把個體的ID, 觀測到的倖存時間以及倖存函數估計值另存一個新檔(ods)。接著,用下面兩到程序去整理出一個concordance data。
create table allset as
select idn_j, y_j, x_j, idn as idn_i, surv as y_i, combdays as x_i
from evtset, obs
where idn_j&&
if (x_iy_j) or (x_i&x_j and y_i<y_j) code="" concord="1;" else=""然後用下面這一串程式直接把C-index及其95%信賴區間該算出來:data _null_;
set concord end=
if concord=1 then nch+1;
if concord=0 then ndh+1;
call symput('ch',trim(left(nch)));
call symput('dh',trim(left(ndh)));
call symput('uspairs',trim(left(_n_)));data _null_;
set sample end=
if eof=1 then call symput('totobs',trim(left(_n_)));%put &ch &dh &uspairs &
ch=input("&ch",12.0);
dh=input("&dh",12.0);
uspairs=input("&uspairs",12.0);
totobs=input("&totobs",10.0);
pc=ch/(totobs*(totobs-1));
pd=dh/(totobs*(totobs-1));
c_hat=pc/(pc+pd);
w=(2*1.96**2)/(totobs*(pc+pd));
low_ci_w=((w+2*c_hat)/(2*(1+w)))-(sqrt((w**2+4*w*c_hat*(1-c_hat))/(2*(1+w))));
upper_ci_w=((w+2*c_hat)/(2*(1+w)))+(sqrt((w**2+4*w*c_hat*(1-c_hat))/(2*(1+w))));結果如下圖所示: Calculating adjusted survival rates using corrected group prognosis method作者自製了一段巨集程式 %CGPM_adj 可將倖存機率以及倖存曲線圖直接輸出。其原始碼如下:*****************************************************************************;* Program: CGPM_adj.* Purpose: Calculate the unadjusted and adjusted survival rates and plot the*survival curves using corrected gr*****************************************************************************;*----------------------------------------------------------------------------;* 1. All variables used in the model have to be binary variable.*Categorical and numeric variables need to be re-coded as dummy*variable to m* 2. The maximum number of variables in the model is limited to 20;*(not including the control variable). But this number can be*easily expanded as needed.;* 3. The analysis dataset for modeling was assign to be in SAS*default library WORK. ;*----------------------------------------------------------------------------;%macro CGPM_adj(outputpath, figname, tbname, dsn, covars, ctrlvar, outcom, cnsrval=0, timevar, rlalpha=0.05);*----------------------------------------------------------------------------;* Calculate unad*----------------------------------------------------------------------------;*create dataset for
create table ctrlset as
select distinct &ctrlvar
order by &*get the unadjusted survival rates forproc phreg data=&
model &timevar * &outcom (&cnsrval) = &
baseline covariates=ctrlset out=unadjset survival=survival /*----------------------------------------------------------------------------;* Calculate adjusted survival rates using corrected gr*----------------------------------------------------------------------------;*create identifier set for all possible combindata _null_;
cnt=1+count("&covars",' ');
call symputx('varcnt', cnt);%put &%
%do %until(%scan(&covars,&i,' ')=%str());
%let varnam=%scan(&covars,&i,' ');
if &varnam=1 then substr(idx,xp,1)=1;
%let i=%eval(&i+1);
%do %until(%scan(&covars,&i,' ')=%str());
%let varnam=%scan(&covars,&i,' ');
if substr(idx,xp,1)='1' then &varnam=1; else &varnam=0;
%let i=%eval(&i+1);
idx=left(put(10**(input("&varcnt",2.0)),21.));
keep idx &ctrlvar &covars &timevar &proc freq data=
tables idx / out=data popset (drop=percent xp);
if _n_=1 then do until(last);
set idx end=
&ctrlvar=0;
&ctrlvar=1;
%ods output censoredsummary=censum parameterEstimates=proc phreg data=
model &timevar * &outcom (&cnsrval) = &ctrlvar &covars / rl alpha=&
baseline covariates=popset out=adjset0 survival=survival /proc sort data=popset out=count (keep=idx count);proc sort data=adjset0;data adjset1;
merge adjset0proc sort data=adjset1;
by &ctrlvar &
set adjset1;
by &ctrlvar &
if first.&timevar then frqsum=0;
if first.&timevar then sursum=0;
sursum+survival*
adjsurv=sursum/
keep &ctrlvar &
length group $22;
set adjset (in=a rename=(adjsurv=survival)) unadjset (in=b);
if a=1 and &ctrlvar=0 then group='Adjusted'||' '||"&ctrlvar"||'=0';
else if a=1 and &ctrlvar=1 then group='Adjusted'||' '||"&ctrlvar"||'=1';
else if b=1 and &ctrlvar=0 then group='Unadjusted'||''||"&ctrlvar"||'=0';
else if b=1 and &ctrlvar=1 then group='Unadjusted'||''||"&ctrlvar"||'=1';
eventrate=1-
if last.*----------------------------------------------------------------------------;* You can change the code below to modify the title and graph axis scale etc.;*----------------------------------------------------------------------------;goption reset=all device=emf gsfname=grfa hsize=6.0 vsize=4 ftext='Arial/bo' htext=11filename grfa "&outputpath.\&figname..emf";symbol1 i=steplj v=none l=1 ci=green w=1;symbol2 i=steplj v=none l=1 ci=black w=1;symbol3 i=steplj v=none l=3 ci=green w=1;symbol4 i=steplj v=none l=3 ci=black w=1;axis1 offset=(0.5 cm,0.5 cm);axis2 label=(angle=90 j=c 'Survival') order=(0.8 to 1 by 0.05) offset=(0.0cm,0.0 cm);
legend1 across=2
mode=share
position=(bottom left inside)
label=none
value=(j=l h=10pt)
offset=(0.5cm, 0cm);proc gplot data=
plot survival * &timevar = group / legend=legend1 haxis=axis1 vaxis=axis2;
label eventrate='Survival Rate' &timevar='Days After Randomization';ods rtf style=journal file="&outputpath.\&tbname..rtf" bodytitlestartpage=proc print data=title "Analysis of Maximum Likelihood Estimates (alpha=&rlalpha for CI)";proc print data=var groutitle 'Estimated survival and event rates at the time of last event observed';%巨集參數定義如下:outputpath=報表與圖形輸出的路徑&figname=圖形檔名tbname=報表檔名dsn=存放在SAS裡面的資料檔名covars=所有預測變數的名稱,不包含控制變數的名稱ctrlvar=控制變數的名稱outcom=輸出變數(事件)的名稱cnsrval=設限的代碼,預設值為0timevar=時間變數名稱rlalpha=顯著水準alpha,預設值為0.05承上面的範例,巨集程式執行的寫法如下:%CGPM_adj(outputpath=L:\SGF2009\Examples,
figname=Adjdiab_fig,
tbname=adjdiab_summary,
dsn=sample,
covars=age65 lowef chfhx,
ctrlvar=diabhx,
outcom=deathfv,
cnsrval=0,
timevar=deathdays,
rlalpha=0.05);結果如下:Presenting the effect of a continuous covariate on estimated survival當模型內包含連續型變數時,需要額外多兩個步驟來計算n-year倖存率。首先,用PROC PHREG程序把基底函數(baseline function)等一干相關的估計量另存成兩個新檔 yrout & sample(紅色部分):proc phreg data=model combdays*combfv(0)=baseline out=yrout lower=low_ci upper=up_ci survival=surv covariates=sample/alpha=0.05再依照想要分類的變數(male),去和倖存時間變數去排序(combdays)後再另存新檔(maxday):proc sort data=sample out=maxday (where=(combfv=1) keep=idn male combfv combdays);
然後利用下面兩個資料步驟程序去計算男人和女人的5-year倖存率:data _null_;
if male=0 and last.male then call symput('lastday_f',combdays);
if male=1 and last.male then call symput('lastday_m',combdays);%put &lastday_f &lastday_m;
evtrate=(1-surv)*100;
evtlow=(1-low_ci)*100;
evtup=(1-up_ci)*100;
if combdays=&lastday_m and male=1
if combdays=&lastday_f and male=0最後畫出的圖形如下所示:(PS) 原文內並沒有附此圖的繪製程式。Contact information Lea Liu, &Maryland Medical Research Institute600 Wyndhurst Ave. Baltimore, MD 21210(410) 435-4200, &Email: lliu@mmri.org, &Web: www.mmri.org
原文載點:身為一個專門從事空間時間序列分析的學者我來講,每天跟不同的地圖奮鬥是很稀鬆平常的是。目前市面上最熱門的地圖分析軟體莫過於ArcGIS,但這套軟體僅提供有限的分析方法,而其主要的功能僅僅就是繪製地圖而已。如果你用了別的軟體進行分析,就必須要將結果另存新檔,然後把結果跟地圖檔一起輸入到ArcGIS裡面才能開始繪圖。想當然爾,這裡面也沒有太多強大的資料整理功能,所以一切的一切都還是要經過另外的軟體將資料結果整理好才行。如果分析和繪製地圖的動作可以一次在SAS裡面完成的話將會省下許多時間和精力。NESUG 2007年有一篇教學文件,提供一些在SAS繪製地圖的資訊。PROC MAPIMPORT這是SAS專門用來輸入地圖資料的語法,不過必須先知道去哪裡可以找到地圖資料。以下是作者列出的幾個不錯的網頁資源:(1) ESRI (a GIS software company)(2)&US Census Bureau(3)&CDC (Centers for Disease Control)(4) CIP (International Potato Center, part of the Consultative Group on International Agricultural Research)其中,ESRI 就是 ArcGIS 的母公司,而美國地圖大都可以在 US Census Bureau 的網站上免費下載。CDC 的網站則是可以下載一個名叫Epi Info的軟體,裡面除了有地圖外還有其他的流病資料。CIP 的網站則是除了地圖以外還提供氣候資料。個人的經驗是 US Census Bureau 網站就足夠提供所有需要使用美國資料來進行研究的地圖。如果想進行台灣的研究,則可以到交通部的運研所下載:如果要別的國家的地圖資料,有兩個網站可以下載:接下來的範例是用北卡(North Carolina)的資料畫地圖。先去 US Census Bureau 找北卡的 shape 檔:North Carolina -&&(1,672,705 bytes)解壓縮後存在自定目錄,然後執行下列程式:/*Version 9.1 */proc mapimport & & & &datafile="path/zt37_d00.shp" & & & &out=mymap91;/* Version 9.2 */& & & &datafile="path/zt37_d00.shp" & & & &out=mymap92;& & & &記得把上面的 path 改為自己的路徑。如此一來 SAS 就可以把 shapefile 裡面的資料都輸入進去。MAPSONLINE&這是 SAS 官網提供的線上工具,裡面也有地圖資料和一些其他資訊。網址如下:重點是如果你不小心把 sashelp 資料庫裡面一個叫做 ZIPCODE 的檔案刪掉的話,可以去上面這個網址重新下載,因為這個資料裡面包含美國所有的地理資訊,要畫美國地圖一定得連結到這個檔案。裡面還有一個很威的資料名為 WORLDCTS,包含全世界各大城市的基本資料,可以到這個連結直接下載:CHOOSING MAP COLORS在繪製地圖時,定義顏色是相當重要的一件事情。如何讓地圖上的顏色不會眼花撩亂並且能夠使讀者一目了然,這已經無關統計分析能力,而是一門藝術了。SAS 裡面對於顏色的指定可以使用顏色本來的英文名稱、RGB值、HLS值以及HEX值。所有的定義都可以去 SAS TS-688 的網站去看:下面用一個簡單範例介紹:%let color1=lightgreen&; %let color2=cornsilk&;& &define style styles.& &parent=styles.& &style twocolorramp / startcolor=&color1 endcolor=&color2;& & DISTANCE CALCULATIONS計算點和點之間的距離是空間分析裡面的基本功,當知道兩個地點的經緯度(不知道的可以去用google map查詢)後,利用下面這個巨集程式便可輕鬆計算出來:%macro geodist(lat1,long1,lat2,long2);%let pi180=0.9433;& & *arsin(sqrt((sin((&pi180*&lat2-&pi180*&lat1)/2))**2+& & cos(&pi180*&lat1)*cos(&pi180*&lat2)*(sin((&pi180*&long2- & && & &pi180*&long1)/2))**2));%mend如果是做美國的地理研究,則只需要知道每個 county 的 ZIP code 即可。在SAS V9.2版裡面有一個 ZIPCITYDIST() 函式就是專門用來計算兩個 ZIP code 之間的距離。範例如下:%let zip1=27513;%let zip2=21202;/* latitude and longitude coordinates */create table zip1 as select * from sashelp.zipcode where zip=&zip1;create table zip2 as select * from sashelp.zipcode where zip=&zip2;select x into :long1 from zip1;select y into :lat1 from zip1;select x into :long2 from zip2;select y into :lat2 from zip2;%let city1=%sysfunc(zipcity(&zip1));%let city2=%sysfunc(zipcity(&zip2));/* two new 9.2 functions */%let zipdist=%sysfunc(zipcitydistance(&zip1,&zip2));%let geodist=%sysfunc(geodist(&lat1, &long1, &lat2, &long2, 'M'),comma10.5);GRAPHIC OVERLAYS上面這張圖是利用 PROC GCHART 畫好柱狀圖,然後用 PROC GMAP 畫好地圖,之後把柱狀圖疊在地圖上面。首先把地圖畫好:pattern v=me c=gray98;proc gmap data=maps.us (obs=1) map=maps.us all anno=region_& & && & & choro state / discrete nolegend coutline=gray98;再來把柱狀圖下面的文字設定好:axis1 label=('NEW ENGLAND' & & & &j=c '%CHANGE 48.7') ;axis2 label=('MIDDLE ATLANTIC' & &j=c '%CHANGE 21.1') ;axis3 label=('SOUTH ATLANTIC' & & j=c '%CHANGE 18.7') ;axis4 label=('WEST NORTH CENTRAL' j=c '%CHANGE 63.3') ;axis5 label=('EAST NORTH CENTRAL' j=c '%CHANGE 33.3') ;axis6 label=('EAST SOUTH CENTRAL' j=c '%CHANGE 48.4') ;axis7 label=('WEST SOUTH CENTRAL' j=c '%CHANGE 22.5') ;axis8 label=('MOUNTAIN' & & & & & j=c '%CHANGE 50.9') ;axis9 label=('PACIFIC' & & & & & &j=c '%CHANGE 23.9') ;axis10 order=0 to 20 by 5 label=none value=none style=0 major=none minor=其中,axis1~axis9 自然就是九個柱狀圖 X 軸的文字和統計數據(這自己另外算好先),而 axis10 則表示用來控制 axis1~axis9 的 Y 軸共同設定。然後依序畫出每張柱狀圖,以右上角的 New England 為例:proc gchart data=goptions horigin=8.75 in vorigin=6.75 in;where region eq 1;vbar time / type=mean discrete sumvar=x mean raxis=axis10 maxis=axis1;資料集 tpay 裡面因為有所有 region 的資料,所以要用一個 where statement 限制只使用 New England (region = 1) 的數據。而 raxis 和 maxis 就是設定 Y 軸和 X 軸的選項,所以把 axis10 和 axis1 分別填入。當要畫別區的柱狀圖時,只要把 maxis 後面的設定換掉即可。至於 goptions 則是用來控制柱狀圖出現的位置。這就必須自己一直更換不同的數據來看位置對不對。你也可以用一個巨集程式來簡化步驟:%macro bars(reg,h,v);goptions horigin=&h in vorigin=&where region eq &vbar time / type=mean discrete sumvar=x raxis=axis10 maxis=axis&%因此九張柱狀圖就可以用下面短短的程式碼一口氣完成:proc gchart data=%bars(1,8.75,6.45) %bars(2,7.75,4.90) %bars(3,7.50,3.00) %bars(4,4.00,5.00) %bars(5,6.00,4.25) %bars(6,6.10,2.50) %bars(7,4.00,1.85) %bars(8,1.95,4.20) %bars(9,0.00,2.00) 最後一個步驟就是要把這些柱狀圖疊到地圖上。我們先用 ODS 開一個空白的 pdf 檔:ods pdf file='z:\map_bars.pdf' notoc startpage=後面的 notoc 和 startpage 主要是抑制 pdf 檔的書籤出現以及讓所有圖形都出現在同一頁。然後進行 pdf 檔裡面的環境設定:goptions reset=all ftext='Helvetica/bo' htext=3.5 gunit=pct ctext=blue lfactor=3;這些都是來設定字形、字色還有字體大小。這樣就大功告成了。整個流程可以用下列四步驟來簡單描述:步驟一:用 GOPTIONS 進行圖形整體環境設定。步驟二:用 ODS 開啟一個空白的 pdf 檔。步驟三:用 PROC GMAP 畫地圖。步驟四:用 PROC GCHART 畫柱狀圖最後用 ODS CLOSE 把整個圖形打包起來。REFERENCES & RECOMMENDED READING以下是一些不錯的線上參考資料:CONTACT INFORMATIONYour comments and questions are valued and encouraged. &Contact the authors at:Robert AllisonLouise HaddenMike Zdeb
原文載點:哈佛的一位統計分析師分享了一個名為 %mcpower 的巨集程式,能夠輕鬆的完成在線性迴歸、羅吉斯迴歸以及卜瓦松迴歸的蒙地卡羅檢定力模擬與估計。%mcpower 主要包含 %glmpower 和 %manypower 兩個巨集程式。程式可從此處下載:其中,%glmpower 是無法直接被執行的,所有的參數都是定義在 %manypower 裡面,格式如下:%macro manypower(alt1=.,&alt2=.,&alt3=.,& & & & & & & & &n1=.,n2=.,n3=.,n4=.,n5=.,n6=.,n7=.,n8=.,n9=.,n10=.,& & & & & & & & &outcomedist = "NORMAL", null=0, scaley=1,& & & & & & & & &xdist="NORMAL", xloc=., xscale =.,& & & & & & & & &nreps=,plotrows=2, descending = desc, intercept = 0,& & & & & & & & &plotstyle=graphic, outputpower=YES, outputnsubs=YES, test=FALSE);不意外地,巨集變數很多,但因為模擬本來就是一件即為複雜的工作,所以參數多也是很正常的。這些參數主要可以分類為三大群:假設巨集變數:null:所要檢定之虛無假設的值。預設值為 0。alt1, alt2, alt3:所要檢定之對立假設(Ha)的數值。若是線性迴歸,則檢定的項目是斜率,若是羅吉斯迴歸,則檢定的項目是odds ratio。若是卜瓦松迴歸,則檢定的項目是risk ratio。無預設值。n1, n2, ..., n10:每個模擬資料集裡面的樣本個數。最多可設定十個。無預設值。分配巨集變數:outcomedist:依變數的分配。可填入 "NORMAL"、"BERNOULLI" 和 "POISSON"。預設值為 "NORMAL"。(注意,雙引號要寫上)scaley:殘差變異數。若使用線性迴歸(即outcomedist = "NORMAL"),則可以省略這個參數的設定。預設值為 1。intercept:模擬的模型裡面的截距項。預設值為 0。xdist:應變數的分配。預設值是 "NORMAL"。xloc:應變數分配的第一個參數值。若 xdist = "NORMAL" 時,此值表示平均數。若 xdist = "POISSON" 時,則此值表示 lambda。若 xdist = "BERNOULLI" 時,則此值表示 p。xscale:應變數分配的第二個參數值。若 xdist 為 "POISSON" 或 "BERNOULLI" 時,則此值要省略,因為這兩個分配只有一個參數值。若 xdist = "NORMAL" 時,則可設定變異數。輸出巨集變數:outputpower:輸出檢定力表格。預設值為 YES。outputnsubs:輸出樣本數表格。預設值為 YES。plotstyle:輸出表格的格式。如果設定為 sg,則圖形會用 PROC SGPLOT 程序來畫。如果設定為 graphic,則圖形會用 PROC GPLOT &來畫。如果沒有設定,則圖形就不會輸出。預設值為 graphic。plotrows:若 plotstyle = sg 時,則可設定圖形要有幾行。預設值為 2。範例:%manypower(null = 0, scaley=1,xdist = "bernoulli", xloc=.5, xscale=.,& & & & & &nreps = 100, n1=0,n3=0,n5=0,& & & & & &alt1 = 1.15, alt2 = 1.20, alt3 = 1.25,& & & & & &plotrows=2,plotstyle=graphic, outcomedist="poisson", intercept = 1);結果:CONTACT INFORMATIONYour comments and questions would be welcome and valued. &Contact the author at:Ken KleinmanHarvard Medical School and Harvard Pilgrim Health Care133 Brookline Ave.Boston, MA 02215ken.
原文載點:/resources/papers/proceedings10/201-2010.pdf在進行 mixed model 分析時,模型的檢定是相當重要但也是相當煩人的一環。幾位南卡大和南佛大的學者寫了一個巨集程式來簡化相關程式的寫作,雖然目前這個程式只能使用在 2-level model,但也是具有相當貢獻。這個名叫 %mixed_dx 的巨集程式如下所示:%mixed_dx (ModelI = ,& & & & & & & & & & Dims = ,& & & & & & & & & & solnF = ,& & & & & & & & & & solnR =,& & & & & & & & & & Level1 = ,& & & & & & & & & & Influence = ,& & & & & & & & & & min_nj = ,& & & & & & & & & & pr = ,& & & & & & & & & & GroupVar = );每個參數的設定如下:ModelI:讀取由ODS OUTPUT的ModelInfo選項所生成的包含所有模型資訊的資料Dims:讀取由ODS OUTPUT的Dimensions選項所生成的資料維度數據solnF:讀取由ODS OUTPUT的SolutionF選項所生成的固定效應參數估計值solnR:讀取由ODS OUTPUT的SolutionR選項所生成的隨機效應參數估計值Level1:讀取由model statement的outp選項所生成的Level-1殘差值資料Influence:讀取由model statement的influence選項所生成的模型檢定數據min_nj:設定Level-2 unit的最小組內樣本數pr:定義檢定內所需要用到的threshold percentile rank(預設值=90)GroupVar:若有使用名義(nominal)類別的Level-2 unit的因子,則必須要把每個名義類別的定義另存一個新檔並用此巨集變數來呼叫。首先,利用PROC MIXED程序去估計一個模型,並且利用ODS OUTPUT的功能把%mixed_dx要用到的資料給另存出來:ods exclude influence SolutionR;proc mixed data = temp covtest noclprint NAMELEN=32;&& & &&& & &model mathach = SIZE FEMALE SES MEANSES SES*MEANSES SES*SIZE&FEMALE*SIZE/ solution outp=L1Resid influence(effect=schoolid iter=5);&& & &random &intercept FEMALE SES / sub=schoolid solution type=&& & &ods output SolutionR=L2Resid SolutionF=Fixed ModelInfo=ModelStuff&Dimensions=DatStuff Influence=influence;其中,outp選項所輸出的資料L1Resid是level 1的殘差值,這是要用在Level1參數裡面的。橘色高亮部分即為原始PROC MIXED內定的模型檢定指令,若配合ODS HTML的話可以輸出高解析度的圖表,但就是因為裡面包含太多圖了,所以才需要使用%mixed_dx來把幾個重要的圖整理出來。而紅色部分即為ODS OUTPUT輸出的指令。此處是缺一不可,即為重要。接下來就來執行巨集程式:%mixed_dx (ModelI = modelstuff, Dims = datstuff, solnF = Fixed, solnR =&L2Resid, Level1 = L1Resid, Influence = influence, min_nj = 5, pr = 90,&GroupVar = None);在生成的圖形當中,主要以殘差的箱型圖、柱狀分布圖以及散布圖為主。另外也有殘差變異數的散布圖(用來檢定同質性)還有離群值的柱狀分布圖。如下所示:表格方面,會整理出level-2 unit的常態統計量表、Levene’s同質性檢定表、離群值檢定和各種檢定統計量:目前這段程式碼可以在他們的校方網站上面下載:CONTACT INFORMATION &Your comments and questions are valued and encouraged. &Contact the author at:Bethany A. BellUniversity of South CarolinaCollege of Education, Wardlaw 133Columbia, SC 29208Work Phone: 803-777-2387E-mail:babell@sc.eduWeb: http://www.ed.sc.edu/bell/
原文載點:/resources/papers/proceedings10/274-2010.pdf
SAS 語法百百種,身為研究生的你/妳,有沒有想過有什麼是一定要學起來並且用在報告或論文上面?這篇技術文件整合了許多你一定得用在報告和論文的SAS程式!
原文載點:/resources/papers/proceedings10/274-2010.pdfSAS 語法百百種,身為研究生的你/妳,有沒有想過有什麼是一定要學起來並且用在報告或論文上面?這篇技術文件整合了許多你一定得用在報告和論文的SAS程式!1. PRELIMINARY ANALYSIS I &Code1.1:將變數製作成聚集變數這一步驟是用於一次要算幾百個變數的平均數的研究,讓使用者免去一個個輸入變數名稱的痛苦。但如果你只要算兩三個變數,那這段可以跳過。此程式所有的變數會被 PROC SQL 程序定義在一個名為 LIST 的巨集變數裡面。PROC SQL&select distinct NAME&into :LIST&separated by " "&from work.cells_1;Code1.2:計算平均數並用ODS OUTPUT輸出此例的變數名稱就直接用 &LIST 把上面整合好的變數名稱一次叫進來。同樣地,如果你只有少量變數,那直接輸入即可。此程式會將算好的基本統計量另存在 basic_measures 的新資料集裡面。ODS OUTPUT BASICMEASURES=work.basic_proc univariate data=work.&input.;var &LIST.;ODS OUTPUT CLOSE;Code1.3:重整結果以生成繪圖所需的資料重新編輯資料集 basic_measures 以算出額外兩個新變數 High 和 Low。這兩個變數被定義為平均數正負一個變異數的大小。但我建議正規的作法應該要去算 95% 信賴區間比較好。這部份各位可以自行修改。data work.basic_measures_set work.basic_measures (rename=( LocValue=Mean));if LOCMEASURE in ("Mean");High=mean+Low=mean-Keep varna做出來的繪圖資料如下圖所示:Code1.4:將變數和標籤製作成聚集變數這一段是要將剛剛做出來的繪圖資料裡面的變數以及標籤製作成巨集變數以用於繪圖程式當中。如果你打算手動輸入,此段也可以省略。&&select NAME as VAR into:VAR1- :VAR&SYSMAXLONG.&&from work.cells_1;&&&&select LABEL as LABEL into:LABEL1- :LABEL&SYSMAXLONG.&&from work.cells_1;&&Code1.5:繪圖並輸出用 PROC SGPLOT 進行曲線圖的製作,並將結果用 ODS RTF 輸出到外部文件檔案。如果你想要製作別種圖,那就需要對 PROC SGPLOT 部分進行調整。ods RTF file="C:\documents and settings\desktop\GRAPHS_MEANS.RTF" &;%do j=1 %to &SQLOBS.;data work.set work.basic_measures_if varname="&&VAR&J.";proc sgplot data=work.&xaxis type=&series x=day y=&scatter x=day y=mean /&markerattrs=(size=0)&yerrorlower=low&yerrorupper=%製作出來的圖型如下:Code1.6:用 PROC MIXED 程序進行分析並估計所需的組間差異此例由於是在做重複觀測值的模型估計,所以用到 PROC MIXED 程序。這部份可視使用者的情況來調整。ods proclabel "&&VAR&K. &&LABEL&K.";ods output &Estimates=work.est &SolutionF=work.sol tests3=work.tests3 ;proc mixed data=work.mixed1 COVTEST cl NOCLPRINT NOITPRINT ;&&class patient_id day_&&model &&var&k. =day_numeric /solutio&&repeated day_numeric / subject=patient_id type=ar(1)&&estimate '-4 vs 0' & & &day_numeric & -1 1 0 0 0 0 0 0;&&estimate '-4 & 0 vs 4' &day_numeric & -0.5 -0.5 1 0 0 0 0 0;&&estimate '-4 & 0 vs 8' &day_numeric & -0.5 -0.5 0 1 0 0 0 0;&&estimate '-4 & 0 vs 12' day_numeric & -0.5 -0.5 0 0 1 0 0 0;&&estimate '-4 & 0 vs 15' day_numeric & -0.5 -0.5 0 0 0 1 0 0;&&estimate '-4 & 0 vs 16' day_numeric & -0.5 -0.5 0 0 0 0 1 0;&&estimate '-4 & 0 vs 22' day_numeric & -0.5 -0.5 0 0 0 0 0 1;Code1.7:格式化結果這段只是單純把上面用 PROC MIXED 跑出來的結果整理一下。data work.length variable $32 variable_label $32 variable_subset $32;set work.variable="&&var&k.";PROC APPEND BASE=work.est_all_&source. DATA=work.RUN;最後的表格就可以直接輸出到報告和論文上,如下所示:2. PRELIMINARY ANALYSIS II &Code2.1:繪製個人曲線圖注意此處的巨集變數都是從 Code1.4 生成出來的。如果跳過那步驟的人,就自己手動輸入變數名稱吧!axis1 label=(angle=90);symbol i=j repeat=100 w=5;proc gplot data=work.mixed2;&& plot &&var&i.*week_numeric=patient_id/vaxis=axis1圖型如下所示:Code2.2:PROC SGPANAL這段是在畫另一種圖,但我覺得不是很重要,可以省略。proc sgpanel data=work.data_transpose_2;&&where _NAME_ in ("&&VAR&I.");&&panelby _LABEL_/&&colaxis type=discrete values=(-7,0,1,3,7,10,14,21,28);&&rowaxis label="log (Count)";&&series x=day y=_1 /markers LINEATTRS = (THICKNESS = 3);&&series x=day y=_2 /markers LINEATTRS = (THICKNESS = 3);&&series x=day y=_3 /markers LINEATTRS = (THICKNESS = 3);&&series x=day y=_4 /markers LINEATTRS = (THICKNESS = 3);&&series x=day y=_5 /markers LINEATTRS = (THICKNESS = 3);&&series x=day y=_6 /markers LINEATTRS = (THICKNESS = 3);圖型如下:Code2.3:用 PROC MIXED 估計參數並用 ODS OUTPUT 輸出共變異數矩陣裡的參數ODS OUTPUT "Covariance Parameter Estimates"=work.proc mixed data=mixed2 COVTEST cl NOCLPRINT NOITPRINT ;&&class patient_&&model &&var&i. =day_numeric /&&random intercept / subject=patient_&&&&ODS OUTPUT CLOSE;Code2.4:整理共變異數並計算 ICC這段程式看起來非常冗長,但其實簡單來講就是把 Code2.3 做出來的資料整理後算出 ICC(藍色部分),不過原作者還算了很多其他的估計值。如果你只是想要求出 ICC,那綠色的程式碼可以不用寫。data work.parameters_&set work.if covparm="Intercept"&& Between_Subject_Variance=E&& Between_p_value=ProbZ;&&& Between_Lower=L&&& Between_Upper=U&&&if covparm="Intercept" ;&keep Between_Subject_Variance Between_P_Value Between_Lower Between_Upper;&&data work.parameters_&set work.&if covparm="Residual"&& Within_Subject_Variance=E&& Within_p_value=ProbZ;&&& Within_Lower=L&&& Within_Upper=U&&&&if covparm="Residual" ;&keep Within_Subject_Variance WITHIN_P_VALUE Within_Lower Within_Upper;&&data work.parameters_&merge work.parameters_between work.parameters_&ICC=between_subject_variance/(within_subject_variance+between_subject_variance);&&variable="&&var&i."; variable_label="&&label&i."; data_source="&source.";&&&proc print data=work.parameters_&最後用 PROC PRINT 列印出來的結果如下:3. POWER SIMULATION最後重頭戲是 power analysis。不過此處用到模擬的原因是因為,作者想要做 power analysis 的對象是 ICC 和組間變異數,而非我們一般常看到的假設檢定。而由於 ICC 和組間變異數的 power 計算並沒有封閉形式(close form)的解,所以必須用模擬的方式來算出。Code3.1:生成種子(seed)用亂數去生成種子讓每一次的模擬都能隨機。種子的數量取得於母體大小乘上需要模擬的次數。本例的種子數目高達一千五百萬。%MACRO INITIALIZE ();%Global I &%Let Initial=0;data Initialseed (keep=id InitialSeed);&& & &do I = 1 to ; & && & & & & &InitialSeed =int(10000*(ranuni(0)));&& & & & & &id=I;&& & & & & &&& & &data SIM.InitialS&set work.InitialS%MEND INITIALIZE;Code3.2:製作依序取得種子的巨集程式%LET Initial=35;%MACRO SEED ();%let Initial=%EVAL(&Initial. +1);&data work.&&set sim.initialseed (Firstobs=&Initial. obs=&Initial.);;&&data _null_;&&set work.&&call symputx ('InitialSeed',InitialSeed);&%put Seed is # &Initial. and is valued &InitialSeed. ;%MEND SEED;Code3.3:模擬資料的巨集程式原文中 Code3.3~Code3.9 都是在講資料的生成。我將他們放在一起。簡單來講,先生成 baseline 資料(work.test),再生成其他時間點的資料(work.test_2),然後用 PROC TRANSPOSE 把生成好的結果轉置(直的變成橫的),接著就是用 PROC MIXED 不斷重複地去估計共變異數矩陣的參數,把這重複估計出來的參數存成一個新檔案(work.mixed),然後去算有多少顯著的比例。最後把結果整理成報表。%MACRO TEST(mean=,between_var=,within_var=,simulation=,population=,timecount=);data work.*first loop defines the simulation number*;do i= 1 to &simulation.;*second loop defines the number of people in the study*;&do j=1 to &population.;&& TIME_0=&mean.+sqrt(&between_var.)*rannor(&initialseed.);&&Simulation_ID=i;&&Person_ID=J; &&&drop Idata work.test_2;set work.array time (*) TIME_1-TIME_&timecount.;&&do k=1 to &timecount.;&& Time[k]=TIME_0 + sqrt(&within_var.)*rannor(&initialseed.);&&&proc transpose data=work.test_2 out=work.test_3 prefix=&by simulation_ID person_data work.test_3;set work.test_3;&TIME= input(scan(_NAME_,2,'_'),2.);&TIME2=TIME;ODS LISTING CLOSE;ODS OUTPUT COVPARMS=work.proc mixed data=work.test_3&&by simulation_ID;&&model value1=&&random intercept/ sub=person_ODS OUTPUT CLOSE;data work.mixed_1;set work.if Covparm="Intercept";if probz&0.1 then P_point1=1;if probz&0.05 then P_point05=1;if probz&0.01 then P_point01=1;if probz&0.001 then P_point001=1;if probz=.&p_point1=.;&p_point05=.;&p_point01=.;&p_point001=.;&&ODS OUTPUT onewayfreqs=work.mixed_freqs_1;ODS LISTING;proc freq data=work.mixed_1 ;table p_point1 p_point05 p_point01 &p_point001/ODS LISTING CLOSE;ODS OUTPUT CLOSE;proc append Base=work._mixed_freqs_all data=work._mixed_freqs_all_&initial. FORCE;%MEND;Code3.10:開始模擬最後就是呼叫前面寫好的巨集程式,輸入不同的組間變異數和組內變異數的數值,定義總共要模擬的次數、樣本大小、時間點數量以及平均數。%test(mean=-0.2740, between_var=0.01,within_var=0.67,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.02,within_var=0.66,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.03,within_var=0.65,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.04,within_var=0.64,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.05,within_var=0.63,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.06,within_var=0.62,simulation=1000,population=20,timecount=12);%test(mean=-0.2740, between_var=0.50,within_var=0.16,simulation=1000,population=20,timecount=12);Code3.11:整理繪圖資料模擬完後的資料存在 work._mixed_freqs_all 裡面,把不同組間變異數相對應的 ICC 放進去,並且把變數的標籤寫好。data work.set work._mixed_freqs_&if between_var= &0.01 then ICC = &0.01 ;&if between_var= &0.06 then ICC = &0.09 ;&if between_var= &0.11 then ICC = &0.16 ;&.……label percent="Power" population="Number of Subjects" timecount="Number of Time &&& & & & & &Points:";Code3.12:繪圖proc sort data=work.&symbol i=j width=5;ODS LISTING;proc gplot data=work.&&where table ="P_point01" and mixed=2;&plot percent*ICC=最後圖型如下:CONTACT INFORMATION&Your comments and questions are valued and encouraged. Contact the author at:Elisa L. Priest, MPH
SAS 裡面並沒有內建繪製 ROC 曲線的程序和語法,這和目前其他統計軟體都已經內建繪製 ROC 曲線的功能的情況比較起來,顯得相當奇怪。使用者在 SAS 的環境底下,必須先用 PROC LOGISTIC 程序將模型估計出來,再將一些報表另存新的檔案,然後才能根據這些新的資料來繪製 ROC 曲線並且計算 AUC 面積。SAS 官網有一段教學,詳情可參照 ,但繪製出來的圖形不甚美觀。Kriss Harris 在 SAS Global Forum 2010 發表了一篇技術文件,提供了一個相當實用的巨集程式 %ROC_CUTOFF 讓使用者可以在 SAS 裡面迅速且美觀地畫出 ROC 曲線。
____________博 客 平 台___________
SAS博客大汇}

我要回帖

更多关于 黑暗之魂3教宗右眼 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信