Quarto
Quarto enables you to weave together content and executable code into a finished document. To learn more about Quarto see https://quarto.org .
Running Code
When you click the Render button a document will be generated that includes both content and the output of embedded code. You can embed code like this:
Preparing the data
library (readr)
visual_comm <- read_csv ("visual_comm.csv" )
Rows: 3000 Columns: 20
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): Gender, Previous_Art_Experience, Teaching_Method, Feedback_Receive...
dbl (15): Student_ID, Age, Assignment_Completion_Time_Min, Participation_Rat...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
You can add options to executable code like this
Attaching package: 'dplyr'
The following objects are masked from 'package:stats':
filter, lag
The following objects are masked from 'package:base':
intersect, setdiff, setequal, union
visual_comm <- read_csv ("visual_comm.csv" )
── Column specification ────────────────────────────────────────────────────────
Delimiter: ","
chr (5): Gender, Previous_Art_Experience, Teaching_Method, Feedback_Receive...
dbl (15): Student_ID, Age, Assignment_Completion_Time_Min, Participation_Rat...
ℹ Use `spec()` to retrieve the full column specification for this data.
ℹ Specify the column types or set `show_col_types = FALSE` to quiet this message.
You can add options to executable code like this
spc_tbl_ [3,000 × 20] (S3: spec_tbl_df/tbl_df/tbl/data.frame)
$ Student_ID : num [1:3000] 1802 1191 1818 252 2506 ...
$ Age : num [1:3000] 29 26 21 27 27 29 20 29 26 22 ...
$ Gender : chr [1:3000] "Female" "Male" "Female" "Male" ...
$ Previous_Art_Experience : chr [1:3000] "Yes" "No" "No" "Yes" ...
$ Teaching_Method : chr [1:3000] "Traditional" "Traditional" "AIGC" "AIGC" ...
$ Assignment_Completion_Time_Min: num [1:3000] 40.1 42 44.8 56.9 26.3 ...
$ Participation_Rate_% : num [1:3000] 78.9 77.1 75.7 55.4 94.1 ...
$ Engagement_Score : num [1:3000] 78 75.8 74.5 54.8 93.7 ...
$ Creativity_Score_% : num [1:3000] 70.5 75.2 75.7 64.1 94.6 ...
$ Design_Assessment_Score : num [1:3000] 70.1 75.2 74.2 62.4 92.8 ...
$ Quiz_Score : num [1:3000] 73.2 75 79.9 68.8 98 ...
$ Artistic_Style_Mastery : num [1:3000] 68.4 76.3 74.7 62.1 96.2 ...
$ Feedback_Received : chr [1:3000] "Yes" "Yes" "Yes" "Yes" ...
$ Feedback_Satisfaction_Score : num [1:3000] 5 5 5 5 5 5 5 5 5 5 ...
$ Adaptive_Content_Used : chr [1:3000] "Yes" "No" "No" "No" ...
$ Visual_Quality_Rating : num [1:3000] 5 5 5 5 5.37 5 5 5.53 5 5.89 ...
$ Skill_Improvement_% : num [1:3000] 32.6 37 38.4 26.8 57 ...
$ Motivation_Increase_% : num [1:3000] 39.4 38.7 35.9 17.8 55.3 ...
$ Perceived_Content_Relevance : num [1:3000] 5 5 5 5 5.37 5 5 5.53 5 5.89 ...
$ Teaching_Effectiveness_Label : num [1:3000] 1 1 1 0 2 1 1 2 0 2 ...
- attr(*, "spec")=
.. cols(
.. Student_ID = col_double(),
.. Age = col_double(),
.. Gender = col_character(),
.. Previous_Art_Experience = col_character(),
.. Teaching_Method = col_character(),
.. Assignment_Completion_Time_Min = col_double(),
.. `Participation_Rate_%` = col_double(),
.. Engagement_Score = col_double(),
.. `Creativity_Score_%` = col_double(),
.. Design_Assessment_Score = col_double(),
.. Quiz_Score = col_double(),
.. Artistic_Style_Mastery = col_double(),
.. Feedback_Received = col_character(),
.. Feedback_Satisfaction_Score = col_double(),
.. Adaptive_Content_Used = col_character(),
.. Visual_Quality_Rating = col_double(),
.. `Skill_Improvement_%` = col_double(),
.. `Motivation_Increase_%` = col_double(),
.. Perceived_Content_Relevance = col_double(),
.. Teaching_Effectiveness_Label = col_double()
.. )
- attr(*, "problems")=<externalptr>
Converting categorical variables to factors:
visual_comm <- visual_comm %>%
mutate (
Gender = as.factor (Gender),
Teaching_Method = as.factor (Teaching_Method),
Feedback_Received = as.factor (Feedback_Received),
Adaptive_Content_Used = as.factor (Adaptive_Content_Used)
)
[1] "Student_ID" "Age"
[3] "Gender" "Previous_Art_Experience"
[5] "Teaching_Method" "Assignment_Completion_Time_Min"
[7] "Participation_Rate_%" "Engagement_Score"
[9] "Creativity_Score_%" "Design_Assessment_Score"
[11] "Quiz_Score" "Artistic_Style_Mastery"
[13] "Feedback_Received" "Feedback_Satisfaction_Score"
[15] "Adaptive_Content_Used" "Visual_Quality_Rating"
[17] "Skill_Improvement_%" "Motivation_Increase_%"
[19] "Perceived_Content_Relevance" "Teaching_Effectiveness_Label"
visual_comm$ ` Participation_Rate_% ` <- as.numeric (visual_comm$ ` Participation_Rate_% ` )
names (visual_comm) <- gsub ("%" , "Percent" , names (visual_comm))
Confirming the key variables being numeric
visual_comm$ Engagement_Score <- as.numeric (visual_comm$ Engagement_Score)
visual_comm$ Participation_Rate_Percent <- as.numeric (visual_comm$ Participation_Rate_Percent)
visual_comm$ Feedback_Satisfaction_Score <- as.numeric (visual_comm$ Feedback_Satisfaction_Score)
RQ1: Engagement → Satisfaction
Descriptive statistics
summary (visual_comm$ Engagement_Score)
Min. 1st Qu. Median Mean 3rd Qu. Max.
50.03 57.61 74.98 75.04 92.66 100.00
summary (visual_comm$ Feedback_Satisfaction_Score)
Min. 1st Qu. Median Mean 3rd Qu. Max.
1.000 2.000 3.000 2.906 5.000 5.000
sd (visual_comm$ Engagement_Score, na.rm = TRUE )
sd (visual_comm$ Feedback_Satisfaction_Score, na.rm = TRUE )
Correlation (RQ1 main relationship)
cor.test (
visual_comm$ Engagement_Score,
visual_comm$ Feedback_Satisfaction_Score,
use = "complete.obs"
)
Pearson's product-moment correlation
data: visual_comm$Engagement_Score and visual_comm$Feedback_Satisfaction_Score
t = -1.2604, df = 2998, p-value = 0.2076
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.05875077 0.01278438
sample estimates:
cor
-0.02301265
Regression Model as a way to tests the effect of engagement and of receiving feedback
model_rq1 <- lm (
Feedback_Satisfaction_Score ~ Engagement_Score + Feedback_Received,
data = visual_comm
)
summary (model_rq1)
Call:
lm(formula = Feedback_Satisfaction_Score ~ Engagement_Score +
Feedback_Received, data = visual_comm)
Residuals:
Min 1Q Median 3Q Max
-2.05293 -0.94868 0.04596 2.05377 2.15228
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.160086 0.179563 17.599 <2e-16 ***
Engagement_Score -0.002129 0.001687 -1.262 0.207
Feedback_ReceivedYes -0.099459 0.130261 -0.764 0.445
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.53 on 2997 degrees of freedom
Multiple R-squared: 0.000724, Adjusted R-squared: 5.712e-05
F-statistic: 1.086 on 2 and 2997 DF, p-value: 0.3378
Correlation for RQ2: Participation (Login proxy) → Satisfaction
cor.test (
visual_comm$ Participation_Rate_Percent,
visual_comm$ Feedback_Satisfaction_Score,
use = "complete.obs"
)
Pearson's product-moment correlation
data: visual_comm$Participation_Rate_Percent and visual_comm$Feedback_Satisfaction_Score
t = -1.3334, df = 2998, p-value = 0.1825
alternative hypothesis: true correlation is not equal to 0
95 percent confidence interval:
-0.06007947 0.01145117
sample estimates:
cor
-0.02434531
You can add options to executable code like this
model_rq2 <- lm (
Feedback_Satisfaction_Score ~ Participation_Rate_Percent,
data = visual_comm
)
summary (model_rq2)
Call:
lm(formula = Feedback_Satisfaction_Score ~ Participation_Rate_Percent,
data = visual_comm)
Residuals:
Min 1Q Median 3Q Max
-1.96493 -0.95209 0.03972 2.04968 2.15483
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.079163 0.133081 23.138 <2e-16 ***
Participation_Rate_Percent -0.002239 0.001679 -1.333 0.183
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.53 on 2998 degrees of freedom
Multiple R-squared: 0.0005927, Adjusted R-squared: 0.0002593
F-statistic: 1.778 on 1 and 2998 DF, p-value: 0.1825
Combined Model
final_model <- lm (
Feedback_Satisfaction_Score ~
Engagement_Score +
Participation_Rate_Percent +
Feedback_Received +
Age + Gender,
data = visual_comm
)
summary (final_model)
Call:
lm(formula = Feedback_Satisfaction_Score ~ Engagement_Score +
Participation_Rate_Percent + Feedback_Received + Age + Gender,
data = visual_comm)
Residuals:
Min 1Q Median 3Q Max
-2.12646 -0.98234 -0.01379 2.02538 2.26850
Coefficients:
Estimate Std. Error t value Pr(>|t|)
(Intercept) 3.401985 0.262123 12.979 <2e-16 ***
Engagement_Score 0.015155 0.019602 0.773 0.440
Participation_Rate_Percent -0.017323 0.019505 -0.888 0.375
Feedback_ReceivedYes -0.102195 0.130340 -0.784 0.433
Age -0.007111 0.007414 -0.959 0.338
GenderMale -0.077689 0.068641 -1.132 0.258
GenderOther 0.008574 0.068362 0.125 0.900
---
Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
Residual standard error: 1.53 on 2993 degrees of freedom
Multiple R-squared: 0.001958, Adjusted R-squared: -4.302e-05
F-statistic: 0.9785 on 6 and 2993 DF, p-value: 0.438
Checking for linearity, normality & homoscedasticity
par (mfrow = c (2 ,2 ))
plot (final_model)
Effect Size & Model Fit
summary (final_model)$ r.squared
summary (final_model)$ adj.r.squared