Examine the content of the regression model object sparrows.lm produced in the linear regression chapter. Explain the meaning of the components within, and tell us how they relate to the model summary produced by summary(sparrows.lm). (/5)
Using the values inside of the model object, write some R code to show how you can reconstruct the observed values for the dependent variable from the residuals and the fitted values. (/5)
Fit a linear regression through the model residuals (use sparrows.lm). Explain your findings. (/5)
Similarly, fit a linear regression through the the fitted values. Explain. (/5)
List of 12
$ coefficients : Named num [1:2] 0.713 0.27
..- attr(*, "names")= chr [1:2] "(Intercept)" "age"
$ residuals : Named num [1:13] -0.1238 -0.294 0.1358 0.0655 0.2251 ...
..- attr(*, "names")= chr [1:13] "1" "2" "3" "4" ...
$ effects : Named num [1:13] -12.314 4.374 0.208 0.124 0.258 ...
..- attr(*, "names")= chr [1:13] "(Intercept)" "age" "" "" ...
$ rank : int 2
$ fitted.values: Named num [1:13] 1.52 1.79 2.06 2.33 2.87 ...
..- attr(*, "names")= chr [1:13] "1" "2" "3" "4" ...
$ assign : int [1:2] 0 1
$ qr :List of 5
..$ qr : num [1:13, 1:2] -3.606 0.277 0.277 0.277 0.277 ...
.. ..- attr(*, "dimnames")=List of 2
.. .. ..$ : chr [1:13] "1" "2" "3" "4" ...
.. .. ..$ : chr [1:2] "(Intercept)" "age"
.. ..- attr(*, "assign")= int [1:2] 0 1
..$ qraux: num [1:2] 1.28 1.28
..$ pivot: int [1:2] 1 2
..$ tol : num 1e-07
..$ rank : int 2
..- attr(*, "class")= chr "qr"
$ df.residual : int 11
$ xlevels : Named list()
$ call : language lm(formula = wing ~ age, data = sparrows)
$ terms :Classes 'terms', 'formula' language wing ~ age
.. ..- attr(*, "variables")= language list(wing, age)
.. ..- attr(*, "factors")= int [1:2, 1] 0 1
.. .. ..- attr(*, "dimnames")=List of 2
.. .. .. ..$ : chr [1:2] "wing" "age"
.. .. .. ..$ : chr "age"
.. ..- attr(*, "term.labels")= chr "age"
.. ..- attr(*, "order")= int 1
.. ..- attr(*, "intercept")= int 1
.. ..- attr(*, "response")= int 1
.. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. ..- attr(*, "predvars")= language list(wing, age)
.. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
.. .. ..- attr(*, "names")= chr [1:2] "wing" "age"
$ model :'data.frame': 13 obs. of 2 variables:
..$ wing: num [1:13] 1.4 1.5 2.2 2.4 3.1 3.2 3.2 3.9 4.1 4.7 ...
..$ age : num [1:13] 3 4 5 6 8 9 10 11 12 14 ...
..- attr(*, "terms")=Classes 'terms', 'formula' language wing ~ age
.. .. ..- attr(*, "variables")= language list(wing, age)
.. .. ..- attr(*, "factors")= int [1:2, 1] 0 1
.. .. .. ..- attr(*, "dimnames")=List of 2
.. .. .. .. ..$ : chr [1:2] "wing" "age"
.. .. .. .. ..$ : chr "age"
.. .. ..- attr(*, "term.labels")= chr "age"
.. .. ..- attr(*, "order")= int 1
.. .. ..- attr(*, "intercept")= int 1
.. .. ..- attr(*, "response")= int 1
.. .. ..- attr(*, ".Environment")=<environment: R_GlobalEnv>
.. .. ..- attr(*, "predvars")= language list(wing, age)
.. .. ..- attr(*, "dataClasses")= Named chr [1:2] "numeric" "numeric"
.. .. .. ..- attr(*, "names")= chr [1:2] "wing" "age"
- attr(*, "class")= chr "lm"
summary(sparrows.lm)
Call:
lm(formula = wing ~ age, data = sparrows)
Residuals:
Min 1Q Median 3Q Max
-0.30699 -0.21538 0.06553 0.16324 0.22507
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 0.71309 0.14790 4.821 0.000535 ***
age 0.27023 0.01349 20.027 5.27e-10 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 0.2184 on 11 degrees of freedom
Multiple R-squared: 0.9733, Adjusted R-squared: 0.9709
F-statistic: 401.1 on 1 and 11 DF, p-value: 5.267e-10
✓ (x 5) The content of the fitted model is revealed by the str(sparrows.lm) function, and the summary of the fitted model is obtained by summary(sparrows.lm). str(sparrows.lm) provides a compact display of the structure of the fitted model object, including the coefficients, residuals, and other components. These are of various data classes contained within the list, and include, for example, a numeric vector of model coefficients, a numeric vector of residuals or fitted values, and many other things that may be of interest from time to time. summary(sparrows.lm) provides a more detailed overview of the most important model fit diagnostics and statistics, including the coefficients, standard errors, t-values, p-values, and R-squared values, which we can use to assess how well the model fits the data. The summary() function also provides an analysis of variance table, which can be used to assess the significance of the model and its components.
Reconstructing the observed values
# Reconstruct wing lengths from modelfitted(sparrows.lm) +resid(sparrows.lm)
✓ (x 5) The observed values of the dependent variable can be reconstructed from the fitted values and the residuals. The fitted values are the predicted values of the dependent variable based on the model, and the residuals are the differences between the observed values and the fitted values. So, by adding the fitted values and the residuals together, we can reconstruct the observed values of the dependent variable.
Fitting a linear regression through the model residuals
# Fit a linear regression through the model residualsresiduals.lm <-lm(resid(sparrows.lm) ~ age, data = sparrows)summary(residuals.lm)
Call:
lm(formula = resid(sparrows.lm) ~ age, data = sparrows)
Residuals:
Min 1Q Median 3Q Max
-0.30699 -0.21538 0.06553 0.16324 0.22507
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 1.541e-17 1.479e-01 0 1
age -2.386e-19 1.349e-02 0 1
Residual standard error: 0.2184 on 11 degrees of freedom
Multiple R-squared: 4.292e-33, Adjusted R-squared: -0.09091
F-statistic: 4.721e-32 on 1 and 11 DF, p-value: 1
# Plot the residualsggplot(sparrows, aes(x = age, y =resid(sparrows.lm))) +geom_point() +geom_smooth(method ="lm", se =FALSE) +labs(title ="Residuals vs Age",x ="Age",y ="Residuals") +theme_minimal()
✓ (x 5) The fitted model through the residuals shows that there is no significant relationship between the residuals and the age of the sparrows, i.e., the coefficients will be (very close to) zero, and the p-value will be large (close to one). This is expected. Residuals, by construction, are orthogonal (uncorrelated) to the predictor used in the original model (age). Fitting a regression on residuals should reveal no linear trend (a flat line), since any such trend would have been captured by the model already and so it is no longer present in the residuals. As such, the residuals are randomly distributed around zero.
Fitting a linear regression through the fitted values
# Fit a linear regression through the fitted valuesfitted.lm <-lm(fitted(sparrows.lm) ~ age, data = sparrows)summary(fitted.lm)
Call:
lm(formula = fitted(sparrows.lm) ~ age, data = sparrows)
Residuals:
Min 1Q Median 3Q Max
-8.018e-16 -1.738e-16 -3.987e-17 1.562e-16 8.474e-16
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 7.131e-01 2.787e-16 2.559e+15 <2e-16 ***
age 2.702e-01 2.542e-17 1.063e+16 <2e-16 ***
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 4.115e-16 on 11 degrees of freedom
Multiple R-squared: 1, Adjusted R-squared: 1
F-statistic: 1.13e+32 on 1 and 11 DF, p-value: < 2.2e-16
# Plot the fitted valuesggplot(sparrows, aes(x = age, y =fitted(sparrows.lm))) +geom_point() +geom_smooth(method ="lm", se =FALSE) +labs(title ="Fitted Values vs Age",x ="Age",y ="Fitted Values") +theme_minimal()
✓ (x 5) The fitted model through the fitted values shows that there is a significant relationship between the fitted values and the age of the sparrows, i.e., the coefficients will be (very close to) one, and the p-value will be small (close to zero). The fitted values are the predicted values of the dependent variable based on the model, and so they should be perfectly linearly related to the predictor used in the original model (age). Fitting a regression on fitted values should reveal a linear trend (a slope of one), since any such trend would have been fully captured by the model already.
Question 2
Find your own two datasets and do a full regression analysis on it. Briefly describe the data and the reason for their existence. Start with setting the appropriate hypotheses. Follow with an EDA, make some exploratory figures, fit the linear model, make a figure with the fitted linear model, provide diagnostic plots to test assumptions, and present the output in a Results section suitable for publication. (/20)
Rubric
Criterion
Excellent (Full Marks)
Partial Credit
Absent / Poor
Marks
1. Dataset Choice and Justification (/2)
Two datasets are clearly described, relevant, and non-trivial; rationale for use is coherent and shows critical thought.
Datasets are described but may be simplistic or rationale is weakly justified.
Datasets are vague, trivial, or arbitrarily chosen; little to no justification.
/2
2. Hypothesis Framing (/2)
Null and alternative hypotheses are clearly stated in statistical terms and contextualised to the data.
Hypotheses are present but somewhat vague or generic.
Hypotheses are missing, poorly framed, or irrelevant.
/2
3. Exploratory Data Analysis (/3)
EDA is systematic and insightful, summarising variable distributions, identifying patterns, and flagging potential issues (e.g., collinearity, missingness).
Some descriptive statistics or plots are provided, but interpretation is limited or scattered.
Minimal or no EDA; data analysed without exploration.
/3
4. Exploratory Figures (/2)
Visuals (e.g., scatterplots, histograms) are well-chosen, clearly labelled, and aid interpretation.
Plots are included but may be unclear, redundant, or poorly formatted.
Plots are missing or irrelevant.
/2
5. Model Specification and Fitting (/3)
Linear model is appropriate for the data and research question; code and output are clearly reported.
Model is mostly appropriate but poorly justified or inconsistently executed.
Model is ill-suited, poorly fitted, or lacks documentation.
/3
6. Visualisation of Fitted Model (/2)
Plot with fitted regression line is clear, with aesthetic attention to axis labels, units, and legends; enhances interpretation.
A fitted model is plotted but poorly presented or not fully interpretable.
No fitted model plot, or plot is meaningless.
/2
7. Diagnostic Checks (/3)
At least two appropriate diagnostic plots (e.g., residuals vs fitted, QQ-plot) are shown and interpreted in light of linear model assumptions (normality, etc.).
Diagnostics shown but with weak interpretation or partially inappropriate diagnostics.
Diagnostics missing, or plots are included without explanation.
/3
8. Written Results Section (/3)
Results are reported in a concise, publication-ready format with appropriate terminology (e.g., coefficient estimates, p-values, R²) and clear narrative flow.
Results are understandable but lack polish, completeness, or clarity; some technical terms used inaccurately.
Results are disorganised, incorrectly interpreted, or copied without synthesis.
/3
Total: /20
10. Correlations
Question 3
Find your own two datasets and do a full correlation analysis on it. Briefly describe the data and the reason for their existence. Start with setting the appropriate hypotheses. Follow with an EDA, make some exploratory figures, fit the correlation, make figures with the fitted correlation line, provide diagnostic plots to test assumptions, and present the output in a Results section suitable for publication. (/20)
Rubric
Criterion
Excellent (Full Marks)
Partial Credit
Absent / Poor
Marks
1. Dataset Choice and Justification (/2)
Two variables (from one or more datasets) are clearly described and justified as candidates for correlation analysis; rationale is thoughtful and contextually informed.
Variables are chosen and described but rationale is vague or unconvincing.
Variable selection appears arbitrary or trivial; little or no justification given.
/2
2. Hypothesis Framing (/2)
Null and alternative hypotheses are explicitly stated and aligned with the correlation analysis (e.g., H₀: ρ = 0). Contextual meaning is clearly explained.
Hypotheses are present but poorly articulated or lacking in contextual relevance.
Hypotheses are missing, incorrect, or misaligned with the analysis.
/2
3. Exploratory Data Analysis (/3)
EDA includes summary statistics, variable distribution inspection, and consideration of linearity or monotonicity. Potential issues (e.g., outliers) are noted.
EDA is attempted but lacks depth or overlooks important features such as skewness or linearity.
No meaningful EDA is performed before conducting correlation.
/3
4. Exploratory Figures (/2)
Appropriate visualisation (e.g., scatterplot with smoothing line or marginal histograms) is clear, labelled, and supports interpretation.
Plot is included but unclear, poorly formatted, or not well interpreted.
No plot provided, or plot is irrelevant or uninformative.
/2
5. Correlation Method and Calculation (/3)
Correlation method is appropriate to data characteristics (Pearson/Spearman chosen with justification). Code and output are correct and clearly reported.
Method is used correctly but without justification or with some reporting issues.
Correlation is applied blindly or incorrectly; code or output is missing.
/3
6. Significance and Effect Size (/2)
p-value and correlation coefficient (r or ρ) are reported with interpretation of both statistical and practical significance.
Results are reported but not clearly interpreted or contextualised.
Misinterpretation of p-value or correlation coefficient; missing output.
/2
7. Assumption Checking and Discussion (/3)
Addresses assumptions of correlation method (e.g., normality, linearity, absence of outliers), supported by appropriate plots or discussion.
Some assumptions discussed or partially checked; reasoning may be unclear.
No discussion or evidence of assumption checking.
/3
8. Written Results Section (/3)
Results are presented in a clear, concise, publication-ready format, with technical correctness and logical flow from EDA to conclusion.
Results are readable but disorganised or use imprecise language; conclusions may not follow cleanly from evidence.
Results are unclear, incorrect, or unstructured; poor communication of findings.
---title: "BCB744 Task G"format: html: fig-format: svg fig_retina: 2 fig-dpi: 400params: hide_answers: false---```{r, echo=FALSE}knitr::opts_chunk$set(echo =TRUE,eval =TRUE,warning =FALSE,message =FALSE,fig.width =6,fig.asp =0.65,out.width ="100%",fig.align ="center")library(tidyverse)library(ggpubr)library(ggthemes)```# [[Assessment Sheet](BCB744_Task_H_Surname.xlsx)]{.my-highlight} {#sec-assessment}# 9. Simple Linear Regressions## Question 1a. Examine the content of the regression model object `sparrows.lm` produced in the [linear regression](https://tangledbank.netlify.app/BCB744/basic_stats/09-regressions.html) chapter. Explain the meaning of the components within, and tell us how they relate to the model summary produced by `summary(sparrows.lm)`. **(/5)**b. Using the values inside of the model object, write some R code to show how you can reconstruct the observed values for the dependent variable from the residuals and the fitted values. **(/5)**c. Fit a linear regression through the model residuals (use `sparrows.lm`). Explain your findings. **(/5)**d. Similarly, fit a linear regression through the the fitted values. Explain. **(/5)**`r if (params$hide_answers) "::: {.content-hidden}"`**Answer**a. **Examining the fitted model**```{r}# Load the sparrows datasetsparrows <-tibble(age =c(3, 4, 5, 6, 8, 9, 10, 11, 12, 14, 15, 16, 17),wing =c(1.4, 1.5, 2.2, 2.4, 3.1, 3.2, 3.2, 3.9, 4.1, 4.7, 4.5, 5.2, 5.0))sparrows.lm <-lm(wing ~ age, data = sparrows)str(sparrows.lm)summary(sparrows.lm)```- ✓ (x 5) The content of the fitted model is revealed by the `str(sparrows.lm)` function, and the summary of the fitted model is obtained by `summary(sparrows.lm)`. `str(sparrows.lm)` provides a compact display of the structure of the fitted model object, including the coefficients, residuals, and other components. These are of various data classes contained within the list, and include, for example, a numeric vector of model coefficients, a numeric vector of residuals or fitted values, and many other things that may be of interest from time to time. `summary(sparrows.lm)` provides a more detailed overview of the most important model fit diagnostics and statistics, including the coefficients, standard errors, *t*-values, *p*-values, and *R*-squared values, which we can use to assess how well the model fits the data. The `summary()` function also provides an analysis of variance table, which can be used to assess the significance of the model and its components.b. **Reconstructing the observed values**```{r}# Reconstruct wing lengths from modelfitted(sparrows.lm) +resid(sparrows.lm)# This is the same as accessing the component of the model object with str()sparrows.lm$fitted.values + sparrows.lm$residuals```- ✓ (x 5) The observed values of the dependent variable can be reconstructed from the fitted values and the residuals. The fitted values are the predicted values of the dependent variable based on the model, and the residuals are the differences between the observed values and the fitted values. So, by adding the fitted values and the residuals together, we can reconstruct the observed values of the dependent variable.c. **Fitting a linear regression through the model residuals**```{r}# Fit a linear regression through the model residualsresiduals.lm <-lm(resid(sparrows.lm) ~ age, data = sparrows)summary(residuals.lm)# Plot the residualsggplot(sparrows, aes(x = age, y =resid(sparrows.lm))) +geom_point() +geom_smooth(method ="lm", se =FALSE) +labs(title ="Residuals vs Age",x ="Age",y ="Residuals") +theme_minimal()```- ✓ (x 5) The fitted model through the residuals shows that there is no significant relationship between the residuals and the age of the sparrows, i.e., the coefficients will be (very close to) zero, and the *p*-value will be large (close to one). This is expected. Residuals, by construction, are orthogonal (uncorrelated) to the predictor used in the original model (age). Fitting a regression on residuals should reveal no linear trend (a flat line), since any such trend would have been captured by the model already and so it is no longer present in the residuals. As such, the residuals are randomly distributed around zero.d. **Fitting a linear regression through the fitted values**```{r}# Fit a linear regression through the fitted valuesfitted.lm <-lm(fitted(sparrows.lm) ~ age, data = sparrows)summary(fitted.lm)# Plot the fitted valuesggplot(sparrows, aes(x = age, y =fitted(sparrows.lm))) +geom_point() +geom_smooth(method ="lm", se =FALSE) +labs(title ="Fitted Values vs Age",x ="Age",y ="Fitted Values") +theme_minimal()```- ✓ (x 5) The fitted model through the fitted values shows that there is a significant relationship between the fitted values and the age of the sparrows, i.e., the coefficients will be (very close to) one, and the *p*-value will be small (close to zero). The fitted values are the predicted values of the dependent variable based on the model, and so they should be perfectly linearly related to the predictor used in the original model (age). Fitting a regression on fitted values should reveal a linear trend (a slope of one), since any such trend would have been fully captured by the model already.`r if (params$hide_answers) ":::"`## Question 2Find your own **two datasets** and do a full regression analysis on it. Briefly describe the data and the reason for their existence. Start with setting the appropriate hypotheses. Follow with an EDA, make some exploratory figures, fit the linear model, make a figure with the fitted linear model, provide diagnostic plots to test assumptions, and present the output in a Results section suitable for publication. **(/20)**### Rubric| **Criterion** | **Excellent (Full Marks)** | **Partial Credit** | **Absent / Poor** | **Marks** ||---------------|-----------------------------|---------------------|--------------------|-----------|| **1. Dataset Choice and Justification (/2)** | Two datasets are clearly described, relevant, and non-trivial; rationale for use is coherent and shows critical thought. | Datasets are described but may be simplistic or rationale is weakly justified. | Datasets are vague, trivial, or arbitrarily chosen; little to no justification. | /2 || **2. Hypothesis Framing (/2)** | Null and alternative hypotheses are clearly stated in statistical terms and contextualised to the data. | Hypotheses are present but somewhat vague or generic. | Hypotheses are missing, poorly framed, or irrelevant. | /2 || **3. Exploratory Data Analysis (/3)** | EDA is systematic and insightful, summarising variable distributions, identifying patterns, and flagging potential issues (e.g., collinearity, missingness). | Some descriptive statistics or plots are provided, but interpretation is limited or scattered. | Minimal or no EDA; data analysed without exploration. | /3 || **4. Exploratory Figures (/2)** | Visuals (e.g., scatterplots, histograms) are well-chosen, clearly labelled, and aid interpretation. | Plots are included but may be unclear, redundant, or poorly formatted. | Plots are missing or irrelevant. | /2 || **5. Model Specification and Fitting (/3)** | Linear model is appropriate for the data and research question; code and output are clearly reported. | Model is mostly appropriate but poorly justified or inconsistently executed. | Model is ill-suited, poorly fitted, or lacks documentation. | /3 || **6. Visualisation of Fitted Model (/2)** | Plot with fitted regression line is clear, with aesthetic attention to axis labels, units, and legends; enhances interpretation. | A fitted model is plotted but poorly presented or not fully interpretable. | No fitted model plot, or plot is meaningless. | /2 || **7. Diagnostic Checks (/3)** | At least two appropriate diagnostic plots (e.g., residuals vs fitted, QQ-plot) are shown and interpreted in light of linear model assumptions (normality, etc.). | Diagnostics shown but with weak interpretation or partially inappropriate diagnostics. | Diagnostics missing, or plots are included without explanation. | /3 || **8. Written Results Section (/3)** | Results are reported in a concise, publication-ready format with appropriate terminology (e.g., coefficient estimates, *p*-values, R²) and clear narrative flow. | Results are understandable but lack polish, completeness, or clarity; some technical terms used inaccurately. | Results are disorganised, incorrectly interpreted, or copied without synthesis. | /3 |**Total: /20**# 10. Correlations## Question 3Find your own **two datasets** and do a full correlation analysis on it. Briefly describe the data and the reason for their existence. Start with setting the appropriate hypotheses. Follow with an EDA, make some exploratory figures, fit the correlation, make figures with the fitted correlation line, provide diagnostic plots to test assumptions, and present the output in a Results section suitable for publication. **(/20)**### Rubric| **Criterion** | **Excellent (Full Marks)** | **Partial Credit** | **Absent / Poor** | **Marks** ||---------------|-----------------------------|---------------------|--------------------|-----------|| **1. Dataset Choice and Justification (/2)** | Two variables (from one or more datasets) are clearly described and justified as candidates for correlation analysis; rationale is thoughtful and contextually informed. | Variables are chosen and described but rationale is vague or unconvincing. | Variable selection appears arbitrary or trivial; little or no justification given. | /2 || **2. Hypothesis Framing (/2)** | Null and alternative hypotheses are explicitly stated and aligned with the correlation analysis (e.g., *H₀*: ρ = 0). Contextual meaning is clearly explained. | Hypotheses are present but poorly articulated or lacking in contextual relevance. | Hypotheses are missing, incorrect, or misaligned with the analysis. | /2 || **3. Exploratory Data Analysis (/3)** | EDA includes summary statistics, variable distribution inspection, and consideration of linearity or monotonicity. Potential issues (e.g., outliers) are noted. | EDA is attempted but lacks depth or overlooks important features such as skewness or linearity. | No meaningful EDA is performed before conducting correlation. | /3 || **4. Exploratory Figures (/2)** | Appropriate visualisation (e.g., scatterplot with smoothing line or marginal histograms) is clear, labelled, and supports interpretation. | Plot is included but unclear, poorly formatted, or not well interpreted. | No plot provided, or plot is irrelevant or uninformative. | /2 || **5. Correlation Method and Calculation (/3)** | Correlation method is appropriate to data characteristics (Pearson/Spearman chosen with justification). Code and output are correct and clearly reported. | Method is used correctly but without justification or with some reporting issues. | Correlation is applied blindly or incorrectly; code or output is missing. | /3 || **6. Significance and Effect Size (/2)** | *p*-value and correlation coefficient (r or ρ) are reported with interpretation of both statistical and practical significance. | Results are reported but not clearly interpreted or contextualised. | Misinterpretation of *p*-value or correlation coefficient; missing output. | /2 || **7. Assumption Checking and Discussion (/3)** | Addresses assumptions of correlation method (e.g., normality, linearity, absence of outliers), supported by appropriate plots or discussion. | Some assumptions discussed or partially checked; reasoning may be unclear. | No discussion or evidence of assumption checking. | /3 || **8. Written Results Section (/3)** | Results are presented in a clear, concise, publication-ready format, with technical correctness and logical flow from EDA to conclusion. | Results are readable but disorganised or use imprecise language; conclusions may not follow cleanly from evidence. | Results are unclear, incorrect, or unstructured; poor communication of findings. | /3 |**Total: /20**