1. Indlæs data. * HUSK at angive din egen placering af filen; data framing; infile '/home/sro00/mph2016/framing.txt' firstobs=2; input id sex age frw sbp sbp10 dbp chol cig chd yrschd death yrsdth cause; * chd som 0/1-variabel; if chd gt 1 then chd01=1; if chd=0 then chd01=0; if chd=1 then chd01=.; smoke=0; if cig >= 1 then smoke=1; if cig =. then smoke=.; 2. Illustration af association mellem alder og rygning. Et hurtigt overblik over kvantitative variable får vi med et boxplot. Husk at sortere efter den forklarende variabel først, ellers strejker proc boxplot. proc sort data=framing; by smoke; proc boxplot data=framing; plot age*smoke; Det kunne godt se ud til at ikke-rygere er ældre. Spredningen ser ud til at være nogenlunde ens i de to grupper.
65 Distribution of age by smoke 60 age 55 50 45 0 1 smoke 3A. Er alder normalfordelt for hhv rygere og ikke-rygere? Når vi skal lave histogrammer for to eller flere grupper, kan vi vælge at gøre dette ved at bruge en bykommando. Her skal data først være sorteret efter by-variablen (smoke) - men det har vi jo allerede gjort ovenfor. MEN så får vi også et histogram ud for dem, hvor smoke er missing. Med en where-linie kan vi udelade disse (ne=not Equal); proc sgplot data=framing; histogram age; density age; density age / type=kernel; by smoke; where smoke ne.;
Vi er ikke i nærheden af en normalfordeling! For ikke-rygere ser fordelingen ret flad ud (en såkaldt ligefordeling). For rygerne ser vi, at vi har flere unge end ældre. smoke=0 12.5 10.0 Percent 7.5 5.0 2.5 0.0 40 50 60 70 age Normal Kernel
smoke=1 15 10 Percent 5 0 40 50 60 age Normal Kernel 4. Bestem SD i de to grupper. Kan disse antages at være ens? SD kan vi finde med proc means: Vi laver en by-kommando for at få beregning for hver gruppe for sig og igen en where-kommando for at undgå beregning for dem med missing smoke. proc means data=framing stddev; var age; by smoke; where smoke ne.;
smoke=0 Analysis Variable : age Std Dev 4.8224546 smoke=1 Analysis Variable : age Std Dev 4.6473553 MEN vi får samme information ud af proc ttest: proc ttest data=framing; var age; class smoke; smoke N Mean Std Dev Std Err Minimum Maximum 0 772 53.0272 4.8225 0.1736 45.0000 62.0000 1 633 51.7330 4.6474 0.1847 45.0000 62.0000 Diff (1-2) 1.2942 4.7444 0.2544 Kommentar [SR1]: Her har vi SD i de to grupper
smoke Method Mean 95% CL Mean Std Dev 95% CL Std Dev 0 53.0272 52.6865 53.3679 4.8225 4.5933 5.0758 1 51.7330 51.3703 52.0957 4.6474 4.4047 4.9185 Diff (1-2) Pooled 1.2942 0.7952 1.7932 4.7444 4.5752 4.9267 Diff (1-2) Satterthwaite 1.2942 0.7970 1.7914 Method Variances DF t Value Pr > t Pooled Equal 1403 5.09 <.0001 Satterthwaite Unequal 1367.1 5.11 <.0001 Equality of Variances Method Num DF Den DF F Value Pr > F Folded F 771 632 1.08 0.3317 5. Et test for om middelværdien af alder er den samme i de to grupper. Hvad er hypotesen? Hypotesen er at der ikke er nogen forskel i de to middelværdier (H_0 : mu1 = mu2). Dette testes ved et t-test. Da vi ovenfor fandt ud af at varianserne i de to grupper er ens, vælger vi at rapportere fra analysen med metode Pooled. I første omgang skal vi bare konkludere og har derfor kun brug for p-værdien fra t-testet. Vi bruger det output vi fik fra proc ttest ovenfor: Kommentar [SR2]: Her finder vi p-værdien for test af hypotesen om at de to standard deviationer (spredninger) er ens. Idet p- værdien er 0.05 kan vi ikke afvise hypotesen. Vi vælger derfor at tro på den og konkluderer, at vi godt kan antage at varianserne er ens. Det betyder at vi kan lave et sædvanligt t-test og at vi derfor skal rapportere fra linien med Pooled smoke N Mean Std Dev Std Err Minimum Maximum 0 772 53.0272 4.8225 0.1736 45.0000 62.0000 1 633 51.7330 4.6474 0.1847 45.0000 62.0000 Diff (1-2) 1.2942 4.7444 0.2544
smoke Method Mean 95% CL Mean Std Dev 95% CL Std Dev 0 53.0272 52.6865 53.3679 4.8225 4.5933 5.0758 1 51.7330 51.3703 52.0957 4.6474 4.4047 4.9185 Diff (1-2) Pooled 1.2942 0.7952 1.7932 4.7444 4.5752 4.9267 Diff (1-2) Satterthwaite 1.2942 0.7970 1.7914 Method Variances DF t Value Pr > t Pooled Equal 1403 5.09 <.0001 Satterthwaite Unequal 1367.1 5.11 <.0001 Kommentar [SR3]: Her finder vi p-værdien for test af hypotesen om ingen forskel. Den afvises. Vi konkluderer altså at der er en forskel i middelværdien af alder i de to grupper. Equality of Variances Method Num DF Den DF F Value Pr > F Folded F 771 632 1.08 0.3317 6. Kvantificér forskellen i middelværdien af alder i de to grupper (rygere vs ikke-rygere). Vi tager lige output fra proc ttest endnu engang: smoke N Mean Std Dev Std Err Minimum Maximum 0 772 53.0272 4.8225 0.1736 45.0000 62.0000 1 633 51.7330 4.6474 0.1847 45.0000 62.0000 Diff (1-2) 1.2942 4.7444 0.2544 smoke Method Mean 95% CL Mean Std Dev 95% CL Std Dev 0 53.0272 52.6865 53.3679 4.8225 4.5933 5.0758 1 51.7330 51.3703 52.0957 4.6474 4.4047 4.9185 Diff (1-2) Pooled 1.2942 0.7952 1.7932 4.7444 4.5752 4.9267 Diff (1-2) Satterthwaite 1.2942 0.7970 1.7914 Kommentar [SR4]: De tre relevante størrelser aflæser vi her i linien med Method=Pooled.
Method Variances DF t Value Pr > t Pooled Equal 1403 5.09 <.0001 Satterthwaite Unequal 1367.1 5.11 <.0001 Equality of Variances Method Num DF Den DF F Value Pr > F Folded F 771 632 1.08 0.3317 7. En multipel logistisk regressionmodel, som indeholder rygning, køn og alder som forklarende variable (hjertesygdom chd01 er respons) kan vi køre med kommandoerne: proc logistic data=framing descending; class sex smoke (ref='0') / param=ref; model chd01 = smoke sex age; Bemærk at jeg har tvunget ikke-rygerne (kode 0 af rygevariablen smoke) til at være referencegruppe med argumentet (ref= 0 ). OR for rygning, køn og alder kan vi aflæse i feltet med titel Odds Ratio Estimates. 8. Er det rimeligt at lade alder indgå lineært i denne model? Vi udfører et kvadratledstest i den multiple model: proc logistic data=framing descending; class sex smoke (ref='0') / param=ref; model chd01 = smoke sex age age*age;
I dette output skal vi KUN bekymre os om p-værdien for age*age alt andet er ligegyldigt. Vi finder den i blokken med titel Analysis of Maximum Likelihood Estimates : Analysis of Maximum Likelihood Estimates Parameter DF Estimate Standard Error Wald Chi-Square Pr > ChiSq Intercept 1-5.9596 9.1604 0.4233 0.5153 smoke 1 1 0.1384 0.1478 0.8774 0.3489 sex 1 1 0.6721 0.1476 20.7360 <.0001 age 1 0.0877 0.3475 0.0637 0.8007 age*age 1-0.00018 0.00328 0.0030 0.9567 9A. Rapportér den endelige multivariable model. Den endelige model har vi kørt allerede i spørgsmål 7. Her kommer den en gang mere, og vi aflæser nu OR incl CI og p-værdier: proc logistic data=framing descending; Kommentar [SR5]: Hypotesen er at dette led er lig 0 Kommentar [SR6]: Her er p-værdien for kvadratledstestet. Vi kan derfor ikke afvise hypotesen og vælger at tro på den (og dermed at de -.00018 lige så godt kunne være 0). Idet dette led er 0, kan vi fjerne age*age fra modellen og er tilbage ved den model vi stillede op i spørgsmål 7 class sex smoke (ref='0') / param=ref; model chd01 = smoke sex age; De relevante blokke at aflæse i er:
Analysis of Maximum Likelihood Estimates Parameter DF Estimate Standard Error Wald Chi-Square Pr > ChiSq Intercept 1-5.4639 0.8052 46.0475 <.0001 smoke 1 1 0.1387 0.1477 0.8817 0.3477 sex 1 1 0.6719 0.1476 20.7361 <.0001 age 1 0.0689 0.0148 21.7262 <.0001 Kommentar [SR7]: I denne finder vi p-værdierne for hver enkelt variabel Odds Ratio Estimates Effect Point Estimate 95% Wald Confidence Limits smoke 1 vs 0 1.149 0.860 1.534 sex 1 vs 2 1.958 1.466 2.615 age 1.071 1.041 1.103 Kommentar [SR8]: OR er. Kommentar [SR9]: Og tilhørende CI Kommentar [SR10]: Vær altid opmærksom på, om referencegruppen er som forventet. Dette ses let her (1 vs 2 = mænd vs kvinder)