Exploratory Factor Analysis of Student Satisfaction with Remote Learning
1. Background
1.1 Introduction
Despite efforts to push full-on face-to-face classes, many schools in the Philippines remained hesitant to implement them due to the risks of COVID-19. For some academic institutions, however, the option was to either adapt a hybrid system and eventually shift back to in-person learning once the pandemic had subsided or to accept distance learning as the new normal.
As we reflected on the challenges faced by students in a remote learning environment, several key issues emerged. These included unreliable internet connectivity and the absence of appropriate learning devices, which hindered participation in synchronous classes and the submission of course requirements (Baticulon et al., 2020; Santos, 2020). Negative experiences such as limited engagement in synchronous lectures, increased distractions, difficulties in comprehending lessons, and delays in the exchange of responses and feedback also significantly impacted their overall learning experience (Bai et al., 2021). Furthermore, two surveys conducted by the UP System Committee on Remote Teaching and Learning in November 2020 and July 2021 revealed that 80% of students felt academically overwhelmed, while only 30% expressed satisfaction with their learning experiences (Lontoc, 2021).
In response to this dilemma, it is crucial to evaluate the academic effectiveness of prior remote learning systems to assist administrations in their decision-making processes. As highlighted by Joaquin et al. (2020), learning innovations must have a deeper understanding of what remote education is by looking at factors such as instructor’s capacity, student’s circumstance, and learning environment efficiency together with the more evident issues of network connection speed, cost of materials, and mode of instruction.
1.2. Objectives
This report analyzes survey data on the educational backgrounds of undergraduate University of the Philippines (UP) students, their satisfaction, and perceived academic performance during the fully implemented remote learning setup. The specific objectives are:
- To describe the respondents' demographics.
- To examine the relationships between educational background, student satisfaction, and perceived academic performance.
- To identify the best latent factor structure for student satisfaction with remote learning.
1.3. The Data
An online survey was used to collect data near the end of the first semester of Academic Year 2021-2022. Convenience sampling was employed due to limited resources, time, and the exploratory nature of the study. The participants included 150 undergraduate students from the UP System who were enrolled at the time. The survey data includes the following three sections:
1.3.1. Education
Information on a student's educational background and the Learning Management Systems (LMSs) used in their online classes.
| Variable Name | Description |
|---|---|
| id | Unique identification number assigned to a student participant |
| constituent | UP constituent university where a student was enrolled at the time of the survey |
| program | Degree program of a student at the time of the survey |
| year_standing | Year level standing of a student at the time of the survey |
| lms | Learning Management System/s used by a student in virtual classes at the time of the survey |
1.3.2. Satisfaction
A student's level of agreement with the statements in the 20-item UP Student Satisfaction Scale (UPSSS), measured on a scale from 1 (Strongly Disagree) to 7 (Strongly Agree).
| Variable Name | Description |
|---|---|
| upsss1 | Most of my professors organized a platform (e.g. UVLe, Google Classroom, Canvas, etc.) in such a way that I can easily find the content that I need. |
| upsss2 | Most of my professors used a platform (e.g. UVLe, Google Classroom, Canvas, etc.) that is reliable, stable, and secure. |
| upsss3 | Most of my professors used a platform (e.g. UVLe, Google Classroom, Canvas, etc.) for me to keep track of my learning progress. |
| upsss4 | Most of my professors provided the content that I need to learn the lessons (e.g. lecture notes, zoom recordings, video lectures, etc.). |
| upsss5 | In general, my professors utilized the available tools and platforms effectively. |
| upsss6 | Most of my professors assigned a reasonable amount of course requirements. |
| upsss7 | Most of my professors announced the details of requirements according to the date stated in the course schedule. |
| upsss8 | Most of my professors gave a sufficient amount of time to accomplish the course requirements. |
| upsss9 | Most of my professors provided feedback to my submissions in a justifiable time. |
| upsss10 | Most of my professors carried out synchronous classes in a stable and smooth manner. |
| upsss11 | Most of my professors were compassionate in hearing the students' concerns about their courses and current well-being. |
| upsss12 | I accessed the university's online library which provides the content that I need (e.g. journals, references, etc.). |
| upsss13 | I accessed the university's online library which provides up-to-date content. |
| upsss14 | I used the available services provided by the university in my study (e.g. UP mail can be used to access free Office, Canva for Education, unlimited Google Drive storage, etc.). |
| upsss15 | The university's registration process was smooth and straightforward. |
| upsss16 | I enlisted all the subjects that I needed in this semester. |
| upsss17 | The semester's length is adequate. |
| upsss18 | The university hears the students' concerns when it comes to issues such as academic ease due to our current situation. |
| upsss19 | I believe the university's remote learning setup was organized in a way that is conducive to learning. |
| upsss20 | As a whole, I am satisfied with the university's remote learning setup this semester. |
1.3.3. Academic Performance
A student's level of agreement with the statements in the 7-item Student Perception on Academic Performance Scale (SPAPS), measured on a scale from 1 (Strongly Disagree) to 7 (Strongly Agree).
| Variable Name | Description |
|---|---|
| spaps1 | I was able to submit all my requirements this semester on time. |
| spaps2 | I was able to think critically and logically while doing my requirements. |
| spaps3 | I was able to provide and receive feedback on my requirements. |
| spaps4 | I was able to apply the feedback that I received. |
| spaps5 | I was able to achieve all of my courses’ objectives. |
| spaps6 | I made sure that I study for my courses every day. |
| spaps7 | I believe I can get a general weighted average (GWA) of at least 1.75 this semester. |
# Load necessary libraries
library(tidyverse)
library(dplyr)
# Import dataset
data <- read_csv("data/survey_data.csv", show_col_types = FALSE)2. Exploratory Data Analysis (EDA)
## Data Understanding
# View the data
head(data)
tail(data)
# View column names
colnames(data)
# Display counts for categorical variables
table(data$constituent)
table(data$program)
table(data$year_standing)
table(data$lms)
# Display summary statistics for numerical variables
summary(data[, sapply(data, is.numeric)])
# Check for missing values
sum(is.na(data))
## Data Preparation
# Define the standardization function for program variable
standardize_program <- function(input_text) {
cleaned <- str_to_title(input_text)
cleaned <- str_replace_all(cleaned, "Bs ", "BS ")
cleaned <- str_replace_all(cleaned, "Vs ", "BS ")
cleaned <- str_replace_all(cleaned, "Ba ", "BA ")
cleaned <- str_replace_all(cleaned, " Of ", " of ")
cleaned <- str_replace_all(cleaned, " In ", " in ")
cleaned <- str_replace_all(cleaned, " And ", " and ")
cleaned <- str_replace_all(cleaned, "BS in", "BS")
cleaned <- str_replace_all(cleaned, "Bachelor of Science in", "BS")
cleaned <- str_replace_all(cleaned, "Bachelor of", "B")
if (str_detect(cleaned, "^BA Social Science") &&
str_detect(cleaned, "Economics")) {
return("BA Social Sciences (Economics)")
} else if (str_detect(cleaned, "^B Secondary Education")) {
return("B Secondary Education")
} else if (str_detect(cleaned, "^BS Biology")) {
return("BS Biology")
} else if (str_detect(cleaned, "^Bfa")) {
return("B Fine Arts")
} else {
return(cleaned)
}
}
# Clean the data
data <- data %>%
mutate(
program = sapply(program, standardize_program), # Standardize program column
constituent = str_replace(constituent, "Banos", "Baños"), # "Banos" to "Baños" in constituent column
year_standing = factor(year_standing, levels = c("I", "II", "III", "IV", "V"), ordered = TRUE)
)# # ## Feature Understanding
# # ## Define count dataframes
# # # Count by program
# # program_cnts_df <- data %>%
# # count(program) %>%
# # arrange(desc(n))
# # # Count by constituent
# # constituent_cnts_df <- data %>%
# # count(constituent) %>%
# # arrange(n)
# # # Count by year standing
# # year_cnts_df <- data %>%
# # count(year_standing) %>%
# # arrange(year_standing)
# # ## Define count vectors
# # # Vectorize program df
# # program_cnts <- program_cnts_df$n
# # names(program_cnts) <- paste(program_cnts_df$program)
# # # Separate "Others" at the end
# # program_cnts <- c(
# # program_cnts[program_cnts > 1],
# # Others = sum(program_cnts[program_cnts == 1])
# # )
# # # Reverse bar order
# # program_cnts <- rev(program_cnts)
# # # Vectorize constituent df
# # constituent_cnts <- constituent_cnts_df$n
# # names(constituent_cnts) <- paste(constituent_cnts_df$constituent)
# # # Vectorize year standing df
# # year_cnts <- year_cnts_df$n
# # names(year_cnts) <- paste(year_cnts_df$year_standing)
# # # Set margins and label spacing
# # par(mar = c(5, 22, 2, 5))
# # # Bar plot
# # program_cnts_midpts <- barplot(
# # program_cnts,
# # col = "steelblue",
# # horiz = TRUE,
# # xlab = "Number of Students",
# # ylab = "",
# # las = 1,
# # xlim = c(0, max(program_cnts) + 15)
# # )
# # # Add left-adjusted title and text labels above bars
# # title(main = "Number of Students\nby Undergraduate Program", adj = 0)
# # text(
# # x = program_cnts,
# # y = program_cnts_midpts,
# # label = program_cnts,
# # pos = 4
# # )
# # # Set margins and label spacing
# # par(mar = c(5, 22, 2, 5))
# # # Bar plot
# # constituent_cnts_midpts <- barplot(
# # constituent_cnts,
# # col = "steelblue",
# # horiz = TRUE,
# # xlab = "Number of Students",
# # ylab = "",
# # las = 1,
# # xlim = c(0, max(constituent_cnts) + 30)
# # )
# # # Add left-adjusted title and text labels above bars
# # title(main = "Number of Students\nby Constituent", adj = 0)
# # text(
# # x = constituent_cnts,
# # y = constituent_cnts_midpts,
# # label = constituent_cnts,
# # pos = 4
# # )
# # # Set margins and label spacing
# # par(mar = c(5, 22, 2, 5))
# # # Bar plot
# # year_cnts_midpts <- barplot(
# # year_cnts,
# # col = "steelblue",
# # horiz = TRUE,
# # xlab = "Number of Students",
# # ylab = "",
# # las = 1,
# # xlim = c(0, max(year_cnts) + 15)
# # )
# # # Title
# # title(main = "Number of Students\nby Year Standing", adj = 0)
# # # Add text labels above bars
# # text(
# # y = year_cnts_midpts,
# # x = year_cnts,
# # label = year_cnts,
# # pos = 4
# # )
# # Create a horizontal bar plot
# horiz_barplot <- function(data,
# variable=NULL,
# others=FALSE,
# others.p=NULL,
# mar=NULL,
# col="steelblue",
# title=NULL,
# cex.main=NULL,
# xlab=NULL,
# ylab=NULL,
# xlim_adj=0) {
# # Separate "Others" at the end
# if(others==TRUE & !is.null(others.p)) {
# # Define count dataframe
# cnts_df <- data %>%
# group_by(!!sym(variable)) %>%
# summarize(n=n()) %>%
# arrange(., desc(n))
# # Define count vector
# cnts <- cnts_df$n
# names(cnts) <- paste(cnts_df[[variable]])
# # Separate "Others" at the end
# cnts <- c(
# cnts[cnts > others.p],
# Others = sum(cnts[cnts <= others.p])
# )
# # Reverse bar order
# cnts <- rev(cnts)
# } else {
# # Define count dataframe
# cnts_df <- data %>%
# count(!!sym(variable)) %>%
# arrange(., n)
# # Define count vector
# cnts <- cnts_df$n
# names(cnts) <- paste(cnts_df[[variable]])
# }
# # Set margins and label spacing
# par(mar = mar)
# # Display bar plot
# cnts_midpts <- barplot(
# cnts,
# col = col,
# horiz = TRUE,
# xlab = "Number of Students",
# ylab = "",
# las = 1,
# xlim = c(0, max(cnts) + xlim_adj)
# )
# # Add left-adjusted title and text labels above bars
# title(main = title, adj = 0, cex.main = cex.main)
# text(
# x = cnts,
# y = cnts_midpts,
# label = cnts,
# pos = 4
# )
# }
# # Define a function for horizontal bar plot of counts
# horiz_barplot <- function(data,
# variable=NULL,
# summ_var=NULL,
# summ_fun=NULL,
# na.rm=TRUE,
# others=FALSE,
# others.p=NULL,
# mar=NULL,
# col="steelblue",
# title=NULL,
# cex.main=NULL,
# xlab=NULL,
# ylab=NULL,
# xlim_adj=0) {
# # Separate "Others" at the end
# if(others==TRUE & !is.null(others.p)) {
# # Define count dataframe
# if(is.null(summ_var)){
# # Create a name for the summary column, e.g., "mean_mpg"
# summ_col <- "count"
# cnts_df <- data %>%
# group_by(!!sym(variable)) %>%
# summarize(count = n()) %>%
# arrange(., desc(count))
# } else {
# # Create a name for the summary column, e.g., "mean_mpg"
# summ_col <- paste(summ_fun, summ_var, sep = "_")
# cnts_df <- data %>%
# group_by(!!sym(variable)) %>%
# summarize(!!summ_col := get(summ_fun)(!!sym(summ_var), na.rm = na.rm)) %>%
# arrange(., desc(!!summ_col))
# }
# # Define count vector
# cnts <- as.vector(cnts_df[[summ_col]])
# names(cnts) <- paste(cnts_df[[variable]])
# # Separate "Others" at the end
# cnts <- c(
# cnts[cnts > others.p],
# Others = sum(cnts[cnts <= others.p])
# )
# # Reverse bar order
# cnts <- rev(cnts)
# } else {
# # Define count dataframe
# if(is.null(summ_var)){
# # Create a name for the summary column, e.g., "mean_mpg"
# summ_col <- "count"
# cnts_df <- data %>%
# group_by(!!sym(variable)) %>%
# summarize(count = n())
# } else {
# # Create a name for the summary column, e.g., "mean_mpg"
# summ_col <- paste(summ_fun, summ_var, sep = "_")
# cnts_df <- data %>%
# group_by(!!sym(variable)) %>%
# summarize(!!summ_col := get(summ_fun)(!!sym(summ_var), na.rm = na.rm))
# }
# # Define count vector
# cnts <- as.vector(cnts_df[[summ_col]])
# names(cnts) <- paste(cnts_df[[variable]])
# }
# # Set margins and label spacing
# par(mar = mar)
# # Display bar plot
# cnts_midpts <- barplot(
# cnts,
# col = col,
# horiz = TRUE,
# xlab = xlab,
# ylab = ylab,
# las = 1,
# xlim = c(0, max(cnts) + xlim_adj)
# )
# # Add left-adjusted title and text labels above bars
# title(main = title, adj = 0, cex.main = cex.main)
# text(
# x = cnts,
# y = cnts_midpts,
# label = cnts,
# pos = 4
# )
# }
# library(skimr)
# upsss_long %>%
# group_by(item_code, variable) %>%
# skim() %>%
# filter(skim_type == "numeric") %>%
# as.data.frame()
# percent(avg_upsss1_ratingPerc, accuracy=0.1)
# # Create a vector of student rating sums & percent
# upsss_ratingSum <- tapply(upsss_long$rating, upsss_long$id, sum)
# upsss_ratingPerc <- tapply(upsss_long$rating, upsss_long$id, sum)/(7*length(unique(upsss_long$variable)))
# # Compute average
# avg_upsss_ratingSum <- sum(upsss_ratingSum)/length(upsss_ratingSum)
# avg_upsss_ratingPerc <- sum(upsss_ratingPerc)/length(upsss_ratingPerc)
# library(scales, quiet=TRUE)
# round(avg_upsss_ratingSum, 1) # out of 140
# percent(avg_upsss_ratingPerc, accuracy=0.1)
# ## Overall Student Satisfaction with Remote Learning
# upsss_1_long <- filter(upsss_long, item_code=="upsss1")
# ## Overall Student Satisfaction with Remote Learning
# # Create a vector of student rating sums & percent
# upsss1_ratingSum <- tapply(upsss_1_long$rating, upsss_1_long$id, sum)
# upsss1_ratingPerc <- tapply(upsss_1_long$rating, upsss_1_long$id, sum)/(7*length(unique(upsss_1_long$variable)))
# # Compute average
# avg_upsss1_ratingSum <- sum(upsss1_ratingSum)/length(upsss1_ratingSum)
# avg_upsss1_ratingPerc <- sum(upsss1_ratingPerc)/length(upsss1_ratingPerc)
# library(scales, quiet=TRUE)
# round(avg_upsss1_ratingSum, 1) # out of 140
# percent(avg_upsss1_ratingPerc, accuracy=0.1)2.1. Demographics
2.1.1. Educational Background
# Define a function for a horizontal bar plot of counts
horiz_barplot <- function(data,
variable=NULL,
others=FALSE,
others.p=NULL,
col="steelblue",
title=NULL,
xlab=NULL,
ylab=NULL,
xlim_adj=0) {
# Separate "Others" at the end
if(others==TRUE & !is.null(others.p)) {
# Define count dataframe
cnts_df <- data %>%
count(!!sym(variable)) %>%
arrange(., desc(n))
# Define count vector
cnts <- cnts_df$n
names(cnts) <- paste(cnts_df[[variable]])
# Separate "Others" at the end
cnts <- c(
cnts[cnts > others.p],
Others = sum(cnts[cnts <= others.p])
)
# Reverse bar order
cnts <- rev(cnts)
} else {
# Define count dataframe
cnts_df <- data %>%
count(!!sym(variable)) %>%
arrange(., n)
# Define count vector
cnts <- cnts_df$n
names(cnts) <- paste(cnts_df[[variable]])
}
# Set margins and label spacing
par(mar = c(5, 22, 2, 5))
# Display bar plot
cnts_midpts <- barplot(
cnts,
col = col,
horiz = TRUE,
xlab = "Number of Students",
ylab = "",
las = 1,
xlim = c(0, max(cnts) + xlim_adj)
)
# Add left-adjusted title and text labels above bars
title(main = title, adj = 0)
text(
x = cnts,
y = cnts_midpts,
label = cnts,
pos = 4
)
}
horiz_barplot(data, variable="program", others=TRUE, others.p=1, xlim_adj=15)
horiz_barplot(data, variable="constituent", xlim_adj=35)
horiz_barplot(data, variable="year_standing", xlim_adj=15)## Feature Understanding
# Define a function for a horizontal bar plot of counts
horiz_barplot <- function(data,
variable=NULL,
arrange=FALSE,
title=NULL,
others=FALSE,
others.param=NULL,
rev=FALSE,
xlim_adj=0) {
if (others==FALSE) {
cnts_df <- data %>%
count(!!sym(variable)) %>%
{
if (arrange=FALSE) {
arrange(., !!sym(variable))
} else {
arrange(., desc(!!sym(variable)))
}
}
}
}
filter(!!sym(variable) != "No Data") %>%
group_by(!!sym(variable)) %>%
summarise(Count = n(), .groups="drop") %>%
{
if (is.ordered(data[[variable]])) {
arrange(., desc(!!sym(variable)))
} else {
arrange(., desc(Count))
}
} %>%
mutate(Percentage = label_percent(accuracy=0.01)(Count/sum(Count)))
datatable(summarized_data %>% rename(!!variable := !!sym(variable)),
class="cell-border stripe",
options = list(dom=dom, searching=searching, pageLength=pageLength),
rownames=rownames,
caption=if (!is.null(caption)) htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
caption
) else NULL)
} else {
summarized_data <- data %>%
filter(!!sym(variable) != "No Data") %>%
group_by(!!sym(variable)) %>%
summarise(Count = n(), .groups="drop") %>%
{
if (is.ordered(data[[variable]])) {
arrange(., desc(!!sym(variable)))
} else {
arrange(., desc(Count))
}
} %>%
mutate(Percentage = label_percent(accuracy=0.01)(Count/sum(Count)))
datatable(summarized_data %>% rename(!!variable := !!sym(variable)),
class="cell-border stripe",
options = list(dom=dom, searching=searching, pageLength=pageLength),
rownames=rownames,
caption=if (!is.null(caption)) htmltools::tags$caption(
style = 'caption-side: top; text-align: center;',
caption
) else NULL)
}
}
# Count by program
program_cnts_df <- data %>%
count(program) %>%
arrange(desc(n))
# Define the vector for counts
program_cnts <- program_cnts_df$n
names(program_cnts) <- paste(program_cnts_df$program)
# Separate "Others" at the end
program_cnts <- c(
program_cnts[program_cnts > 1],
Others = sum(program_cnts[program_cnts == 1])
)
# Reverse bar order
program_cnts <- rev(program_cnts)
# Set margins and label spacing
par(mar = c(5, 22, 2, 5))
# Bar plot
program_cnts_midpts <- barplot(
program_cnts,
col = "steelblue",
horiz = TRUE,
xlab = "Number of Students",
ylab = "",
las = 1,
xlim = c(0, max(program_cnts) + 15)
)
# Add left-adjusted title and text labels above bars
title(main = "Number of Students\nby Undergraduate Program", adj = 0)
text(
x = program_cnts,
y = program_cnts_midpts,
label = program_cnts,
pos = 4
)
# Count by program
constituent_cnts_df <- data %>%
count(constituent) %>%
arrange(n)
# Define the vector for counts
constituent_cnts <- constituent_cnts_df$n
names(constituent_cnts) <- paste(constituent_cnts_df$constituent)
# Set margins and label spacing
par(mar = c(5, 22, 2, 5))
# Bar plot
constituent_cnts_midpts <- barplot(
constituent_cnts,
col = "steelblue",
horiz = TRUE,
xlab = "Number of Students",
ylab = "",
las = 1,
xlim = c(0, max(constituent_cnts) + 30)
)
# Add left-adjusted title and text labels above bars
title(main = "Number of Students\nby Constituent", adj = 0)
text(
x = constituent_cnts,
y = constituent_cnts_midpts,
label = constituent_cnts,
pos = 4
)
# Count by Year Standing
year_cnts_df <- data %>%
count(year_standing) %>%
arrange(year_standing)
# Define the vector for counts
year_cnts <- year_cnts_df$n
names(year_cnts) <- paste(year_cnts_df$year_standing)
# Set margins and label spacing
par(mar = c(5, 22, 2, 5))
# Bar plot
year_cnts_midpts <- barplot(
year_cnts,
col = "steelblue",
horiz = TRUE,,
xlab = "Number of Students",
ylab = "",
las = 1,
xlim = c(0, max(year_cnts) + 15)
)
# Title
title(main = "Number of Students\nby Year Standing", adj = 0)
# Add text labels above bars
text(
y = year_cnts_midpts,
x = year_cnts,
label = year_cnts,
pos = 4
)1 hidden cell
# Install and/or load the packages
suppressPackageStartupMessages(library(tidyverse))
suppressPackageStartupMessages(library(dplyr))
#suppressPackageStartupMessages(library(plyr))
suppressPackageStartupMessages(library(ggplot2))
#suppressPackageStartupMessages(library(scales))
# Import data sets
education <- read_csv("data/education.csv", show_col_types = FALSE)
satisfaction <- read_csv("data/satisfaction.csv", show_col_types = FALSE)
academic_performance <- read_csv("data/academic_performance.csv", show_col_types = FALSE)
# View the "education" data set
head(education)1.2.2. Student Satisfaction
A student's level of agreement with the statements in the 20-item UP Student Satisfaction Scale (UPS3), measured on a scale from 1 (Strongly Disagree) to 7 (Strongly Agree).
| Variable | Description |
|---|---|
| id | Unique identification number assigned to a student participant |
| ups3_1 | Most of my professors organized a platform (e.g. UVLe, Google Classroom, Canvas, etc.) in such a way that I can easily find the content that I need. |
| ups3_2 | Most of my professors used a platform (e.g. UVLe, Google Classroom, Canvas, etc.) that is reliable, stable, and secure. |
| ups3_3 | Most of my professors used a platform (e.g. UVLe, Google Classroom, Canvas, etc.) for me to keep track of my learning progress. |
| ups3_4 | Most of my professors provided the content that I need to learn the lessons (e.g. lecture notes, zoom recordings, video lectures, etc.). |
| ups3_5 | In general, my professors utilized the available tools and platforms effectively. |
| ups3_6 | Most of my professors assigned a reasonable amount of course requirements. |
| ups3_7 | Most of my professors announced the details of requirements according to the date stated in the course schedule. |
| ups3_8 | Most of my professors gave a sufficient amount of time to accomplish the course requirements. |
| ups3_9 | Most of my professors provided feedback to my submissions in a justifiable time. |
| ups3_10 | Most of my professors carried out synchronous classes in a stable and smooth manner. |
| ups3_11 | Most of my professors were compassionate in hearing the students' concerns about their courses and current well-being. |
| ups3_12 | I accessed the university's online library which provides the content that I need (e.g. journals, references, etc.). |
| ups3_13 | I accessed the university's online library which provides up-to-date content. |
| ups3_14 | I used the available services provided by the university in my study (e.g. UP mail can be used to access free Office, Canva for Education, unlimited Google Drive storage, etc.). |
| ups3_15 | The university's registration process was smooth and straightforward. |
| ups3_16 | I enlisted all the subjects that I needed in this semester. |
| ups3_17 | The semester's length is adequate. |
| ups3_18 | The university hears the students' concerns when it comes to issues such as academic ease due to our current situation. |
| ups3_19 | I believe the university's remote learning setup was organized in a way that is conducive to learning. |
| ups3_20 | As a whole, I am satisfied with the university's remote learning setup this semester. |
# View the "satisfaction" data set
head(satisfaction)1.2.3. Academic Performance
A student's level of agreement with the statements in the 7-item Student Perception on Academic Performance Scale (SPAPS), measured on a scale from 1 (Strongly Disagree) to 7 (Strongly Agree).
| Variable | Description |
|---|---|
| id | Unique identification number assigned to a student participant |
| spaps_1 | I was able to submit all my requirements this semester on time. |
| spaps_2 | I was able to think critically and logically while doing my requirements. |
| spaps_3 | I was able to provide and receive feedback on my requirements. |
| spaps_4 | I was able to apply the feedback that I received. |
| spaps_5 | I was able to achieve all of my courses’ objectives. |
| spaps_6 | I made sure that I study for my courses every day. |
| spaps_7 | I believe I can get a general weighted average (GWA) of at least 1.75 this semester. |
# View the "academic_peformance" data set
head(academic_performance)2. Results and Discussion
2.1. Demographics of the Respondents
2.1.1. Constituent University
Among the 150 UP Sytem student participants, 68.7% (103) were from Diliman, while 20% (30) were from Los Baños. The remaining constituents had percentages less than five, with Manila having 3.3% (5), Baguio having 2.7% (4), the Open University and Visayas both having 2% (3), and Cebu having 1% (2).