Bộ dữ liệu được sử dụng trong nghiên cứu này là một tập dữ liệu lớn thu thập thông tin từ 9.355 cá nhân đang làm việc trong các lĩnh vực liên quan đến Trí tuệ nhân tạo (AI) và Khoa học Dữ liệu trên toàn cầu. Dữ liệu được thu thập thông qua khảo sát trực tuyến vào năm gần đây, nhằm phản ánh tình hình nhân lực, điều kiện làm việc và xu hướng nghề nghiệp trong ngành AI/Dữ liệu.
LỜI CẢM ƠN
Lời đầu tiên, em xin gửi lời cảm ơn chân thành đến Giảng viên - ThS. Trần Mạnh Tường. Trong quá trình học tập và tìm hiểu môn “Phân tích dữ liệu định tính”, em đã nhận được sự quan tâm giúp đỡ, hướng dẫn và chỉ bảo tận tình của thầy. Thầy đã giúp em tích lũy thêm nhiều kiến thức để có cái nhìn khái quát và hiểu hơn về môn học này. Từ những kiến thức được thầy truyền tải, em dần hiểu được tầm quan trọng của môn học mà bấy lâu nay còn nhiều thắc mắc. Thông qua bài tiểu luận này, em xin trình bày những gì em đã tìm hiểu về môn học, và cụ thể là em lựa chọn đề tài “Phân tích những yếu tố ảnh hưởng đến mức độ tiêu thụ rượu của sinh viên”.
Kiến thức là vô hạn nhưng sự tiếp nhận kiến thức của bản thân em luôn có những hạn chế nhất định. Do đó, trong quá trình hoàn thành bài tiểu luận, chắc chắn em không tránh khỏi những thiếu sót, vậy nên em rất mong nhận được những góp ý từ thầy để bài tiểu luận được hoàn thiện hơn.
Em kính chúc thầy sức khỏe, hạnh phúc và thành công trên con đường sự nghiệp của mình.
Trong bối cảnh cách mạng công nghiệp 4.0, Trí tuệ nhân tạo (AI) và Khoa học Dữ liệu đang trở thành những lĩnh vực then chốt thúc đẩy đổi mới sáng tạo và phát triển kinh tế. Sự gia tăng nhu cầu về nhân lực AI không chỉ đòi hỏi chuyên môn kỹ thuật cao mà còn tạo ra những thay đổi đáng kể về môi trường làm việc và cơ cấu nghề nghiệp.
Hiện nay, các yếu tố như hình thức làm việc (Remote, Hybrid, In-person), loại hình công việc (Full-time, Part-time, Contract, Freelance), và quy mô doanh nghiệp đóng vai trò quan trọng trong việc định hình cấp bậc kinh nghiệm cũng như sự lựa chọn môi trường làm việc của nhân sự AI/Dữ liệu.
Nghiên cứu này được thực hiện nhằm phân tích các yếu tố ảnh hưởng đến cấp bậc kinh nghiệm và hình thức làm việc của nhân sự trong lĩnh vực AI/Dữ liệu, từ đó đưa ra những nhận định và khuyến nghị để phát triển nguồn nhân lực phù hợp với xu hướng công nghệ hiện đại
Mục tiêu của nghiên cứu này là phân tích các yếu tố ảnh hưởng đến cấp bậc kinh nghiệm của nhân sự trong ngành Trí tuệ nhân tạo và Khoa học Dữ liệu, từ đó xác định các đặc điểm có liên quan đến khả năng đạt cấp bậc cao (Senior trở lên). Cụ thể, nghiên cứu tập trung đánh giá tác động của các yếu tố như loại hình công việc, hình thức làm việc, quy mô công ty, loại hợp đồng lao động và mức lương làm việc đến khả năng thăng tiến nghề nghiệp. Thông qua các phương pháp thống kê mô tả, kiểm định và mô hình hồi quy, nghiên cứu nhằm cung cấp bằng chứng thực nghiệm hỗ trợ việc định hướng nghề nghiệp và chính sách nhân sự trong lĩnh vực AI & Data Science.
Bộ dữ liệu nghiên cứu gồm 9.355 nhân sự trong lĩnh vực Trí tuệ nhân tạo (AI) và Khoa học Dữ liệu.
Nghiên cứu tập trung vào phân tích các yếu tố ảnh hưởng đến cấp bậc kinh nghiệm và hình thức làm việc của nhân sự trong lĩnh vực Trí tuệ nhân tạo (AI) và Khoa học Dữ liệu, dựa trên dữ liệu thu thập từ nhiều quốc gia và ngành nghề khác nhau. Phạm vi được giới hạn trong các biến liên quan đến đặc điểm nghề nghiệp và môi trường làm việc như loại hình công việc, quy mô công ty và nhóm nghề nghiệp.
Bài nghiên cứu sử dụng phương pháp thống kê và các mô hình hồi quy để phân tích dữ liệu, nhằm làm rõ tác động của các yếu tố như loại hình công việc, quy mô công ty, nhóm nghề nghiệp và cấp bậc kinh nghiệm đến hình thức làm việc (Remote, Hybrid, In-person) của nhân sự trong lĩnh vực Trí tuệ nhân tạo và Khoa học Dữ liệu.
Chương 1: Tổng quan nghiên cứu
Chương 2: Dữ liệu nghiên cứu
Chương 3: Kết quả phân tích
Chương 4: Kết luận
Bộ dữ liệu bao gồm 9355 quan sát, bao gồm 12 biến, với cả các biến định tính và định lượng. Ta có 9 biến định tính và 3 biến định lượng
d <-read.csv(file.choose(), header=T)
str(d)
## 'data.frame': 9355 obs. of 12 variables:
## $ work_year : int 2023 2023 2023 2023 2023 2023 2023 2023 2023 2023 ...
## $ job_title : chr "Data DevOps Engineer" "Data Architect" "Data Architect" "Data Scientist" ...
## $ job_category : chr "Data Engineering" "Data Architecture and Modeling" "Data Architecture and Modeling" "Data Science and Research" ...
## $ salary_currency : chr "EUR" "USD" "USD" "USD" ...
## $ salary : int 88000 186000 81800 212000 93300 130000 100000 224400 138700 210000 ...
## $ salary_in_usd : int 95012 186000 81800 212000 93300 130000 100000 224400 138700 210000 ...
## $ employee_residence: chr "Germany" "United States" "United States" "United States" ...
## $ experience_level : chr "Mid-level" "Senior" "Senior" "Senior" ...
## $ employment_type : chr "Full-time" "Full-time" "Full-time" "Full-time" ...
## $ work_setting : chr "Hybrid" "In-person" "In-person" "In-person" ...
## $ company_location : chr "Germany" "United States" "United States" "United States" ...
## $ company_size : chr "L" "M" "M" "M" ...
sum(is.na(d))
## [1] 0
Không có giá trị NA trong bộ dữ liệu
# Load thư viện
library(knitr)
## Warning: package 'knitr' was built under R version 4.3.3
# Tạo bảng mô tả biến
variable_explain <- data.frame(
Ten_Bien = c(
"job_title",
"job_category",
"salary_currency",
"employee_residence",
"experience_level",
"employment_type",
"work_setting",
"company_location",
"company_size",
"work_year",
"salary",
"salary_in_usd"
),
Y_Nghia = c(
"Chức danh công việc (ví dụ: Data Scientist, Machine Learning Engineer, ...)",
"Nhóm nghề nghiệp (ví dụ: Data Science and Research, Data Engineering, ...)",
"Loại tiền tệ lương được trả (USD, EUR, INR, ...)",
"Nơi cư trú của nhân viên (quốc gia hoặc vùng lãnh thổ)",
"Cấp bậc kinh nghiệm (Entry-level, Mid-level, Senior, Executive)",
"Loại hình công việc (Full-time, Part-time, Contract, Freelance)",
"Hình thức làm việc (Remote, Hybrid, In-person)",
"Vị trí công ty (quốc gia hoặc vùng lãnh thổ)",
"Quy mô công ty (Small, Medium, Large)",
"Năm làm việc (ví dụ: 2020, 2021, 2022)",
"Mức lương hàng năm trong đơn vị tiền tệ gốc",
"Mức lương hàng năm quy đổi sang USD"
)
)
# Hiển thị bảng với caption
kable(variable_explain, caption = "Giải thích các biến trong bộ dữ liệu Dataset.csv")
Ten_Bien | Y_Nghia |
---|---|
job_title | Chức danh công việc (ví dụ: Data Scientist, Machine Learning Engineer, …) |
job_category | Nhóm nghề nghiệp (ví dụ: Data Science and Research, Data Engineering, …) |
salary_currency | Loại tiền tệ lương được trả (USD, EUR, INR, …) |
employee_residence | Nơi cư trú của nhân viên (quốc gia hoặc vùng lãnh thổ) |
experience_level | Cấp bậc kinh nghiệm (Entry-level, Mid-level, Senior, Executive) |
employment_type | Loại hình công việc (Full-time, Part-time, Contract, Freelance) |
work_setting | Hình thức làm việc (Remote, Hybrid, In-person) |
company_location | Vị trí công ty (quốc gia hoặc vùng lãnh thổ) |
company_size | Quy mô công ty (Small, Medium, Large) |
work_year | Năm làm việc (ví dụ: 2020, 2021, 2022) |
salary | Mức lương hàng năm trong đơn vị tiền tệ gốc |
salary_in_usd | Mức lương hàng năm quy đổi sang USD |
Biến phụ thuộc
Loại: Biến định tính (categorical)
Mức: Entry-level, Mid-level, Senior, Executive
Ý nghĩa: Phản ánh cấp bậc kinh nghiệm của nhân sự trong ngành Trí tuệ nhân tạo (AI) và Khoa học Dữ liệu.
Mục đích phân tích: Xác định các yếu tố ảnh hưởng đến quá trình thăng tiến và tích lũy kinh nghiệm của nhân sự.
Biến độc lập
Loại: Biến định tính (categorical)
Mức: Remote, Hybrid, In-person
Ý nghĩa: Thể hiện xu hướng lựa chọn hình thức làm việc trong ngành AI/Dữ liệu.
Mục đích phân tích: Tìm hiểu các yếu tố tác động đến lựa chọn môi trường làm việc của nhân sự.
Loại: Biến định tính (categorical)
Mức: Full-time, Part-time, Contract, Freelance
Ý nghĩa: Loại hình công việc mà nhân sự đang làm.
Loại: Biến định tính (categorical)
Mức: Small, Medium, Large
Ý nghĩa: Quy mô công ty nơi nhân sự làm việc.
Loại: Biến định lượng (numerical)
Mức: Giá trị số (
Ý nghĩa: Mức lương quy đổi ra USD
Giải thích biến
# Load thư viện
library(knitr)
# 1. Bảng giải thích các mức của biến experience_level (biến phụ thuộc)
experience_levels <- data.frame(
Gia_tri = c("EN", "MI", "SE", "EX"),
Y_nghia = c(
"Entry-level: Nhân sự mới vào nghề hoặc có ít kinh nghiệm",
"Mid-level: Nhân sự có kinh nghiệm trung bình",
"Senior: Nhân sự cấp cao với kinh nghiệm phong phú",
"Executive: Vị trí quản lý hoặc điều hành cấp cao"
)
)
kable(experience_levels, caption = "Giải thích các mức độ trong biến experience_level")
Gia_tri | Y_nghia |
---|---|
EN | Entry-level: Nhân sự mới vào nghề hoặc có ít kinh nghiệm |
MI | Mid-level: Nhân sự có kinh nghiệm trung bình |
SE | Senior: Nhân sự cấp cao với kinh nghiệm phong phú |
EX | Executive: Vị trí quản lý hoặc điều hành cấp cao |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho experience_level (giữ nguyên mức gốc)
ts_exp_level <- table(d$experience_level)
# Tạo bảng dữ liệu
ts_exp_level_df <- data.frame(
Gia_tri = names(ts_exp_level),
Tan_so = as.vector(ts_exp_level),
Ty_le = round((as.vector(ts_exp_level) / sum(ts_exp_level)) * 100, 2)
)
# Hiển thị kết quả
ts_exp_level_df
## Gia_tri Tan_so Ty_le
## 1 Entry-level 496 5.30
## 2 Executive 281 3.00
## 3 Mid-level 1869 19.98
## 4 Senior 6709 71.72
Biểu đồ
# Tạo bảng tần suất cho experience_level
ts_exp_level <- table(d$experience_level)
# Tính tỷ lệ phần trăm
percent_exp_level <- round((ts_exp_level / sum(ts_exp_level)) * 100, 2)
# Tạo nhãn có tên mức + tỷ lệ
labels_exp_level <- paste(names(ts_exp_level), "(", percent_exp_level, "%)", sep="")
# Vẽ biểu đồ tròn
pie(ts_exp_level,
labels = labels_exp_level,
main = "Biểu đồ tròn: Kinh nghiệm làm việc (experience_level)",
col = rainbow(length(ts_exp_level)))
Nhận xét
Senior chiếm 71,72% (6.709 người) → đây là nhóm lớn nhất, cho thấy đa số nhân sự trong ngành AI/Dữ liệu hiện nay có kinh nghiệm cao.
Mid-level chiếm 19,98% (1.869 người) → nhóm có số lượng đứng thứ hai, phản ánh sự phát triển của nhân sự đang ở giai đoạn trung cấp.
Ngược lại, nhóm Entry-level chỉ chiếm 5,30% (496 người) và nhóm Executive – những người ở cấp quản lý cao nhất – chỉ chiếm 3,00% (281 người). Tỷ lệ thấp ở hai đầu này cho thấy ngành hiện đang thiếu hụt nguồn nhân lực mới và cũng có rất ít người đạt đến vị trí điều hành cấp cao.
Giải thích biến
#Bảng giải thích các mức của biến work_setting (biến phụ thuộc)
work_setting_levels <- data.frame(
Gia_tri = c("Remote", "Hybrid", "In-person"),
Y_nghia = c(
"Làm việc hoàn toàn từ xa",
"Kết hợp làm việc từ xa và tại văn phòng",
"Làm việc hoàn toàn tại văn phòng"
)
)
kable(work_setting_levels, caption = "Giải thích các mức độ trong biến work_setting")
Gia_tri | Y_nghia |
---|---|
Remote | Làm việc hoàn toàn từ xa |
Hybrid | Kết hợp làm việc từ xa và tại văn phòng |
In-person | Làm việc hoàn toàn tại văn phòng |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho work_setting
ts_work_setting <- table(d$work_setting)
# Tạo bảng dữ liệu
ts_work_setting_df <- data.frame(
Gia_tri = names(ts_work_setting),
Tan_so = as.vector(ts_work_setting),
Ty_le = round((as.vector(ts_work_setting) / sum(ts_work_setting)) * 100, 2)
)
# Hiển thị kết quả
ts_work_setting_df
## Gia_tri Tan_so Ty_le
## 1 Hybrid 191 2.04
## 2 In-person 5730 61.25
## 3 Remote 3434 36.71
Biểu đồ
# Tạo bảng tần suất cho work_setting
ts_work_setting <- table(d$work_setting)
# Tính tỷ lệ phần trăm
percent_work_setting <- round((ts_work_setting / sum(ts_work_setting)) * 100, 2)
# Tạo nhãn kết hợp tên mức và tỷ lệ %
labels_work_setting <- paste(names(ts_work_setting), "(", percent_work_setting, "%)", sep="")
# Vẽ biểu đồ tròn
pie(ts_work_setting,
labels = labels_work_setting,
main = "Biểu đồ tròn: Môi trường làm việc (work_setting)",
col = rainbow(length(ts_work_setting)))
Nhận xét
In-person (làm việc trực tiếp tại văn phòng) chiếm 61,25% (5.730 người) → cho thấy phần lớn nhân sự trong ngành AI/Dữ liệu chọn làm việc tại văn phòng.
Remote (làm việc hoàn toàn từ xa) chiếm 36,71% (3.434 người) → Đây là một con số khá lớn, cho thấy làm việc từ xa đang rất phổ biến trong ngành AI và Khoa học Dữ liệu. Điều này phản ánh đặc thù công việc có thể làm online và sự thay đổi trong cách doanh nghiệp chấp nhận mô hình làm việc linh hoạt hơn.
Hybrid (kết hợp cả hai hình thức) chỉ chiếm 2,04% (191 người) → mức rất thấp, cho thấy mô hình kết hợp giữa làm tại văn phòng và từ xa chưa phổ biến.
Giải thích biến
# Bảng giải thích các mức của biến company_size
company_size_levels <- data.frame(
Gia_tri = c("S", "M", "L"),
Y_nghia = c(
"S: Small (Dưới 50 nhân viên)",
"M: Medium (Từ 50 đến 250 nhân viên)",
"L: Large (Trên 250 nhân viên)"
)
)
kable(company_size_levels, caption = "Giải thích các mức độ trong biến company_size")
Gia_tri | Y_nghia |
---|---|
S | S: Small (Dưới 50 nhân viên) |
M | M: Medium (Từ 50 đến 250 nhân viên) |
L | L: Large (Trên 250 nhân viên) |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho company_size
ts_company_size <- table(d$company_size)
# Tạo bảng dữ liệu
ts_company_size_df <- data.frame(
Gia_tri = names(ts_company_size),
Tan_so = as.vector(ts_company_size),
Ty_le = round((as.vector(ts_company_size) / sum(ts_company_size)) * 100, 2)
)
# Hiển thị kết quả
ts_company_size_df
## Gia_tri Tan_so Ty_le
## 1 L 748 8.0
## 2 M 8448 90.3
## 3 S 159 1.7
Biểu đồ
# Load ggplot2 nếu chưa có
library(ggplot2)
## Warning: package 'ggplot2' was built under R version 4.3.3
# Tạo bảng tần suất cho company_size
ts_company_size <- table(d$company_size)
# Chuyển thành data frame để ggplot vẽ
ts_company_size_df <- data.frame(
Company_Size = names(ts_company_size),
Tan_so = as.vector(ts_company_size)
)
# Vẽ biểu đồ cột
ggplot(ts_company_size_df, aes(x = Company_Size, y = Tan_so, fill = Company_Size)) +
geom_bar(stat = "identity", width = 0.6) +
geom_text(aes(label = Tan_so), vjust = -0.5, size = 4) +
labs(title = "Biểu đồ cột: Quy mô công ty (company_size)",
x = "Quy mô công ty",
y = "Tần số") +
theme_minimal() +
theme(legend.position = "none")
Nhận xét
M (Medium) chiếm 90,3% (8.448 người) → phần lớn nhân sự AI/Dữ liệu đang làm việc tại công ty quy mô vừa.
L (Large) chỉ chiếm 8,0% (748 người) → số nhân sự tại các công ty lớn ít hơn nhiều so với nhóm trung bình.
S (Small) thấp nhất với 1,7% (159 người) → chứng tỏ rất ít nhân sự AI/Dữ liệu làm việc tại các doanh nghiệp nhỏ.
Giải thích biến
# Bảng giải thích các mức của biến employment_type
employment_type_levels <- data.frame(
Gia_tri = c("FT", "PT", "CT", "FL"),
Y_nghia = c(
"FT: Full-time (Toàn thời gian)",
"PT: Part-time (Bán thời gian)",
"CT: Contract (Hợp đồng)",
"FL: Freelance (Làm việc tự do)"
)
)
kable(employment_type_levels, caption = "Giải thích các mức độ trong biến employment_type")
Gia_tri | Y_nghia |
---|---|
FT | FT: Full-time (Toàn thời gian) |
PT | PT: Part-time (Bán thời gian) |
CT | CT: Contract (Hợp đồng) |
FL | FL: Freelance (Làm việc tự do) |
Lập bảng tần số và tần suất
# Tạo bảng tần suất cho employment_type
ts_employment_type <- table(d$employment_type)
# Tạo bảng dữ liệu
ts_employment_type_df <- data.frame(
Gia_tri = names(ts_employment_type),
Tan_so = as.vector(ts_employment_type),
Ty_le = round((as.vector(ts_employment_type) / sum(ts_employment_type)) * 100, 2)
)
# Hiển thị kết quả
ts_employment_type_df
## Gia_tri Tan_so Ty_le
## 1 Contract 19 0.20
## 2 Freelance 11 0.12
## 3 Full-time 9310 99.52
## 4 Part-time 15 0.16
Biểu đồ
# Load ggplot2 nếu chưa có
library(ggplot2)
# Tạo bảng tần suất cho employment_type
ts_employment_type <- table(d$employment_type)
# Chuyển thành data frame để ggplot vẽ
ts_employment_type_df <- data.frame(
Employment_Type = names(ts_employment_type),
Tan_so = as.vector(ts_employment_type)
)
# Vẽ biểu đồ cột
ggplot(ts_employment_type_df, aes(x = Employment_Type, y = Tan_so, fill = Employment_Type)) +
geom_bar(stat = "identity", width = 0.6) +
geom_text(aes(label = Tan_so), vjust = -0.5, size = 4) +
labs(title = "Biểu đồ cột: Hình thức làm việc (employment_type)",
x = "Hình thức làm việc",
y = "Tần số") +
theme_minimal() +
theme(legend.position = "none")
Nhận xét
Full-time áp đảo với 99,52% (9.310 người) → cho thấy gần như toàn bộ nhân sự AI/Dữ liệu đang làm việc theo hình thức toàn thời gian.
Contract (0,20%), Part-time (0,16%) và Freelance (0,12%) chiếm tỷ lệ rất nhỏ, gần như không đáng kể.
Giải thích biến
salary_in_usd
là biến định lượng đo lường mức lương hằng
năm của nhân sự, quy đổi sang đơn vị USD nhằm đảm bảo tính thống nhất
giữa các quan sát từ nhiều quốc gia khác nhau. Biến này phản ánh khả
năng thu nhập và là một chỉ số kinh tế quan trọng trong ngành AI và Khoa
học Dữ liệu.
Thống kê mô tả
# Thống kê mô tả cơ bản
summary_stats <- summary(d$salary_in_usd)
# Tính thêm độ lệch chuẩn và khoảng (range)
sd_val <- sd(d$salary_in_usd, na.rm = TRUE)
range_val <- max(d$salary_in_usd, na.rm = TRUE) - min(d$salary_in_usd, na.rm = TRUE)
# Tạo bảng thống kê đầy đủ
salary_summary <- data.frame(
Thong_so = c("Số quan sát", "Trung bình", "Độ lệch chuẩn",
"Giá trị nhỏ nhất", "Phân vị 25%", "Trung vị (50%)",
"Phân vị 75%", "Giá trị lớn nhất", "Khoảng (max - min)"),
Gia_tri = c(length(d$salary_in_usd),
mean(d$salary_in_usd, na.rm = TRUE),
sd_val,
min(d$salary_in_usd, na.rm = TRUE),
quantile(d$salary_in_usd, 0.25, na.rm = TRUE),
median(d$salary_in_usd, na.rm = TRUE),
quantile(d$salary_in_usd, 0.75, na.rm = TRUE),
max(d$salary_in_usd, na.rm = TRUE),
range_val)
)
# Hiển thị bảng
library(knitr)
kable(salary_summary, digits = 2, caption = "Bảng thống kê mô tả cho biến salary_in_usd (USD)")
Thong_so | Gia_tri |
---|---|
Số quan sát | 9355.00 |
Trung bình | 150299.50 |
Độ lệch chuẩn | 63177.37 |
Giá trị nhỏ nhất | 15000.00 |
Phân vị 25% | 105700.00 |
Trung vị (50%) | 143000.00 |
Phân vị 75% | 186723.00 |
Giá trị lớn nhất | 450000.00 |
Khoảng (max - min) | 435000.00 |
Biểu đồ
library(ggplot2)
ggplot(d, aes(x = salary_in_usd)) +
geom_histogram(binwidth = 10000, fill = "steelblue", color = "black", alpha = 0.7) +
labs(title = "Biểu đồ Histogram: Phân bố salary_in_usd",
x = "Mức lương (USD)",
y = "Tần số") +
theme_minimal()
Nhận xét
Số quan sát: Biến salary_in_usd có tổng cộng 9.355 quan sát, cho thấy tập dữ liệu có quy mô đủ lớn để thực hiện các phân tích thống kê tin cậy.
Giá trị trung bình:
Mức lương trung bình là 150.299,50 USD, phản ánh mức thu nhập bình quân hằng năm của các cá nhân trong ngành.
Trung vị (Phân vị 50%):
Trung vị là 143.000,00 USD, thấp hơn trung bình → cho thấy phân phối lương bị lệch phải, có khả năng tồn tại một số mức lương rất cao kéo trung bình tăng lên.
Độ lệch chuẩn:
Độ lệch chuẩn là 63.177,37 USD, thể hiện mức độ phân tán lớn xung quanh giá trị trung bình. Điều này chứng tỏ sự chênh lệch đáng kể về thu nhập giữa các cá nhân.
Giá trị nhỏ nhất và lớn nhất:
Thấp nhất: 15.000 USD
Cao nhất: 450.000 USD → Khoảng dao động cực kỳ rộng, phản ánh sự đa dạng về vị trí công việc, trình độ và khu vực địa lý trong tập dữ liệu.
Khoảng giá trị (Range): Mức lương dao động trong khoảng 435.000 USD, cho thấy sự khác biệt rất lớn giữa người có thu nhập thấp nhất và cao nhất.
Phân vị 25% và 75% (IQR):
Phân vị 25%: 105.700 USD
Phân vị 75%: 186.723 USD → 50% quan sát có mức lương nằm trong khoảng 105.700 – 186.723 USD, đây là mức thu nhập phổ biến nhất của mẫu khảo sát.
Bởi vì các phương pháp như kiểm định tỷ số chênh lệch (Odds Ratio), tỷ suất rủi ro (Risk Ratio) hay ước lượng tỷ lệ chỉ áp dụng cho biến định tính, nên em không thực hiện các kiểm định này đối với biến định lượng như salary_in_usd. Việc chuyển đổi một biến định lượng thành dạng định tính để áp dụng các phép kiểm này có thể làm mất thông tin và không phản ánh đầy đủ bản chất liên tục của biến. Do đó, em giữ nguyên biến salary_in_usd ở dạng liên tục và sử dụng các phương pháp phân tích phù hợp hơn như hồi quy đơn biến và mô hình hồi quy logistic để đánh giá mối liên hệ giữa mức lương và xác suất đạt cấp bậc Senior.
H₀: Mức kinh nghiệm làm việc (experience_level) và địa điểm thực hiện cv (work_setting) độc lập với nhau.
H₁: Mức kinh nghiệm làm việc (experience_level) và địa điểm thực hiện cv (work_setting) có mối liên hệ với nhau.
# Tạo bảng tần số chéo
tbl_exp_work_setting <- table(d$experience_level, d$work_setting)
# Kiểm định Chi-bình-phương
test_exp_work_setting <- chisq.test(tbl_exp_work_setting)
# Hiển thị kết quả
print(test_exp_work_setting)
##
## Pearson's Chi-squared test
##
## data: tbl_exp_work_setting
## X-squared = 422.63, df = 6, p-value < 2.2e-16
Nhận xét
Vì p-value < 2.2e-16 (< 0,05) nên bác bỏ giả thuyết H₀. Điều này cho thấy mức kinh nghiệm làm việc (experience_level) và địa điểm thực hiện cv (work_setting) có mối liên hệ với nhau trong bộ dữ liệu.
H₀: Mức kinh nghiệm làm việc (experience_level) và quy mô công ty (company_size) độc lập với nhau.
H₁: Mức kinh nghiệm làm việc (experience_level) và quy mô công ty (company_size) có mối liên hệ với nhau.
tbl_exp_company_size <- table(d$experience_level, d$company_size)
test_exp_company_size <- chisq.test(tbl_exp_company_size)
## Warning in chisq.test(tbl_exp_company_size): Chi-squared approximation may be
## incorrect
print(test_exp_company_size)
##
## Pearson's Chi-squared test
##
## data: tbl_exp_company_size
## X-squared = 370.55, df = 6, p-value < 2.2e-16
Nhận xét
Vì p-value < 2.2e-16 (< 0,05) nên bác bỏ giả thuyết H₀. Điều này cho thấy mức kinh nghiệm làm việc (experience_level) và quy mô công ty (company_size) có mối liên hệ với nhau trong bộ dữ liệu.
H₀: Mức kinh nghiệm làm việc (experience_level) và hình thức làm việc (employment_type) độc lập với nhau.
H₁: Mức kinh nghiệm làm việc (experience_level) và hình thức làm việc (employment_type) có mối liên hệ với nhau.
tbl_exp_employment_type <- table(d$experience_level, d$employment_type)
test_exp_employment_type <- chisq.test(tbl_exp_employment_type)
## Warning in chisq.test(tbl_exp_employment_type): Chi-squared approximation may
## be incorrect
print(test_exp_employment_type)
##
## Pearson's Chi-squared test
##
## data: tbl_exp_employment_type
## X-squared = 205.11, df = 9, p-value < 2.2e-16
Nhận xét
Vì p-value < 2.2e-16 (< 0,05) nên bác bỏ giả thuyết H₀. Điều này cho thấy mức kinh nghiệm làm việc (experience_level) và hình thức làn việc (employment_type) có mối liên hệ với nhau trong bộ dữ liệu.
KẾT LUẬN
Biến phân tích với experience_level |
p-value | Kết luận |
---|---|---|
work_setting | < 2.2e-16 | Bác bỏ H₀ → Có mối liên hệ giữa cấp bậc kinh nghiệm và địa điểm làm việc |
company_size | < 2.2e-16 | Bác bỏ H₀ → Có mối liên hệ giữa cấp bậc kinh nghiệm và quy mô công ty |
employment_type | < 2.2e-16 | Bác bỏ H₀ → Có mối liên hệ giữa cấp bậc kinh nghiệm và hình thức làm việc |
Lập bảng tần số và tần suất
# Kiểm tra các giá trị gốc để biết cần gán nhãn không
unique(d$experience_level)
## [1] "Mid-level" "Senior" "Executive" "Entry-level"
unique(d$work_setting)
## [1] "Hybrid" "In-person" "Remote"
# Nếu d$experience_level đã là "Entry-level", "Mid-level", "Senior", "Executive" → chỉ cần factor
if (all(unique(d$experience_level) %in% c("Entry-level", "Mid-level", "Senior", "Executive"))) {
d$ExperienceClear <- factor(d$experience_level)
} else {
# Nếu là EN, MI, SE, EX → gán nhãn rõ ràng
d$ExperienceClear <- factor(d$experience_level,
levels = c("EN", "MI", "SE", "EX"),
labels = c("Entry-level", "Mid-level", "Senior", "Executive"))
}
# Tương tự cho work_setting
if (all(unique(d$work_setting) %in% c("Remote", "Hybrid", "In-person"))) {
d$WorkSettingClear <- factor(d$work_setting,
labels = c("Remote", "Hybrid", "In-person"))
} else {
d$WorkSettingClear <- factor(d$work_setting,
levels = c("Remote", "Hybrid", "In-person"),
labels = c("Remote", "Hybrid", "In-person"))
}
# Tạo bảng tần số chéo
table_exp_work_clear <- table(d$ExperienceClear, d$WorkSettingClear)
print(table_exp_work_clear)
##
## Remote Hybrid In-person
## Entry-level 67 239 190
## Executive 6 156 119
## Mid-level 69 1153 647
## Senior 49 4182 2478
# Tỷ lệ phần trăm theo hàng (row-wise)
prop_table_row <- prop.table(table_exp_work_clear, margin = 1) * 100
round(prop_table_row, 2)
##
## Remote Hybrid In-person
## Entry-level 13.51 48.19 38.31
## Executive 2.14 55.52 42.35
## Mid-level 3.69 61.69 34.62
## Senior 0.73 62.33 36.94
Biểu đồ
# Load ggplot2
library(ggplot2)
ggplot(d, aes(x = ExperienceClear, fill = WorkSettingClear)) +
geom_bar(position = "dodge") + # Đổi từ "fill" sang "dodge" để nhóm các cột
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9), vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Kinh nghiệm và Môi trường làm việc (Số lượng)",
x = "Cấp bậc Kinh nghiệm",
y = "Số lượng nhân sự",
fill = "Hình thức làm việc") +
theme_minimal()
## Warning: The dot-dot notation (`..count..`) was deprecated in ggplot2 3.4.0.
## ℹ Please use `after_stat(count)` instead.
## This warning is displayed once every 8 hours.
## Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
## generated.
Nhận xét
Nhóm Senior chiếm số lượng cao nhất, nổi bật ở hình thức Hybrid (4.182 người) và In-person (2.478 người). Điều này cho thấy người có kinh nghiệm cao thường làm việc tại văn phòng hoặc linh hoạt.
Mid-level có sự phân bố tương đối đều giữa Hybrid (1.153 người) và In-person (647 người), phản ánh giai đoạn trung cấp linh hoạt về hình thức làm việc.
Entry-level chủ yếu làm việc Remote (239 người) và Hybrid (190 người), cho thấy người mới vào nghề thường được bố trí làm việc từ xa hoặc kết hợp.
Executive có số lượng ít, với phân bố tương đối đều: Hybrid (156), In-person (119), và Remote (6).
⟶ Nhìn chung, cấp bậc càng cao thì càng phổ biến trong hình thức làm việc tại văn phòng hoặc kết hợp (hybrid), trong khi nhóm mới vào nghề chủ yếu làm việc từ xa.
Lập bảng tần số và tần suất
# Kiểm tra & gán nhãn cho experience_level
if (!all(unique(d$experience_level) %in% c("Entry-level", "Mid-level", "Senior", "Executive"))) {
d$ExperienceClear <- factor(d$experience_level,
levels = c("EN", "MI", "SE", "EX"),
labels = c("Entry-level", "Mid-level", "Senior", "Executive"))
} else {
d$ExperienceClear <- factor(d$experience_level)
}
# Kiểm tra & gán nhãn cho company_size
if (!all(unique(d$company_size) %in% c("S", "M", "L"))) {
d$CompanySizeClear <- factor(d$company_size)
} else {
d$CompanySizeClear <- factor(d$company_size,
levels = c("S", "M", "L"),
labels = c("Small", "Medium", "Large"))
}
# Tạo bảng tần số chéo
table_exp_company_clear <- table(d$ExperienceClear, d$CompanySizeClear)
print(table_exp_company_clear)
##
## Small Medium Large
## Entry-level 45 346 105
## Executive 7 256 18
## Mid-level 59 1644 166
## Senior 48 6202 459
# Tỷ lệ phần trăm theo hàng (row-wise)
prop_table_row_company <- prop.table(table_exp_company_clear, margin = 1) * 100
round(prop_table_row_company, 2)
##
## Small Medium Large
## Entry-level 9.07 69.76 21.17
## Executive 2.49 91.10 6.41
## Mid-level 3.16 87.96 8.88
## Senior 0.72 92.44 6.84
Biểu đồ
ggplot(d, aes(x = ExperienceClear, fill = CompanySizeClear)) +
geom_bar(position = "dodge") + # Đổi từ "stack" sang "dodge" để nhóm các cột
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9), vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Kinh nghiệm và Quy mô công ty (Số lượng)",
x = "Cấp bậc Kinh nghiệm",
y = "Số lượng nhân sự",
fill = "Quy mô công ty") +
theme_minimal()
Nhận xét
Nhóm Senior chiếm số lượng lớn nhất và tập trung chủ yếu ở công ty Medium (6.202 người), theo sau là Large (459 người), cho thấy nhân sự cấp cao thường làm việc tại các công ty quy mô vừa và lớn.
Mid-level cũng chủ yếu làm tại công ty Medium (1.644 người) và Large (166 người), phản ánh xu hướng phát triển nghề nghiệp trong môi trường có quy mô ổn định.
Entry-level phân bố chủ yếu ở công ty Medium (346 người) và Large (105 người), cho thấy ngay cả người mới vào nghề cũng thường bắt đầu tại công ty quy mô vừa và lớn.
Executive tuy số lượng ít, nhưng phần lớn làm việc ở công ty Medium (256 người), phản ánh rằng các vị trí quản lý cao nhất thường được bố trí ở công ty có quy mô đủ lớn để cần đến vai trò điều hành.
⟶ Nhìn chung, quy mô công ty càng lớn thì càng thu hút nhân sự có kinh nghiệm cao, đặc biệt là nhóm Senior.
Lập bảng tần số và tần suất
# Kiểm tra & gán nhãn cho experience_level
if (!all(unique(d$experience_level) %in% c("Entry-level", "Mid-level", "Senior", "Executive"))) {
d$ExperienceClear <- factor(d$experience_level,
levels = c("EN", "MI", "SE", "EX"),
labels = c("Entry-level", "Mid-level", "Senior", "Executive"))
} else {
d$ExperienceClear <- factor(d$experience_level)
}
# Kiểm tra & gán nhãn cho employment_type
if (!all(unique(d$employment_type) %in% c("FT", "PT", "CT", "FL"))) {
d$EmploymentTypeClear <- factor(d$employment_type)
} else {
d$EmploymentTypeClear <- factor(d$employment_type,
levels = c("FT", "PT", "CT", "FL"),
labels = c("Full-time", "Part-time", "Contract", "Freelance"))
}
# Tạo bảng tần số chéo
table_exp_employment_clear <- table(d$ExperienceClear, d$EmploymentTypeClear)
print(table_exp_employment_clear)
##
## Contract Freelance Full-time Part-time
## Entry-level 4 2 478 12
## Executive 1 0 280 0
## Mid-level 10 5 1851 3
## Senior 4 4 6701 0
# Tỷ lệ phần trăm theo hàng (row-wise)
prop_table_row_employment <- prop.table(table_exp_employment_clear, margin = 1) * 100
round(prop_table_row_employment, 2)
##
## Contract Freelance Full-time Part-time
## Entry-level 0.81 0.40 96.37 2.42
## Executive 0.36 0.00 99.64 0.00
## Mid-level 0.54 0.27 99.04 0.16
## Senior 0.06 0.06 99.88 0.00
Biểu đồ
ggplot(d, aes(x = ExperienceClear, fill = EmploymentTypeClear)) +
geom_bar(position = "dodge") + # Đổi từ stack → dodge
geom_text(stat = "count", aes(label = ..count..),
position = position_dodge(width = 0.9), vjust = -0.3, color = "black", size = 4) +
labs(title = "Biểu đồ cột nhóm: Kinh nghiệm và Hình thức làm việc (Số lượng)",
x = "Cấp bậc Kinh nghiệm",
y = "Số lượng nhân sự",
fill = "Hình thức làm việc") +
theme_minimal()
Nhận xét
Nhóm Senior chiếm số lượng cao nhất và gần như tuyệt đối làm việc theo hình thức Full-time (6.701 người), cho thấy nhân sự cấp cao thường có vị trí ổn định, toàn thời gian.
Mid-level cũng chủ yếu làm việc Full-time (1.851 người), nhưng vẫn có một số nhỏ theo hình thức Freelance (10 người) và Contract (5 người), cho thấy nhóm này có mức độ linh hoạt hơn một chút.
Entry-level có quy mô nhỏ, nhưng đa số cũng làm việc Full-time (478 người), phản ánh rằng dù mới vào nghề, phần lớn nhân sự vẫn làm toàn thời gian.
Executive gần như toàn bộ làm Full-time (280 người), phù hợp với đặc thù của vị trí điều hành.
⟶ Nhìn chung, Full-time là hình thức làm việc chiếm ưu thế tuyệt đối ở tất cả các cấp bậc, đặc biệt là ở nhóm Senior và Executive. Các hình thức khác như freelance, contract hay part-time chỉ chiếm tỷ lệ rất nhỏ.
Trong phân tích này, chúng tôi xét mối liên hệ giữa mức kinh
nghiệm làm việc (experience_level
) và hình
thức làm việc (work_setting
).
Biến phụ thuộc (Dependent variable): experience_level – Mức kinh nghiệm làm việc
Senior (Nhân sự có kinh nghiệm cao): bao gồm mức Senior và Executive.
Non-Senior (Nhân sự chưa có nhiều kinh nghiệm): bao gồm mức Entry-level và Mid-level.
Biến độc lập (Independent variable): work_setting – Hình thức làm việc
Remote (Làm việc từ xa): chỉ gồm mức Remote.
In-person (Làm việc tại văn phòng): gộp mức Hybrid và In-person.
Bài toán kiểm định
H0: Risk Ratio = 1 (Không có sự khác biệt về hình thức làm việc ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
H1: Risk Ratio ≠ 1 (Có sự khác biệt về hình thức làm việc ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
library(epitools)
# Tạo bảng chéo 2x2 (ví dụ: Senior / Non-Senior vs Remote / In-person)
tbl_exp_work_setting <- matrix(c(4393, 1528, 2597, 837),
nrow = 2,
byrow = TRUE,
dimnames = list(
Experience = c("Senior", "Non-Senior"),
WorkSetting = c("In-person", "Remote")
))
# Tính Risk Ratio
riskratio(tbl_exp_work_setting)
## $data
## WorkSetting
## Experience In-person Remote Total
## Senior 4393 1528 5921
## Non-Senior 2597 837 3434
## Total 6990 2365 9355
##
## $measure
## risk ratio with 95% C.I.
## Experience estimate lower upper
## Senior 1.0000000 NA NA
## Non-Senior 0.9444889 0.8779547 1.016065
##
## $p.value
## two-sided
## Experience midp.exact fisher.exact chi.square
## Senior NA NA NA
## Non-Senior 0.1241213 0.1260831 0.1243805
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Risk Ratio cho nhóm Non-Senior làm việc Remote so với In-person là 0.94.
p-value = 0.1242 (không nhỏ).
Khoảng tin cậy 95% cho RR: [0.88; 1.02].
Ta có p-value > mức ý nghĩa (α = 5%), nên không đủ cơ sở để bác bỏ H₀. Vậy, không có sự khác biệt có ý nghĩa thống kê về tỉ lệ Non-Senior giữa hai nhóm làm việc.
Cụ thể: người làm việc từ xa có nguy cơ đạt cấp bậc Non-Senior thấp hơn khoảng 0.94 lần so với người làm việc trực tiếp.
Biến phụ thuộc (Dependent variable): experience_level – Mức kinh nghiệm làm việc
Senior (Nhân sự có kinh nghiệm cao): bao gồm mức Senior và Executive.
Non-Senior (Nhân sự chưa có nhiều kinh nghiệm): bao gồm mức Entry-level và Mid-level.
Biến độc lập (Independent variable): company_size – Quy mô công ty
Large (Công ty lớn): giữ nguyên mức L.
Not-Large (Công ty không lớn): gộp mức S (Small) và M (Medium) thành 1 nhóm.
Bài toán kiểm định
H0: Risk Ratio = 1 (Không có sự khác biệt về quy mô công ty ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
H1: Risk Ratio ≠ 1 (Có sự khác biệt về quy mô công ty ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
library(epitools)
# Bảng chéo 2x2 (Senior / Non-Senior vs Large / Not-Large)
tbl_exp_company_size <- matrix(c(477, 271, 6513, 2094),
nrow = 2,
byrow = TRUE,
dimnames = list(
Experience = c("Senior", "Non-Senior"),
CompanySize = c("Large", "Not-Large")
))
# Tính Risk Ratio
riskratio(tbl_exp_company_size)
## $data
## CompanySize
## Experience Large Not-Large Total
## Senior 477 271 748
## Non-Senior 6513 2094 8607
## Total 6990 2365 9355
##
## $measure
## risk ratio with 95% C.I.
## Experience estimate lower upper
## Senior 1.0000000 NA NA
## Non-Senior 0.6715173 0.6063296 0.7437134
##
## $p.value
## two-sided
## Experience midp.exact fisher.exact chi.square
## Senior NA NA NA
## Non-Senior 4.211631e-12 4.34933e-12 6.804299e-13
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Risk Ratio cho nhóm Non-Senior làm việc tại công ty Not-Large so với công ty Large là 0.67.
p-value = 4.21 × 10⁻¹² (rất nhỏ).
Khoảng tin cậy 95% cho RR: [0.61; 0.74].
Ta có p-value < mức ý nghĩa (α = 5%), đủ cơ sở để bác bỏ H₀. Vậy, có sự khác biệt có ý nghĩa thống kê về tỉ lệ Non-Senior giữa hai nhóm quy mô công ty.
Cụ thể: người làm việc tại công ty Not-Large có nguy cơ đạt cấp bậc Non-Senior thấp hơn khoảng 0.67 lần so với người làm tại công ty Large.
Nói cách khác: Người làm ở công ty nhỏ có khả năng nằm trong nhóm “chưa có nhiều kinh nghiệm” (Non-Senior) ít hơn so với người làm ở công ty lớn.
Kết quả này có ý nghĩa thống kê rất cao với p-value gần bằng 0 (p < 0.001).
Tuy nhiên, kết quả này có vẻ ngược với thực tế, bởi thông thường, công ty lớn thường có hệ thống thăng tiến rõ ràng hơn và nhiều vị trí cấp cao hơn. Có thể có một số lý do dẫn đến kết quả này:
Ở công ty nhỏ, chức danh “Senior” có thể được trao dễ hơn, không phản ánh chính xác mức độ kinh nghiệm thực tế.
Công ty lớn có yêu cầu cao hơn để được xếp hạng Senior, khiến nhiều nhân sự chưa đạt đến cấp này dù có năng lực.
=> Kết quả trong dữ liệu không phù hợp với kỳ vọng thực tế chung, nhưng vẫn có thể phản ánh đúng đặc thù của bộ dữ liệu này.
Biến phụ thuộc (Dependent variable): experience_level – Mức kinh nghiệm làm việc
Senior (Nhân sự có kinh nghiệm cao)
Non-Senior (Nhân sự chưa có nhiều kinh nghiệm)
Biến độc lập (Independent variable): employment_type – Hình thức hợp đồng lao động
Full-time (Toàn thời gian): giữ nguyên mức Full-time
Not-Full-time (Không toàn thời gian): gộp các mức Part-time, Contract, Freelance
Câu hỏi nghiên cứu
Liệu hình thức hợp đồng lao động (Full-time / Not-Full-time) có ảnh hưởng đến khả năng đạt mức Senior?
Bài toán kiểm định
H0: Risk Ratio = 1 (Không có sự khác biệt về hình thức hợp đồng lao động ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
H1: Risk Ratio ≠ 1 (Có sự khác biệt về hình thức hợp đồng lao động ở người có nhiều kinh nghiệm với người không có nhiều kinh nghiệm)
# Bảng chéo 2x2 (Senior / Non-Senior vs Full-time / Not-Full-time)
tbl_exp_employment_type <- matrix(c(6981, 2329, 9, 36),
nrow = 2,
byrow = TRUE,
dimnames = list(
Experience = c("Senior", "Non-Senior"),
EmploymentType = c("Full-time", "Not-Full-time")
))
# Tính Risk Ratio
riskratio(tbl_exp_employment_type)
## $data
## EmploymentType
## Experience Full-time Not-Full-time Total
## Senior 6981 2329 9310
## Non-Senior 9 36 45
## Total 6990 2365 9355
##
## $measure
## risk ratio with 95% C.I.
## Experience estimate lower upper
## Senior 1.000000 NA NA
## Non-Senior 3.197939 2.751775 3.716443
##
## $p.value
## two-sided
## Experience midp.exact fisher.exact chi.square
## Senior NA NA NA
## Non-Senior 2.04281e-14 1.873214e-14 2.537087e-17
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "Unconditional MLE & normal approximation (Wald) CI"
Nhận xét
Risk Ratio cho nhóm Non-Senior làm việc Not-Full-time so với Full-time là 3.20.
p-value = 2.04 × 10⁻¹⁴ (rất nhỏ).
Khoảng tin cậy 95% cho RR: [2.75; 3.72].
Ta có p-value < mức ý nghĩa (α = 5%) → đủ cơ sở để bác bỏ H₀. Vậy, có sự khác biệt có ý nghĩa thống kê về tỉ lệ Non-Senior giữa hai nhóm loại hình làm việc.
Cụ thể: người làm việc Not-Full-time có nguy cơ đạt cấp bậc Non-Senior cao gấp 3.20 lần so với người làm việc Full-time.
Điều này hàm ý rằng những nhân sự không làm việc toàn thời gian có rủi ro không thăng tiến cao hơn so với nhóm làm toàn thời gian. Kết quả có ý nghĩa thống kê rất cao (p < 0.001).
Giả thuyết kiểm định
\(H_0: OR = 1\)
Không có sự khác biệt về khả năng đạt mức Senior giữa nhân sự làm việc
Remote và In-person.
\(H_1: OR \ne 1\)
Có sự khác biệt về khả năng đạt mức Senior giữa hai nhóm hình thức làm
việc.
library(epitools)
# Rút gọn biến
d$exp_binary <- ifelse(d$experience_level %in% c("Senior", "Executive"),
"Senior", "Non-Senior")
d$work_setting_binary <- ifelse(d$work_setting == "Remote",
"Remote", "In-person")
# Tạo bảng 2x2
table_exp_work <- table(d$exp_binary, d$work_setting_binary)
# Tính Odds Ratio
or_result <- oddsratio(table_exp_work)
or_result
## $data
##
## In-person Remote Total
## Non-Senior 1528 837 2365
## Senior 4393 2597 6990
## Total 5921 3434 9355
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Non-Senior 1.000000 NA NA
## Senior 1.079142 0.9793657 1.189674
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Non-Senior NA NA NA
## Senior 0.1241213 0.1260831 0.1243805
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Odds Ratio cho nhóm Senior làm việc Remote so với In-person là 1.08.
p-value = 0.1242 (không nhỏ).
Khoảng tin cậy 95% cho OR: [0.98; 1.19].
Ta có p-value > mức ý nghĩa (α = 5%), không đủ cơ sở để bác bỏ H₀. Như vậy, không có sự khác biệt có ý nghĩa thống kê về tỉ lệ Senior giữa hai nhóm làm việc.
Kết quả Odds Ratio giữa nhóm Senior làm việc remote so với in-person làm việc remote là 1.08, nghĩa là người làm việc từ xa có khả năng đạt cấp bậc Senior cao hơn khoảng 1.08 lần so với người làm việc trực tiếp, nhưng sự khác biệt này không đủ rõ ràng về mặt thống kê.
Bài toán kiểm định
\(H_0: OR = 1\)
Không có sự khác biệt về khả năng đạt mức Senior giữa nhân sự làm việc
tại công ty lớn và công ty không lớn.
\(H_1: OR \ne 1\)
Có sự khác biệt về khả năng đạt mức Senior giữa nhân sự làm việc tại
công ty lớn và công ty không lớn.
library(epitools)
# Rút gọn biến
d$exp_binary <- ifelse(d$experience_level %in% c("Senior", "Executive"),
"Senior", "Non-Senior")
d$company_size_binary <- ifelse(d$company_size == "L",
"Large", "Not-Large")
# Tạo bảng 2x2
table_exp_company <- table(d$exp_binary, d$company_size_binary)
# Tính Odds Ratio
or_result_company <- oddsratio(table_exp_company)
or_result_company
## $data
##
## Large Not-Large Total
## Non-Senior 271 2094 2365
## Senior 477 6513 6990
## Total 748 8607 9355
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Non-Senior 1.000000 NA NA
## Senior 1.767378 1.50902 2.066296
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Non-Senior NA NA NA
## Senior 4.211742e-12 4.34933e-12 6.804299e-13
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Odds Ratio cho nhóm Senior làm việc tại công ty Not-Large so với công ty Large là 1.77.
p-value = 4.21 × 10⁻¹² (rất nhỏ).
Khoảng tin cậy 95% cho OR: [1.51; 2.07].
Ta có p-value < mức ý nghĩa (α = 5%), đủ cơ sở để bác bỏ H₀. Như vậy, có sự khác biệt có ý nghĩa thống kê về tỉ lệ Senior giữa hai nhóm quy mô công ty.
Kết quả Odds Ratio giữa nhóm Senior ở công ty lớn so với nhóm Senior ở công ty nhỏ là 1.7674. Điều này có nghĩa là odds đạt cấp bậc Senior của nhân sự làm việc tại công ty lớn cao hơn khoảng 1.77 lần so với nhân sự làm việc tại công ty quy mô không lớn.
Bài toán kiểm định
\(H_0: OR = 1\)
Không có sự khác biệt về khả năng đạt mức Senior giữa nhân sự làm việc
toàn thời gian và không toàn thời gian.
\(H_1: OR \ne 1\)
Có sự khác biệt về khả năng đạt mức Senior giữa hai nhóm hình thức hợp
đồng lao động.
# Rút gọn biến
d$employment_type_binary <- ifelse(d$employment_type == "Full-time",
"Full-time", "Not-Full-time")
# Tạo bảng 2x2
table_exp_employment <- table(d$exp_binary, d$employment_type_binary)
# Tính Odds Ratio
or_result_employment <- oddsratio(table_exp_employment)
or_result_employment
## $data
##
## Full-time Not-Full-time Total
## Non-Senior 2329 36 2365
## Senior 6981 9 6990
## Total 9310 45 9355
##
## $measure
## odds ratio with 95% C.I.
## estimate lower upper
## Non-Senior 1.00000000 NA NA
## Senior 0.08455701 0.03794953 0.1686842
##
## $p.value
## two-sided
## midp.exact fisher.exact chi.square
## Non-Senior NA NA NA
## Senior 2.031708e-14 1.873214e-14 2.537087e-17
##
## $correction
## [1] FALSE
##
## attr(,"method")
## [1] "median-unbiased estimate & mid-p exact CI"
Nhận xét
Odds Ratio cho nhóm Senior làm việc Not-Full-time so với Full-time là 0.08.
p-value = 2.03 × 10⁻¹⁴ (rất nhỏ).
Khoảng tin cậy 95% cho OR: [0.037; 0.17].
Ta có p-value < mức ý nghĩa (α = 5%), đủ cơ sở để bác bỏ H₀. Vậy, có sự khác biệt có ý nghĩa thống kê về tỉ lệ Senior giữa hai nhóm loại hình làm việc.
Cụ thể: người làm việc Not-Full-time có khả năng đạt cấp bậc Senior thấp hơn khoảng 0.08 lần so với người làm việc Full-time, tức thấp hơn gần 12.5 lần.
Trong nghiên cứu này, ta muốn đánh giá xem tỷ lệ nhân sự đạt cấp bậc Senior trong ngành Trí tuệ nhân tạo và Khoa học Dữ liệu có khác biệt đáng kể so với 50% hay không.
Ta thiết lập giả thuyết kiểm định như sau:
\[ \begin{aligned} H_0&:~p = 0.5 \quad \text{(Tỷ lệ nhân sự cấp Senior trong tổng thể là 50%)} \\ H_1&:~p \ne 0.5 \quad \text{(Tỷ lệ nhân sự cấp Senior trong tổng thể khác 50%)} \end{aligned} \] Trong đó:
# Bước 1: Đếm số lượng nhân sự Senior trong dữ liệu
so_luong_senior <- sum(d$experience_level == "Senior", na.rm = TRUE)
# Bước 2: Xác định tổng số quan sát hợp lệ
tong_so_quan_sat <- sum(!is.na(d$experience_level))
# Bước 3: Ước lượng khoảng tin cậy 95% cho tỷ lệ Senior
kq_tyle_senior <- prop.test(so_luong_senior, tong_so_quan_sat, conf.level = 0.95)
# Hiển thị kết quả
print(kq_tyle_senior)
##
## 1-sample proportions test with continuity correction
##
## data: so_luong_senior out of tong_so_quan_sat, null probability 0.5
## X-squared = 1763.7, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.7078884 0.7262455
## sample estimates:
## p
## 0.7171566
Nhận xét
Tỷ lệ nhân sự đạt cấp Senior trong tập dữ liệu là 71.7%, cao hơn rõ rệt so với giả định 50%.
Khoảng tin cậy 95% nằm trong khoảng [70.8%; 72.6%].
Giá trị p < 0.001, nên bác bỏ giả thuyết H₀.
⟶ Kết luận: Tỷ lệ nhân sự cấp Senior cao hơn đáng kể so với mức 50%, và sự khác biệt này có ý nghĩa thống kê.
Trong nghiên cứu này, ta muốn đánh giá xem tỷ lệ nhân sự làm việc tại văn phòng (In-person) có khác biệt đáng kể so với 50% hay không.
Ta thiết lập giả thuyết kiểm định như sau:
\[ \begin{aligned} H_0&:~p = 0.5 \quad \text{(Tỷ lệ làm việc In-person trong tổng thể là 50\%)} \\ H_1&:~p \ne 0.5 \quad \text{(Tỷ lệ làm việc In-person trong tổng thể khác 50\%)} \end{aligned} \]
Trong đó:
- \(p\): là tỷ lệ nhân sự làm việc tại
văn phòng (In-person) trong tổng thể.
# Hạng mục In-person
so_luong_inperson <- sum(d$work_setting == "In-person", na.rm = TRUE)
tong_inperson <- sum(!is.na(d$work_setting))
# Kiểm định tỷ lệ
prop.test(so_luong_inperson, tong_inperson, p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: so_luong_inperson out of tong_inperson, null probability 0.5
## X-squared = 473.2, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.6025365 0.6223840
## sample estimates:
## p
## 0.6125067
Nhận xét
Kết quả kiểm định tỷ lệ một mẫu cho thấy tỷ lệ nhân sự đạt cấp bậc Senior là 71.7%, cao hơn đáng kể so với giả định 50%. Khoảng tin cậy 95% nằm trong khoảng [70.8%; 72.6%], và giá trị p < 0.001 cho thấy sự khác biệt này có ý nghĩa thống kê. ⟶ Điều này khẳng định rằng phần lớn nhân sự trong tập dữ liệu thuộc nhóm Senior.
Trong nghiên cứu này, ta muốn đánh giá xem tỷ lệ nhân sự làm việc tại công ty quy mô vừa (Medium) có khác biệt đáng kể so với 50% hay không.
Ta thiết lập giả thuyết kiểm định như sau:
\[ \begin{aligned} H_0&:~p = 0.5 \quad \text{(Tỷ lệ làm việc tại công ty Medium trong tổng thể là 50\%)} \\ H_1&:~p \ne 0.5 \quad \text{(Tỷ lệ làm việc tại công ty Medium trong tổng thể khác 50\%)} \end{aligned} \]
Trong đó:
- \(p\): là tỷ lệ nhân sự làm việc tại
công ty quy mô vừa (Medium) trong tổng thể.
# Hạng mục Medium
so_luong_medium <- sum(d$company_size == "M", na.rm = TRUE)
tong_medium <- sum(!is.na(d$company_size))
# Kiểm định tỷ lệ
prop.test(so_luong_medium, tong_medium, p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: so_luong_medium out of tong_medium, null probability 0.5
## X-squared = 6077.1, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.8968291 0.9089301
## sample estimates:
## p
## 0.9030465
Nhận xét
Tỷ lệ nhân sự làm việc tại công ty quy mô Medium là 90.3%, vượt xa mức giả định 50%.
Khoảng tin cậy 95% nằm trong khoảng [89.7%; 90.9%], hoàn toàn nằm trên 0.5.
Giá trị p < 0.001, bác bỏ giả thuyết H₀.
⟶ Kết luận: Tỷ lệ nhân sự làm việc tại công ty quy mô Medium cao hơn đáng kể so với mức 50%, và sự khác biệt có ý nghĩa thống kê rõ rệt.
Trong nghiên cứu này, ta muốn đánh giá xem tỷ lệ nhân sự làm việc toàn thời gian (Full-time) có khác biệt đáng kể so với 50% hay không.
Ta thiết lập giả thuyết kiểm định như sau:
\[ \begin{aligned} H_0&:~p = 0.5 \quad \text{(Tỷ lệ làm việc Full-time trong tổng thể là 50%)} \\ H_1&:~p \ne 0.5 \quad \text{(Tỷ lệ làm việc Full-time trong tổng thể khác 50%)} \end{aligned} \]
Trong đó:
- \(p\): là tỷ lệ nhân sự làm việc toàn
thời gian (Full-time) trong tổng thể.
# Hạng mục Full-time
so_luong_fulltime <- sum(d$employment_type == "Full-time", na.rm = TRUE)
tong_fulltime <- sum(!is.na(d$employment_type))
# Kiểm định tỷ lệ
prop.test(so_luong_fulltime, tong_fulltime, p = 0.5, conf.level = 0.95)
##
## 1-sample proportions test with continuity correction
##
## data: so_luong_fulltime out of tong_fulltime, null probability 0.5
## X-squared = 9173.9, df = 1, p-value < 2.2e-16
## alternative hypothesis: true p is not equal to 0.5
## 95 percent confidence interval:
## 0.9935090 0.9964486
## sample estimates:
## p
## 0.9951897
Nhận xét
Tỷ lệ nhân sự làm việc theo hình thức Full-time là 99.5%, gần như tuyệt đối.
Khoảng tin cậy 95% là [99.35%; 99.64%], rất sát mức tối đa.
Giá trị p < 0.001, cho thấy khác biệt có ý nghĩa thống kê rất cao so với tỷ lệ giả định 50%.
⟶ Kết luận: Đa số nhân sự trong ngành làm việc toàn thời gian, và sự khác biệt này có ý nghĩa thống kê rõ rệt.
Bởi vì hồi quy đơn biến với biến độc lập là biến định tính thực chất chỉ là so sánh giữa các nhóm, tương tự như trong phần thống kê mô tả, nên em quyết định không thực hiện hồi quy đơn biến đối với các biến định tính như company_size, employment_type hay work_setting.
Thay vào đó, tôi chỉ thực hiện hồi quy đơn biến với biến định lượng salary_in_usd, nhằm kiểm tra cụ thể mối quan hệ giữa mức lương và xác suất đạt cấp bậc Senior.
# Mô hình hồi quy logistic với salary_in_usd
d$senior_bin <- ifelse(d$experience_level == "Senior", 1, 0)
logit_salary <- glm(senior_bin ~ salary_in_usd,
data = d,
family = binomial(link = "logit"))
# Hiển thị kết quả hồi quy
summary(logit_salary)
##
## Call:
## glm(formula = senior_bin ~ salary_in_usd, family = binomial(link = "logit"),
## data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -9.045e-01 6.552e-02 -13.80 <2e-16 ***
## salary_in_usd 1.315e-05 4.669e-07 28.16 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10170 on 9353 degrees of freedom
## AIC: 10174
##
## Number of Fisher Scoring iterations: 4
# Tính odds ratio cho hệ số salary_in_usd
exp(coef(logit_salary))
## (Intercept) salary_in_usd
## 0.4047538 1.0000131
Nhận xét
Mô hình có dạng: \[ \log\left( \frac{\pi}{1 - \pi} \right) = \beta_0 + \beta_1 \cdot \text{salary_in_usd} \]
Trong đó:
Thay các hệ số ước lượng vào phương trình, ta được: \[ \log\left( \frac{\pi}{1 - \pi} \right) = -0.9045 + 0.00001315 \cdot \text{salary_in_usd} \]
Điều này cho thấy, với mỗi mức lương tăng thêm 1.000 USD, odds đạt cấp tăng khoảng:
\(\exp(0.00001315 \times 1000) \approx 1.0132 \quad \text{(tăng khoảng 1.32%)}\)
Cụ thể, những người có mức lương cao hơn 1.000 USD có odds đạt cấp bậc Senior cao hơn khoảng 1.013 lần so với những người có mức lương thấp hơn 1.000 USD.
Nói cách khác, khi mức lương tăng thêm 1.000 USD, thì khả năng đạt cấp Senior (so với không đạt) cũng tăng lên khoảng 1.32%
Hệ số hồi quy là 0.00001315 với p-value < 2e-16, nhỏ hơn mức ý nghĩa 5%, cho thấy kết quả này có ý nghĩa thống kê rất mạnh.
Điều này cho thấy thu nhập là một yếu tố liên quan rõ rệt đến khả năng thăng tiến, và mức lương cao có thể phản ánh năng lực hoặc kinh nghiệm cao hơn, từ đó làm tăng khả năng đạt đến cấp bậc Senior.
# Mô hình hồi quy Probit với salary_in_usd
probit_salary <- glm(senior_bin ~ salary_in_usd,
data = d,
family = binomial(link = "probit"))
# Hiển thị kết quả
summary(probit_salary)
##
## Call:
## glm(formula = senior_bin ~ salary_in_usd, family = binomial(link = "probit"),
## data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -4.368e-01 3.825e-02 -11.42 <2e-16 ***
## salary_in_usd 7.086e-06 2.586e-07 27.40 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10231 on 9353 degrees of freedom
## AIC: 10235
##
## Number of Fisher Scoring iterations: 5
Nhận xét
Mô hình có dạng: \[ \Phi^{-1}(\pi) = \beta_0 + \beta_1 \cdot \text{salary_in_usd} \]
Trong đó:
Thay các hệ số ước lượng vào phương trình, ta được: \[ \Phi^{-1}(\pi) = -0.4368 + 0.000007086 \cdot \text{salary_in_usd} \]
Kết quả hồi quy Probit cho thấy mức lương (salary_in_usd) có ảnh hưởng đáng kể đến xác suất đạt cấp bậc Senior. Cụ thể, hệ số ước lượng cho biến salary_in_usd là 0.000007086 với p-value < 2e-16, nhỏ hơn mức ý nghĩa 1%, cho thấy mối quan hệ này có ý nghĩa thống kê rất mạnh.
Điều này cho thấy: những người có mức lương cao hơn sẽ có xác suất đạt cấp bậc Senior cao hơn, so với những người có mức lương thấp hơn. Kết quả này gợi ý rằng thu nhập là một yếu tố quan trọng liên quan đến khả năng thăng tiến, và cần được xem xét trong các phân tích về cấp bậc nghề nghiệp.
# Mô hình hồi quy cloglog với salary_in_usd
cloglog_salary <- glm(senior_bin ~ salary_in_usd,
data = d,
family = binomial(link = "cloglog"))
# Hiển thị kết quả
summary(cloglog_salary)
##
## Call:
## glm(formula = senior_bin ~ salary_in_usd, family = binomial(link = "cloglog"),
## data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.824e-01 3.695e-02 -15.76 <2e-16 ***
## salary_in_usd 5.569e-06 2.278e-07 24.45 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10341 on 9353 degrees of freedom
## AIC: 10345
##
## Number of Fisher Scoring iterations: 6
Nhận xét
Mô hình có dạng: \[ \log(-\log(1 - \pi)) = \beta_0 + \beta_1 \cdot \text{salary_in_usd} \]
Trong đó:
Thay các hệ số ước lượng vào phương trình, ta được: \[ \log(-\log(1 - \pi)) = -0.5824 + 0.000005569 \cdot \text{salary_in_usd} \]
Kết quả hồi quy Cloglog đơn biến cho thấy mức lương (salary_in_usd) có ảnh hưởng có ý nghĩa thống kê đến khả năng đạt cấp bậc Senior, với p-value < 2e-16, nhỏ hơn mức ý nghĩa 5%.
Cụ thể, hệ số ước lượng là 0.000005569, cho thấy khi mức lương tăng, giá trị cloglog cũng tăng, đồng nghĩa với việc xác suất đạt cấp Senior cũng cao hơn so với những người có mức lương thấp hơn.
Điều này cho thấy, theo mô hình Cloglog, mức lương là một yếu tố có liên hệ đáng kể với khả năng thăng tiến, và mối liên hệ này có ý nghĩa thống kê rõ rệt.
# Bước 1: Tạo biến nhị phân cho cấp bậc Senior nếu chưa có
d$senior_bin <- ifelse(d$experience_level == "Senior", 1, 0)
# Bước 2: Đặt nhóm tham chiếu cho các biến phân loại
d$company_size <- relevel(factor(d$company_size), ref = "M")
d$employment_type <- relevel(factor(d$employment_type), ref = "Full-time")
d$work_setting <- relevel(factor(d$work_setting), ref = "In-person")
# Bước 3: Mô hình logit bội với salary_in_usd
reg_logit_multi <- glm(
senior_bin ~ company_size + employment_type + work_setting + salary_in_usd,
data = d,
family = binomial(link = "logit")
)
# Bước 4: Kết quả hồi quy logit
summary(reg_logit_multi)
##
## Call:
## glm(formula = senior_bin ~ company_size + employment_type + work_setting +
## salary_in_usd, family = binomial(link = "logit"), data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -7.539e-01 7.144e-02 -10.553 < 2e-16 ***
## company_sizeL -2.562e-01 9.134e-02 -2.805 0.00504 **
## company_sizeS -1.076e+00 1.936e-01 -5.560 2.70e-08 ***
## employment_typeContract -1.951e+00 6.981e-01 -2.794 0.00520 **
## employment_typeFreelance 2.159e-01 6.873e-01 0.314 0.75340
## employment_typePart-time -1.290e+01 1.199e+02 -0.108 0.91432
## work_settingHybrid -1.135e+00 1.903e-01 -5.965 2.44e-09 ***
## work_settingRemote 1.111e-01 5.136e-02 2.164 0.03049 *
## salary_in_usd 1.226e-05 4.714e-07 26.006 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10023 on 9346 degrees of freedom
## AIC: 10041
##
## Number of Fisher Scoring iterations: 12
# Bước 5: Chuyển hệ số sang odds ratio để dễ diễn giải
exp(coef(reg_logit_multi))
## (Intercept) company_sizeL company_sizeS
## 4.705181e-01 7.739976e-01 3.408747e-01
## employment_typeContract employment_typeFreelance employment_typePart-time
## 1.421935e-01 1.241013e+00 2.507210e-06
## work_settingHybrid work_settingRemote salary_in_usd
## 3.213495e-01 1.117544e+00 1.000012e+00
Nhận xét
Mô hình có dạng: \[ \log\left( \frac{\pi}{1 - \pi} \right) = \beta_0 + \beta_1 \cdot \text{company_sizeL} + \beta_2 \cdot \text{company_sizeS} + \beta_3 \cdot \text{employment_Contract} + \beta_4 \cdot \text{employment_Freelance} + \beta_5 \cdot \text{employment_Parttime} + \beta_6 \cdot \text{work_Hybrid} + \beta_7 \cdot \text{work_Remote} + \beta_8 \cdot \text{salary_in_usd} \]
Thay các hệ số vào phương trình: \[ \log\left( \frac{\pi}{1 - \pi} \right) = -0.7539 - 0.2562 \cdot \text{company_sizeL} - 1.0760 \cdot \text{company_sizeS} - 1.9510 \cdot \text{employment_Contract} + 0.2159 \cdot \text{employment_Freelance} - 12.9000 \cdot \text{employment_Parttime} - 1.1350 \cdot \text{work_Hybrid} + 0.1111 \cdot \text{work_Remote} + 0.00001226 \cdot \text{salary_in_usd} \]
Trong đó:
\(\pi\): là xác suất để một cá nhân đạt cấp bậc .
company_sizeM, employment_Fulltime và work_Inperson là các nhóm tham chiếu tương ứng.
Biến | Nhóm so sánh | Hệ số (β) | p-value | Odds Ratio (e^β) | Diễn giải chi tiết |
---|---|---|---|---|---|
company_sizeL |
So với Medium | -0.2562 | 0.005 | 0.774 | Làm ở công ty lớn làm odds đạt cấp Senior giảm 22.6% so với công ty vừa. |
company_sizeS |
So với Medium | -1.076 | 2.70e-08 | 0.341 | Làm ở công ty nhỏ làm odds đạt cấp Senior giảm 65.9% so với công ty vừa. |
employment_typeContract |
So với Full-time | -1.951 | 0.005 | 0.142 | Làm theo hợp đồng làm odds đạt cấp Senior giảm 85.8% so với full-time. |
employment_typeFreelance |
So với Full-time | 0.2159 | 0.753 | 1.241 | Không có ý nghĩa thống kê; nếu có thì odds tăng 24.1%. |
employment_typePart-time |
So với Full-time | -1.290 | 0.914 | ≈ 0 | Không có ý nghĩa thống kê. |
work_settingHybrid |
So với In-person | -1.135 | 2.44e-09 | 0.321 | Làm hybrid làm odds đạt cấp Senior giảm 67.9% so với làm trực tiếp. |
work_settingRemote |
So với In-person | 0.1112 | 0.030 | 1.118 | Làm remote làm odds đạt cấp Senior tăng 11.8% so với làm trực tiếp. |
salary_in_usd |
Mỗi 1.000 USD tăng thêm | 0.00001226 | < 2e-16 | 1.0123 | Mỗi 1.000 USD tăng làm odds đạt cấp Senior tăng ~1.23%. |
Tỷ lệ thay đổi (%) được tính bằng công thức: \[ (\text{Odds Ratio} - 1) \times 100\% \] Odds giảm (khi < 1) hoặc tăng (khi > 1) phản ánh mức độ thay đổi về xác suất đạt cấp giữa nhóm so sánh và nhóm tham chiếu. |
Kết luận
Mô hình hồi quy logistic cho thấy các yếu tố ảnh hưởng đáng kể đến khả năng đạt cấp bậc Senior, bao gồm: quy mô công ty, hình thức làm việc, loại hợp đồng và mức lương.
So với công ty quy mô vừa (Medium), người làm ở công ty nhỏ có khả năng đạt Senior thấp hơn rõ rệt (odds chỉ bằng 34%), còn làm ở công ty lớn cũng thấp hơn (odds bằng ~77%), cho thấy công ty vừa là môi trường thuận lợi nhất để đạt cấp Senior.
Hình thức làm việc hybrid có ảnh hưởng tiêu cực đáng kể so với làm trực tiếp (in-person), trong khi làm remote giúp tăng khả năng đạt Senior nhẹ (~11.75%).
Hợp đồng thay vì full-time làm giảm mạnh khả năng đạt Senior, còn freelance và part-time không có tác động rõ rệt.
Cuối cùng, mức lương có ảnh hưởng tích cực và có ý nghĩa thống kê rất mạnh — mỗi 1.000 USD tăng thêm giúp odds đạt Senior tăng khoảng 1.23%.
Tất cả các biến nêu trên có ý nghĩa thống kê ở mức 5% hoặc thấp hơn, cho thấy mối liên hệ vững chắc giữa đặc điểm công việc và khả năng đạt cấp bậc cao trong ngành AI & Data Science.
# Bước 1: Tạo biến nhị phân nếu chưa có
d$senior_bin <- ifelse(d$experience_level == "Senior", 1, 0)
# Bước 2: Thiết lập nhóm tham chiếu cho các biến phân loại
d$company_size <- relevel(factor(d$company_size), ref = "M")
d$employment_type <- relevel(factor(d$employment_type), ref = "Full-time")
d$work_setting <- relevel(factor(d$work_setting), ref = "In-person")
# Bước 3: Mô hình hồi quy probit bội với salary_in_usd
reg_probit_multi <- glm(
senior_bin ~ company_size + employment_type + work_setting + salary_in_usd,
data = d,
family = binomial(link = "probit")
)
# Bước 4: Hiển thị kết quả
summary(reg_probit_multi)
##
## Call:
## glm(formula = senior_bin ~ company_size + employment_type + work_setting +
## salary_in_usd, family = binomial(link = "probit"), data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -3.550e-01 4.177e-02 -8.500 < 2e-16 ***
## company_sizeL -1.602e-01 5.414e-02 -2.959 0.00309 **
## company_sizeS -6.640e-01 1.145e-01 -5.800 6.65e-09 ***
## employment_typeContract -1.147e+00 3.779e-01 -3.036 0.00240 **
## employment_typeFreelance 1.204e-01 4.082e-01 0.295 0.76793
## employment_typePart-time -4.835e+00 3.297e+01 -0.147 0.88341
## work_settingHybrid -7.053e-01 1.108e-01 -6.365 1.96e-10 ***
## work_settingRemote 6.731e-02 3.017e-02 2.231 0.02568 *
## salary_in_usd 6.649e-06 2.618e-07 25.398 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10068 on 9346 degrees of freedom
## AIC: 10086
##
## Number of Fisher Scoring iterations: 12
Nhận xét
Mô hình có dạng: \[ \Phi^{-1}(\pi) = \beta_0 + \beta_1 \cdot \text{company_sizeL} + \beta_2 \cdot \text{company_sizeS} + \beta_3 \cdot \text{employment_typeContract} + \beta_4 \cdot \text{employment_typeFreelance} + \beta_5 \cdot \text{employment_typePart-time} \] \[ + \beta_6 \cdot \text{work_settingHybrid} + \beta_7 \cdot \text{work_settingRemote} + \beta_8 \cdot \text{salary_usd} \]
Trong đó: - \(\pi\): là xác suất một cá nhân đạt cấp bậc .
Hàm \(\Phi^{-1}\): là hàm nghịch đảo của phân phối chuẩn tích lũy chuẩn (hàm probit).
company_sizeM, employment_Fulltime và work_Inperson là các nhóm tham chiếu tương ứng.
Thay các hệ số ước lượng vào mô hình, ta được:
\[ \Phi^{-1}(\pi) = -0.3550 - 0.1602 \cdot \texttt{company_sizeL} - 0.6640 \cdot \texttt{company_sizeS} - 1.1470 \cdot \texttt{employment_typeContract} + 0.1204 \cdot \texttt{employment_typeFreelance} - 4.835 \cdot \texttt{employment_typePart-time} - 0.7053 \cdot \texttt{work_settingHybrid} + 0.0673 \cdot \texttt{work_settingRemote} + 0.000006649 \cdot \texttt{salary_in_usd} \]
Nhóm đặc trưng | Hệ số (β) | Giá trị z | Xác suất ước lượng \(\Phi(z)\) | Diễn giải chi tiết |
---|---|---|---|---|
company_sizeMedium |
–1.3158 | –1.3158 | ≈ 0.094 (9.4%) | Nhóm tham chiếu: công ty vừa có xác suất đạt cấp Senior là 9.4% |
company_sizeL |
–0.1602 | –1.4760 | ≈ 0.070 (7.0%) | Làm ở công ty lớn làm giảm xác suất đạt cấp Senior xuống còn 7.0% so với công ty vừa |
company_sizeS |
–0.6640 | –1.9798 | ≈ 0.024 (2.4%) | Làm ở công ty nhỏ làm giảm xác suất đạt Senior xuống còn 2.4% so với công ty vừa |
employment_typeContract |
–1.1470 | –2.4628 | ≈ 0.007 (0.7%) | Làm theo hợp đồng làm giảm xác suất đạt Senior xuống còn 0.7% so với full-time |
employment_typeFreelance |
+0.1204 | –1.1954 | ≈ 0.116 (11.6%) | Làm freelance tăng xác suất đạt Senior lên 11.6% so với full-time |
employment_typePart-time |
–4.8350 | –6.1508 | ≈ 0.000 | Làm part-time gần như không có khả năng đạt cấp Senior |
work_settingHybrid |
–0.7053 | –2.0211 | ≈ 0.022 (2.2%) | Làm hybrid làm giảm xác suất đạt cấp Senior xuống còn 2.2% so với làm trực tiếp |
work_settingRemote |
+0.0673 | –1.2485 | ≈ 0.106 (10.6%) | Làm remote tăng xác suất đạt Senior lên 10.6% so với làm trực tiếp |
salary_in_usd +1000 USD |
+0.006649 | –1.3091 | ≈ 0.095 (9.5%) | Tăng lương 1.000 USD giúp tăng nhẹ xác suất đạt Senior từ 9.4% lên 9.5% |
Kết luận
Mô hình Probit cho thấy một số yếu tố có ảnh hưởng đáng kể đến xác suất đạt cấp bậc Senior:
Làm việc ở công ty nhỏ, theo hợp đồng, hoặc làm hybrid đều làm giảm đáng kể khả năng đạt cấp Senior.
Làm remote có tác động tích cực nhẹ và có ý nghĩa thống kê.
Mức lương có ảnh hưởng tích cực rất rõ rệt — dù hệ số nhỏ, nhưng ý nghĩa thống kê cực mạnh (p < 2e-16).
Một số biến như employment_typeFreelance và Part-time không có ý nghĩa thống kê.
# Bước 1: Tạo biến nhị phân nếu chưa có
d$senior_bin <- ifelse(d$experience_level == "Senior", 1, 0)
# Bước 2: Đặt nhóm tham chiếu cho các biến phân loại
d$company_size <- relevel(factor(d$company_size), ref = "M")
d$employment_type <- relevel(factor(d$employment_type), ref = "Full-time")
d$work_setting <- relevel(factor(d$work_setting), ref = "In-person")
# Bước 3: Mô hình cloglog bội với salary_in_usd
reg_cloglog_multi <- glm(
senior_bin ~ company_size + employment_type + work_setting + salary_in_usd,
data = d,
family = binomial(link = "cloglog")
)
# Bước 4: Hiển thị kết quả
summary(reg_cloglog_multi)
##
## Call:
## glm(formula = senior_bin ~ company_size + employment_type + work_setting +
## salary_in_usd, family = binomial(link = "cloglog"), data = d)
##
## Coefficients:
## Estimate Std. Error z value Pr(>|z|)
## (Intercept) -5.250e-01 3.994e-02 -13.145 < 2e-16 ***
## company_sizeL -1.496e-01 5.325e-02 -2.809 0.00497 **
## company_sizeS -8.393e-01 1.486e-01 -5.648 1.62e-08 ***
## employment_typeContract -1.340e+00 5.041e-01 -2.659 0.00784 **
## employment_typeFreelance -1.699e-01 5.374e-01 -0.316 0.75191
## employment_typePart-time -1.267e+01 1.221e+02 -0.104 0.91731
## work_settingHybrid -9.837e-01 1.507e-01 -6.529 6.60e-11 ***
## work_settingRemote 6.945e-02 2.803e-02 2.477 0.01323 *
## salary_in_usd 5.316e-06 2.308e-07 23.034 < 2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## (Dispersion parameter for binomial family taken to be 1)
##
## Null deviance: 11144 on 9354 degrees of freedom
## Residual deviance: 10147 on 9346 degrees of freedom
## AIC: 10165
##
## Number of Fisher Scoring iterations: 12
Nhận xét
Mô hình có dạng: \[ \log(-\log(1 - \pi)) = \beta_0 + \beta_1 \cdot \text{company_sizeL} + \beta_2 \cdot \text{company_sizeS} + \beta_3 \cdot \text{employment_typeContract} + \beta_4 \cdot \text{employment_typeFreelance} + \beta_5 \cdot \text{employment_typePart-time} \] \[ + \beta_6 \cdot \text{work_settingHybrid} + \beta_7 \cdot \text{work_settingRemote} + \beta_8 \cdot \text{salary_usd} \]
Trong đó:
\(\pi\): là xác suất để một cá nhân đạt cấp bậc .
Hàm \(\log(-\log(1 - \pi))\): là hàm liên kết cloglog.
Thay các hệ số ước lượng vào phương trình, ta được:
\[ \log(-\log(1 - \pi)) = -0.5250 - 0.1496 \cdot \texttt{company_sizeL} - 0.8393 \cdot \texttt{company_sizeS} - 1.3400 \cdot \texttt{employment_typeContract} - 0.1699 \cdot \texttt{employment_typeFreelance} - 12.6700 \cdot \texttt{employment_typePart-time} - 0.9837 \cdot \texttt{work_settingHybrid} + 0.0695 \cdot \texttt{work_settingRemote} + 5.316 \times 10^{-6} \cdot \texttt{salary_in_usd} \]
Nhóm đặc trưng | Hệ số (β) | Giá trị cloglog \(\eta\) | Xác suất ước lượng \(\pi\) | Diễn giải chi tiết |
---|---|---|---|---|
Công ty vừa (tham chiếu) | –0.5250 | –0.5250 | ≈ 41.2% | Nhóm công ty vừa có xác suất đạt cấp Senior là 41.2% |
company_sizeL |
–0.1496 | –0.6746 | ≈ 35.9% | Làm việc ở công ty lớn giảm xác suất đạt Senior xuống còn 35.9% so với công ty vừa |
company_sizeS |
–0.8393 | –1.3643 | ≈ 22.1% | Công ty nhỏ giảm mạnh xác suất đạt Senior xuống còn 22.1% so với công ty vừa |
employment_typeContract |
–1.3400 | –1.8650 | ≈ 15.4% | Làm hợp đồng giảm đáng kể xác suất đạt Senior xuống 15.4% so với full-time |
employment_typeFreelance |
–0.1699 | –0.6949 | ≈ 35.1% | Làm freelance giảm nhẹ xác suất đạt Senior xuống 35.1% |
employment_typePart-time |
–12.670 | –13.1950 | ≈ 0.0% | Làm part-time gần như không có khả năng đạt cấp Senior |
work_settingHybrid |
–0.9837 | –1.5087 | ≈ 19.5% | Làm hybrid giảm mạnh xác suất đạt Senior xuống 19.5% so với làm trực tiếp |
work_settingRemote |
+0.0695 | –0.4555 | ≈ 43.5% | Làm remote tăng nhẹ xác suất đạt Senior lên 43.5% so với làm trực tiếp |
salary_in_usd +1000 USD |
+0.005316 | –0.5197 | ≈ 41.4% | Tăng lương 1.000 USD tăng nhẹ xác suất đạt Senior lên 41.4% |
Kết luận
Kết quả từ mô hình hồi quy Cloglog cho thấy nhiều yếu tố có ảnh hưởng rõ rệt đến xác suất đạt cấp bậc Senior.
Cụ thể:
Làm việc ở công ty nhỏ hoặc lớn, thay vì công ty vừa, làm giảm xác suất đạt cấp Senior đáng kể.
Các hình thức làm việc hợp đồng, freelance, part-time đều giảm xác suất, trong đó part-time gần như không có khả năng thăng cấp.
Làm việc hybrid cũng làm giảm mạnh xác suất, trong khi remote mang lại hiệu ứng tăng nhẹ.
Thu nhập vẫn là yếu tố tích cực: tăng 1.000 USD giúp xác suất đạt cấp Senior nhỉnh hơn, dù mức tăng khá nhỏ.
# Tính AIC, BIC, Brier Score cho 3 mô hình
results <- data.frame(
Mô_hình = c("Logit", "Probit", "Cloglog"),
AIC = c(
AIC(reg_logit_multi),
AIC(reg_probit_multi),
AIC(reg_cloglog_multi)
),
BIC = c(
BIC(reg_logit_multi),
BIC(reg_probit_multi),
BIC(reg_cloglog_multi)
)
)
# Làm tròn và in bảng
results$AIC <- round(results$AIC, 3)
results$BIC <- round(results$BIC, 3)
# Hiển thị
library(knitr)
kable(results, caption = "So sánh AIC, BIC giữa 3 mô hình hồi quy nhị phân")
Mô_hình | AIC | BIC |
---|---|---|
Logit | 10040.76 | 10105.05 |
Probit | 10086.46 | 10150.76 |
Cloglog | 10164.62 | 10228.92 |
Nhận xét
Dựa trên kết quả so sánh AIC và BIC giữa ba mô hình hồi quy nhị phân (Logit, Probit, và Cloglog), mô hình Logit cho thấy độ phù hợp tốt nhất với dữ liệu, với AIC = 10040.76 và BIC = 10105.05 — thấp nhất trong số ba mô hình. So với Logit, mô hình Probit có AIC cao hơn khoảng 45.7 điểm, trong khi Cloglog có AIC cao nhất (10164.62), cho thấy khả năng mô tả dữ liệu kém hơn. Vì vậy, mô hình Logit được ưu tiên lựa chọn để phân tích xác suất đạt cấp bậc Senior trong nghiên cứu này.
Nghiên cứu đã phân tích 9.355 quan sát nhằm xác định các yếu tố ảnh hưởng đến khả năng đạt cấp bậc Senior trong ngành Trí tuệ nhân tạo và Khoa học Dữ liệu. Thông qua các phương pháp thống kê mô tả, kiểm định giả thuyết và mô hình hồi quy nhị phân, nghiên cứu cho thấy năm biến chính có ảnh hưởng rõ rệt: employment_type, work_setting, company_size, và salary_in_usd.
Cụ thể, những cá nhân làm việc Full-time, tại văn phòng (In-person), có kinh nghiệm ở cấp độ Senior hoặc Executive, làm việc trong công ty Medium, và có mức salary_in_usd cao hơn có xác suất đạt cấp bậc cao hơn rõ rệt. Ngược lại, các đặc điểm như Contract, Freelance, Hybrid, Entry-level, công ty Small, hay mức lương thấp đều làm giảm đáng kể xác suất này.
Trong các mô hình được so sánh, mô hình logit được lựa chọn là ưu tiên do có chỉ số AIC và BIC thấp nhất, thể hiện khả năng dự báo tốt và phù hợp nhất với dữ liệu.
Kết quả nghiên cứu cung cấp căn cứ thực nghiệm rõ ràng cho việc đánh giá khả năng thăng tiến của nhân sự, đồng thời gợi ý định hướng chiến lược phát triển nghề nghiệp cho cá nhân và tổ chức trong lĩnh vực AI và Khoa học Dữ liệu.
Trong quá trình nghiên cứu, chúng tôi nhận thấy phân tích định tính là một công cụ hiệu quả để tìm hiểu các yếu tố ảnh hưởng đến cấp bậc nghề nghiệp trong ngành Trí tuệ nhân tạo và Khoa học Dữ liệu. Thông qua việc xử lý và phân tích bộ dữ liệu đã có sẵn, chúng tôi có thể xác định được những yếu tố quan trọng như loại hình công việc, nơi làm việc, trình độ chuyên môn và quy mô công ty có ảnh hưởng nhất định đến khả năng thăng tiến nghề nghiệp.
Tuy nhiên, đề tài vẫn còn một số hạn chế. Việc sử dụng dữ liệu thứ cấp khiến chúng tôi không thể kiểm soát được chất lượng ban đầu cũng như các biến chưa được thu thập. Ngoài ra, phân phối mẫu không đều giữa các nhóm (ví dụ: part-time, freelance, công ty nhỏ) có thể gây sai lệch trong kết luận. Dữ liệu cũng không phản ánh đầy đủ các yếu tố định tính như động lực cá nhân, văn hóa tổ chức hay năng lực mềm. Việc chỉ sử dụng các mô hình định lượng cơ bản có thể chưa khai thác hết chiều sâu của dữ liệu, và một số mô hình có giả định đơn giản chưa chắc đã phù hợp với thực tiễn phức tạp của ngành AI.
Cuối cùng, kết quả phân tích chỉ phản ánh mối liên hệ chứ không chứng minh được quan hệ nhân quả. Do đó, cần thận trọng khi diễn giải và áp dụng vào thực tế.
Dựa vào môn học phân tích dữ liệu định tính, đề tài có thể được mở rộng sang các ngành nghề khác như tài chính, y tế, giáo dục để phân tích yếu tố ảnh hưởng đến lương hoặc mức độ hài lòng công việc. Ngoài ra, có thể ứng dụng vào các vấn đề xã hội như xu hướng làm việc từ xa, sự chênh lệch thu nhập theo giới hoặc vùng miền. Các nghiên cứu này sẽ cung cấp bằng chứng thực nghiệm hữu ích cho việc hoạch định chính sách.