Eksempel: dæktyper og brændstofforbrug (opgave 25 side 319) Program: cars 1 2 3 4 5... radial 4.2 4.7 6.6 7.0 6.7... belt 4.1 4.9 6.2 6.9 6.8... Muligheder: 1. vi starter med at gennemgå opgave 7 side 471. 2. nyt: varianskomponent-modeller (random effects) og transformation af data. ensidet variansanalyse Y ij = µ i + ǫ 2 ij. Problem: tager ikke hensyn til variation mellem biler/chauffører parret t-test: test for middelværdi nul af differenser D j = Y 2j Y 1j blocking. Y ij = µ i + β j + ǫ 2 ij hvor β j effekt af bil/chauffør. NB: test for µ 1 = µ 2 i model med blocking ækvivalent med parret t-test! 1 Ulempe ved blocking: indfører 12 parametre β j for effekter som vi vil korrigere for, men som ikke i sig selv er interessante. 3 Tilfældige effekter Obs. og blok-effekter qq-plot for estimater af block-effekter β j : Normal Q Q Plot Vedr. forsøgsplanlægning Antag vi har 4 blokke hver med 4 delplots og ialt 4 behandlinger. Er det en god eller dårlig ide at have behandling 1 på delplots indenfor blok 1, behandling 2 på delplots indenfor blok 2 etc.? gas 4.0 4.5 5.0 5.5 6.0 6.5 7.0 7.5 Sample Quantiles 4.5 5.0 5.5 6.0 6.5 7.0 Denne strategi vil minimere variation mellem målinger for samme behandling... 2 4 6 8 10 12 1.5 1.0 0.5 0.0 0.5 1.0 1.5 block Theoretical Quantiles Ide: anskue β j som stikprøve fra normalfordeling. Model: 2 Y ij = µ i + B j + ǫ ij hvor B j N(0,σ 2 B ) og ǫ ij N(0,σ 2 ) og uafhængige. 4
Alternativ beregning vha lme() (lineær mixed effects model): Dekomposition af varians: V ar(y ij ) = V ar(µ i + B j + ǫ ij ) = V ar(b j ) + V ar(ǫ ij ) = σ 2 B + σ 2 σ 2 B og σ2 : varianskomponenter. Beregningsformler for varianskomponenter (table 13.19, afsnit 13.12 og side 489-490 i WMMY henh. table 13.17, afsnit 13.13 samt 540-541): ˆσ 2 = s 2 = SSE (k 1)(b 1) I det konkrete tilfælde er b = 12 og k = 2. 5 ˆσ 2 B = s2 2 s 2 k s 2 2 = SSB b 1 > library(nlme) > mixedfit=lme(gas~beltind,random=~1 factor(block)) > summary(mixedfit) Linear mixed-effects model fit by REML... Random effects: Formula: ~1 factor(block) (Intercept) Residual StdDev: 1.014216 0.1396697 Fixed effects: gas ~ beltind Value Std.Error DF t-value p-value (Intercept) 5.750000 0.2955421 11 19.455772 0.0000 beltind -0.141667 0.0570199 11-2.484513 0.0303... NB: ~1 factor(block) specificerer de tilfældige effekter. Formlen læses tilfældigt intercept (1) indenfor ( ) hver blok. Det tilfældige intercept er altså B j. 7 Beregning i R vha variansanalyse tabel: > aov.fit=aov(gas~beltind+factor(block)) > summary(aov.fit) Df Sum Sq Mean Sq F value Pr(>F) beltind 1 0.1204 0.1204 6.1728 0.03033 * #SSA factor(block) 11 22.8446 2.0768 106.4602 1.565e-09 *** #SSB Residuals 11 0.2146 0.0195 #SSE --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 σ 2 = 0.0195 σ 2 B = (2.0768 0.0195)/2 = 1.0286 Forsøgsplanlægning Output fra maskine med 4 forskellige operatører (opg 1 side 513) operat. 1 1 1 1 2 2 2 2 3 3 output 175.4 171.7 173.0 170.5 168.5 162.7 165.0 164.1 170.1 173 Model Y ij = µ + B j + ǫ ij hvor B j tilfældig operatør effekt og ǫ ij støj. Ȳ estimat af µ. Bemærk: langt den største del af variansen kommer fra blokkene! Antag vi kan lave 100 målinger. Hvordan skal vi vælge antal operatører og antal gentagelser pr. operatør for at få mest præcise estimat? 6 8
> library(nlme) > op.fit=lme(output~1,random=~1 operator) > op.fit Linear mixed-effects model fit by REML Data: NULL Log-restricted-likelihood: -42.6094 Fixed: output ~ 1 (Intercept) 172.2188 Random effects: Formula: ~1 operator (Intercept) Residual StdDev: 5.376831 2.883755 Number of Observations: 16 Number of Groups: 4 Støj varians: 2.88 2 = 8.32. Operatør varians 5.38 2 = 28.91. 9 Lad b angive antal operatører og m = 100/b antal gentagelser pr. operatør. V arȳ = V ar 1 bm b m i=1 j=1 Y ij = 1 b 2 m 2 b b m V ar[ mb j ] + V ar[ ǫ ij ] i=1 = 1 b 2 m 2 (bm2 σ 2 B + bmσ 2 ) = σ2 B b + σ2 bm = σ2 B b + σ2 100 Dvs. skal vælge b så stor som mulig. i=1 j=1 Antag pris pr. operatør er 100 og pris pr. gentagelse er 50 og vi har 1000 (kr.) til rådighed. Pris for b operatører og m gentagelser b100 + bm50. Med b operatører har vi dermed råd til m = (1000/b 100)/50 gentagelser. 11 Vha. variansanalysetabel (se WMMY afsnit 13.12 henh. afsnit 13.13) ˆσ 2 = SSE k(n 1) ˆσ 2 α = s2 1 s 2 n > fit=aov(output~factor(operator)) > summary(fit) Df Sum Sq Mean Sq F value Pr(>F) factor(operator) 3 371.87 123.96 14.906 0.000238 *** # SSA s_1^2 Residuals 12 99.79 8.32 # SSE s^2 --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 > (123.96-8.32)/4 [1] 28.91 V arȳ som funktion af b (antal operatører): varians 5 10 15 20 25 30 2 4 6 8 b Optimalt antal operatører =7 når 1000 kr. til rådighed. 10 12
0 200 400 0 40000 0 100 300 0 10000 0 5000 15000 4 6 8 10 Transformation af data Plots Normal Q Q Plot Grundlæggende antagelser for lineær model: respons lineær funktion af forklarende variable varianshomogenitet normalfordelte fejl 0 100 300 0 40000 Patient.Load X.Rays Bed.Days Population Days 0 200 400 0 5000 15000 4 6 8 10 rstudent(fit)[order(fitted(fit))] 2 1 0 1 2 3 4 Sample Quantiles 2 1 0 1 2 3 4 Hvis disse ikke er opfyldt for et givet data sæt kan det ofte være en ide at transformere (anvende den lineære model på en anden skala). 0 10000 Manhours 2 1 0 1 2 5 10 15 Index Theoretical Quantiles Kolineariatet Var. het. ej normal 13 15 Eksempel: hospitalsdata (manhours) plot(hosp)#parvis plot af alle variable fit=lm(manhours~patient.load+x.rays+bed.days+population+days) plot(rstudent(fit)[order(fitted(fit))]) qqnorm(rstudent(fit)) qqline(rstudent(fit)) Model for log Manhours plot(hosp)#parvis plot af alle variable logfit=lm(log(manhours)~patient.load+x.rays+bed.days+population+days) plot(rstudent(logfit)[order(fitted(logfit))]) qqnorm(rstudent(logfit)) qqline(rstudent(logfit)) 14 16
Prediktion vha. model for log Manhours Plots rstudent(logfit)[order(fitted(logfit))] 2 1 0 1 5 10 15 Index Sample Quantiles 2 1 0 1 Normal Q Q Plot 2 1 0 1 2 Theoretical Quantiles Transformation reduceret variansheterogenitet og afvigelse fra normalitet mindre. 17 #efter backward selection > logfit=lm(log(manhours)~patient.load) > #prediktion af log Manhours med Patient.Load=30 > predict30=predict(logfit,newdata=data.frame(patient.load=30),interval= > predict30 [1,] 7.295715 6.333668 8.257763 > exp(predict30) [1,] 1473.971 563.2187 3857.455 Tilbagetransformering: (Y angiver Manhours når Patient.Load=30): P(L < log Y < U) = 95% P(exp(L) < Y < exp(u)) = 95% Dvs. 95 % prediktionsinterval [exp(6.33),exp(8.26)] = [563.22,3857.46]. NB: prediktionsintervaller kun positive værdier! 19 Prediktionsintervaller baseret på model uden transformation > predict(fit,interval="prediction") 1 775.0251-734.64937 2284.700 2 740.6702-849.42746 2330.768 3 1103.9234-436.52443 2644.371 4 1240.4956-291.00277 2771.994 5 1564.4217 76.68165 3052.162 6 2151.2717 609.57957 3692.964 NB: Prediktionsintervaller indeholder negative værdier af Manhours! Konfidensintervaller Konfidensinterval for µ 30 (forventet værdi af log Manhours når Patient.Load=30): > confid30 [1,] 7.295715 7.015729 7.575702 NB: exp(µ 30 ) er median for Manhours. Konfidensinterval for median: > exp(confid30) [1,] 1473.971 1114.018 1950.229 18 20
Fra ikke-lineære til lineære sammenhænge Hvis man kender funktionel sammenhæng kan denne viden benyttes til at finde passende transformationer: Opsummering: vi skal bruge den lineære model på den skala, hvor den giver bedst mening. Ved tilbagetransformering opnås da en model for data på den oprindelige skala. y = α exp(βx) log y = log α + βx y = αx β log y = log α + β log x y = α x x + β 1 y = 1 α + β 1 α x (Michaelis-Menten) 21 23 Eksempel: Michaelis-Menten vha linearisering Tælle-data For Poisson-fordeling er EX = V arx = λ. Her vil X approximativt have konstant varians. Dvs. for tælledata kan kvadratrodstransformation være relevant. x=c(1:10) #simulerer data y=0.1*x/(x+2)+rnorm(10,sd=0.01) plot(x,y) plot(1/x,1/y) recy=1/y recx=1/x fit=lm(recy~recx) abline(fit) 22 24
Resultater y 0.03 0.04 0.05 0.06 0.07 0.08 0.09 2 4 6 8 10 x y 1/y 10 15 20 25 30 35 40 0.2 0.4 0.6 0.8 1.0 var. het. (stiplet linie: rigtige parameter-værdier) #estimerede koefficenter ab=coef(fit) alpha=1/ab[1] 0.1176429 beta=ab[2]/ab[1] 3.780816 25 1/x Observationer og tilpasset MM-model 0.03 0.04 0.05 0.06 0.07 0.08 0.09 2 4 6 8 10 x 27 Eksempel: Michaelis-Menten vha ikke-lineær least squares > nonlinfit=nls(y~alpha*x/(x+beta),start=list(alpha=0.1,beta=3.78)) > summary(nonlinfit) Formula: y ~ alpha * x/(x + beta) Parameters: Estimate Std. Error t value Pr(> t ) alpha 0.10591 0.01542 6.868 0.000129 *** beta 2.85270 1.21313 2.352 0.046571 * --- Signif. codes: 0 *** 0.001 ** 0.01 * 0.05. 0.1 1 Residual standard error: 0.009763 on 8 degrees of freedom Mere præcise resultater! 26