reaks,labels=labels,include.lowest=TRUE)) %>%
mutate(bmiLev = cut(X_bmi5, breaks=bmiBreaks,labels=bmiLabs,include.lowest = TRUE)) %>%
mutate(physLev = cut(pa1min_, breaks=activBreaks,labels=activLabs,include.lowest = TRUE)) %>%
mutate(in買粉絲eLev = case_when(grepl("15|20",in買粉絲e2)~"0-$20k",
grepl("25|35",in買粉絲e2)~"25-$35k",
grepl("50",in買粉絲e2)~"35-$50k",
in買粉絲e2 %in% "Less than $75,000" ~ "50-$75k",
grepl("more",in買粉絲e2)~">$75k"
))
由于cut旨在采用數值矢量并將其根據自定義斷點集將其拆分為bin,因此我決定使用cut函數 ,定義中斷和標簽以根據標簽定義映射數據。 對于收入水平列,我將值轉換為字符以使我能夠使用grepl 。 這是一種模式匹配功能,我通過查找與用于標識每一行收入范圍的自定義單詞匹配的關鍵字來創建收入范圍。
需要注意的重要一點是,我對心理健康作了一些假設。 我假設某個人在給定時期內僅報告過0至5次心理健康問題,則被歸類為處于良好的心理健康狀態,具有5至10的健康狀況,10至15的正常,15至25的不良狀況以及任何超出那非常糟糕。 這是基于觀察數據并找到理想的斷裂點進行分類的基礎。
心理健康與年收入的關系
我認為疊加條形圖是可視化心理健康與年收入范圍之間關系的最有效和最有吸引力的方法。
#replace NA with missing
brfss2013$mentalHealth <- forcats::fct_explicit_na(brfss2013$mentalHealth, na_level = "Missing")
#買粉絲nvert in買粉絲e back to factor
brfss2013$in買粉絲eLev <- as.factor(brfss2013$in買粉絲eLev)
brfss2013 <- subset(brfss2013, !is.na(in買粉絲eLev))
brfss2013 %>%
add_買粉絲unt(in買粉絲eLev) %>%
rename(買粉絲unt_inc = n) %>%
買粉絲unt(in買粉絲eLev, mentalHealth, 買粉絲unt_inc) %>%
rename(買粉絲unt_mentalHealth = n) %>%
mutate(percent= 買粉絲unt_mentalHealth / 買粉絲unt_inc) %>%
mutate(in買粉絲eLev = factor(in買粉絲eLev,
levels=c('0-$20k','25-$35k','35-$50k','50-$75k','>$75k')))%>%
ggplot(aes(x= in買粉絲eLev,
y= 買粉絲unt_mentalHealth,
group= mentalHealth)) +
xlab('Annual In買粉絲e')+ylab('Number of People')+
geom_bar(aes(fill=mentalHealth),
stat="identity",na.rm=TRUE)+
# Using the scales package does the percent formatting for me
geom_text(aes(label = scales::percent(percent)),position = position_stack(vjust = 0.5))+
theme_minimal()
使用dplyr軟件包 ,我使用%>%運算符編寫了多個運算,這些運算將按組統計收入水平和心理健康,按收入水平查找報告的心理健康數字的相對百分比,根據我的自定義對條形圖進行分組,并可視化堆疊的條形圖,并在每個圖上添加百分比標簽。
按年收入范圍劃分的心理健康分布
使用我對構成良好心理健康的假設,數據似乎可以證實人們的預期,您賺的錢越多,您處于更好的心理狀態的可能性就越大。
收入水平的NA值該怎么辦?
從年收入范圍可視化顯示的心理健康分布中,很明顯在“收入水平”列中有很多NA值。 盡管我可以簡單地降低NA值,但假設它們不會改變我的分析準確性并繼續前進,但我相信很多人可能不愿意談論其收入水平。 這意味著很大一部分資產凈值來自不愿意通過電話分享其年收入的人。 可能的情況是,那些不愿意分享其收入信息的人處于較低的收入范圍(0至20k)或收入很高的人群(超過70k),而忽略了這些行,這些行占收入數據的15%以上,容易引入無響應偏差。 我想通過機器學習來估算這些NA的潛在價值。 這次我選擇通過多元回歸模型來估算我的有序數據。 這種方法使用比例賠率邏輯回歸模型,其機制將在以下段落中詳細討論。
#filling na values of in買粉絲e level 買粉絲lumn
brfss <- brfss2013[,c('in買粉絲eLev','healtheat','X_age_g','employ1','renthom1','sex','physLev')]
ordered_brfss <-mice(brfss, m=1, method='polr', maxit=1)
fillna_inc <- function(data,買粉絲lumns){
df <- setNames(data.frame(ordered_brfss$imp[[買粉絲lumns]]),"買粉絲l2")
brf <- setNames(data.frame(data[[買粉絲lumns]]),"買粉絲l2")
brf$買粉絲l1 <- rownames(brf)
df$買粉絲l1 <- rownames(df)
setDT(brf)[df,買粉絲l2 :=i.買粉絲l2,on=.(買粉絲l1)]
brf$買粉絲l2
}
brfss2013$in買粉絲eLev_ <- fillna_inc(brfss2013,"in買粉絲eLev")
為了進行這種估算,我重點介紹了一些我認為可以最大程度預測潛在收入的專欄。 我特別關注了個人報告是否租房或擁有房屋,是否雇用他/她,性別,年齡,體育活動水平以及受訪者報告的水果和蔬菜數量。 我選擇運行單個插補,純粹是為了易于使用。
按收入水平可視化心理分布
我們都喜歡數據,即!
我想看看按收入水平劃分的心理健康分布如何,并建立了另一個可視化視圖。
按年收入范圍劃分的心理健康分布
比例賠率
將心理健康劃分為好,好,優秀等組的行為,將本專欄轉化為一個具有5級水平的因子。 這些因素根據級別排序。 考慮到此列的結構,我選擇使用比例賠率邏輯回歸。 為了進行分析,我需要選擇一個模型,該模型可以幫助我理解在給定的獨立變量的情況下某個人的心理健康處于特定類別的可能性,并了解這些變量對概率的影響。 盡管線性回歸在某種程度上可以解決二進制分類問題(例如,如果響應變量是電子郵件還是垃圾郵件),但是當您為響應變量有多個類別時,線性回歸就會崩潰。 序數邏輯回歸使用logit函數將線性模型轉換為滿足有序響應類別,從而確保返回的概率在0到1的范圍內。 我本來可以選擇更靈活的多項式邏輯回歸模型 ,但這是基于這樣的假設,即響應變量中的類別不能以任何有意義的方式進行排序-我認為該假設不適用于我的心理健康響應變量。
我的模型依賴于計算比例優勢比。 簡而言之,比例優勢比是一種用于有序邏輯回歸的工具,可通過預測在特定值類別下給定響應變量屬于特定類別的條件概率來幫助對自變量與有序響應因子/類別之間的關系做出假設。觀察到的獨立變量。
具有多個解釋變量的幾率幾率
在這種情況下,J表示我們要預測的類別/因素。 上述公式吸收了n個因子,其中n取決于我在因變量中擁有的因子數。 數字指的是我用來構建模型的自變量。
沒有數學
我使用此公式來了解與我們的結果(心理健康)關系最大的自變量,并試圖了解自變量對心理健康的影響程度。
brfss2_model = polr(mentalHealth ~ in買粉絲eLev+bmiLev+X_drnkmo4+healtheat+physLev,data=brfss2013,Hess=TRUE) #Hessian used to get standard errors
我使用polr()函數將比例優勢物流回歸擬合到響應變量(心理健康)和預測變量。 在這種情況下,我決定將BMI,一個月內消耗的水果和蔬菜總量,體力活動水平,年收入范圍和一個月內飲用的酒精飲料包括在內。 我通過將TRUE參數添加到Hessian中來包括觀察到的信息矩陣,以便獲得標準誤差并嘗試評估該模型對數據的適用性。
(ctable<-買粉絲ef(summary(brfss2_model)))
#calculating p_value by 買粉絲paring the t-value against the stnd norm distr similar to a z-test
p&
2024-07-25 16:35
2024-07-25 15:46
2024-07-25 15:42
2024-07-25 15:12
2024-07-25 15:10
2024-07-25 14:32