Två olika modeller (M1 och M2) av en elektronikutrustning har belastats (Load) och en viss svarstid (Time i mS) har uppmätts. Varje modell har haft tre olika mjukvaror. Resultaten har sammanställs i nedanstående tabell.
Några frågor:
• Finns det en skillnad mellan modeller? Är
skillnaden lika för alla mjukvaror?
• Vilken betydelse har
‘Load’-variabeln?
Modell. En linjär modell som anger Time som en kombination
av Load, SW och Mo. Termen ε kallas ofta
slumpkomponent och är summan av alla variabler som inte finns i
modellen.
β-koefficienterna beräknas nedan och anges som
Coefficients i utskriften.
Time=β0+β1Load+β2SW+β3Mo+ϵ
library("tidyverse") # Load tidyverse packages
## ── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
## ✔ dplyr 1.1.2 ✔ readr 2.1.4
## ✔ forcats 1.0.0 ✔ stringr 1.5.0
## ✔ ggplot2 3.4.2 ✔ tibble 3.2.1
## ✔ lubridate 1.9.2 ✔ tidyr 1.3.0
## ✔ purrr 1.0.1
## ── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
## ✖ dplyr::filter() masks stats::filter()
## ✖ dplyr::lag() masks stats::lag()
## ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
Time <- c(48, 53, 57, 59, 64, 66, 57, 63, 67, 70, 76, 80, 52, 57, 60, 63, 68, 70, 61, 67, 71, 74, 80, 84, 55, 60, 64, 66, 71, 73, 65, 71, 75, 78, 84, 88)
Load <- c(152, 160, 166, 170, 178, 182, 162, 170, 176, 180, 188, 194, 152, 160, 166, 170, 178, 182, 162, 170, 176, 180, 188, 194, 152, 160, 166, 170, 178, 182, 162, 170, 176, 180, 188, 194)
SW <- rep(c("SW1", "SW2", "SW3"), each = 12)
Mo <- rep(c("M1", "M2"), each = 6, times = 3)
allaData <- data.frame(Time, Load, SW, Mo)
modell <- lm(Time ~ Load + SW + Mo) # Analys: 'lm' betyder 'Linear Model'.
summary(modell) # Visar analysens resultat.
##
## Call:
## lm(formula = Time ~ Load + SW + Mo)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.44486 -0.47043 0.01735 0.57630 1.07983
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) -54.03271 1.96128 -27.55 < 2e-16 ***
## Load 0.66471 0.01159 57.38 < 2e-16 ***
## SWSW2 3.91667 0.29620 13.22 2.77e-14 ***
## SWSW3 7.50000 0.29620 25.32 < 2e-16 ***
## MoM2 4.52020 0.26985 16.75 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.7255 on 31 degrees of freedom
## Multiple R-squared: 0.995, Adjusted R-squared: 0.9943
## F-statistic: 1538 on 4 and 31 DF, p-value: < 2.2e-16
Kommentar. Utskriften ovan är mer eller mindre en
standardutskrift från en regressionsanalys (med en viss variation mellan
datorprogram). ’Multiple R-squared’ är 0.995 (99.5%) och betyder att
nästan all variation i datamängden beskrivs av den använda modellen.
Resten – 0.5% – är då slumpkomponenten ε.
Längst till
vänster anges de beräknade koefficienterna i modellen. Dessa används för
att rita grafen nedan.
koeff <- summary(modell)$coefficients # Alla skattade koefficienter.
b0Mo1SW1 <- koeff[1, 1] + 0 + 0 # Intercept för linje Mo1 SW1
b1Mo1SW1 <- koeff[2, 1] # Linjens lutning, samma för alla.
b0Mo1SW2 <- b0Mo1SW1 + 0 + koeff[3, 1] # Intercept för linje Mo1 SW2
b1Mo1SW2 <- koeff[2, 1] # Samma lutning.
b0Mo1SW3 <- b0Mo1SW1 + 0 + koeff[4, 1] # Intercept för linje Mo1 SW3
b1Mo1SW3 <- koeff[2, 1] # Samma lutning.
b0Mo2SW1 <- b0Mo1SW1 + koeff[5, 1] + 0 # Intercept för linje Mo2 SW1
b1Mo2SW1 <- koeff[2, 1] # Linjens lutning, samma för alla.
b0Mo2SW2 <- b0Mo1SW1 + koeff[5, 1] + koeff[3, 1] # Intercept för linje Mo2 SW2
b1Mo2SW2 <- koeff[2, 1] # Samma lutning.
b0Mo2SW3 <- b0Mo1SW1 + koeff[5, 1] + koeff[4, 1] # Intercept för linje Mo2 SW3
b1Mo2SW3 <- koeff[2, 1] # Samma lutning.
Modeller. Ur analysen kan sex modeller (‘räta linjen’) skapas (något avrundade):
• Mo1 SW1 Time = -54.03 + 0.6647*Load
• SW2 Time = -50.12 + 0.665*Load
• SW3 Time = -46.53 + 0.665*Load
• Mo2 SW1 Time = -49.51 + 0.665*Load
• SW2 Time = -45.60 + 0.665*Load
• SW3 Time = -42.01 + 0.665*Load
Skapa diagram. Följande kommandon skapar ett diagram för data och de sex modellerna.
farg <- dplyr::recode(Mo, `M1` = "red", `M2` = "black") # Kodar färger för modellerna.
typ <- dplyr::recode(SW, `SW1` = 4, `SW2` = 15, `SW3` = 20) # Kodar plottsymboler.
plotData <- data.frame(Time, Load, SW, farg) # Samlar plottdata i en 'dataframe'.
library(ggplot2) # Bibliotek för grafkonstruktion.
mittDiagram <- ggplot(allaData, aes(x = Load, y = Time)) + geom_point(colour = farg, shape = typ, size = 3) +
annotate("text", x=-Inf, y=Inf, label="Två modeller, tre mjukvaror", fontface="bold",
color="blue", size=4, vjust=2, hjust=-0.2) +
annotate("text", x=-Inf, y=Inf, label="Röd: modell 1, svart: modell 2", fontface="bold",
color="black", size=3.5, vjust=4.5, hjust=-0.22)
xstart <- 151; xstopp <- 183; ystart <- b0Mo1SW1 + b1Mo1SW1 * xstart; ystopp <- b0Mo1SW1 + b1Mo1SW1 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="red", linetype=3)
xstart <- 151; xstopp <- 183; ystart <- b0Mo1SW2 + b1Mo1SW2 * xstart; ystopp <- b0Mo1SW2+ b1Mo1SW2 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="red", linetype=3)
xstart <- 151; xstopp <- 183; ystart <- b0Mo1SW3 + b1Mo1SW3 * xstart; ystopp <- b0Mo1SW3+ b1Mo1SW3 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="red", linetype=3)
xstart <- 161; xstopp <- 195; ystart <- b0Mo2SW1 + b1Mo2SW1 * xstart; ystopp <- b0Mo2SW1 + b1Mo2SW1 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="black", linetype=3)
xstart <- 161; xstopp <- 195; ystart <- b0Mo2SW2 + b1Mo2SW2 * xstart; ystopp <- b0Mo2SW2+ b1Mo2SW2 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="black", linetype=3)
xstart <- 161; xstopp <- 195; ystart <- b0Mo2SW3 + b1Mo2SW3 * xstart; ystopp <- b0Mo2SW3+ b1Mo2SW3 * xstopp;
mittDiagram <- mittDiagram+geom_segment(x=xstart, y=ystart, xend=xstopp, yend=ystopp, colour="black", linetype=3)
mittDiagram
See also
https://ovn.ing-stat.se/ exempel [15]
Kommentarer. Den matematiska analysmodellen ovan innehöll inga
samspelstermer. Därför har alla linjer samma lutning. (Samspelstermer
skulle ge linjer med olika lutning.)
Av någon anledning har
förklaringsvariabeln ’Load’ olika intervall för de två modellerna på
X-axeln.
Om man antar att låga ’Time’-värden (svarstider) är
önskvärt så visar modell 1 ett bättre resultat. Nedersta röda linjen är
SW1 i M1 som alltså är den bästa kombinationen.