今天還是給大家寫一個比較基礎的-邏輯斯蒂迴歸。
Logistic regression, also called a logit model, is used to model dichotomous outcome variables. In the logit model the log odds of the outcome is modeled as a linear combination of the predictor variables.
啥是邏輯斯蒂呢?這個就是廣義線性迴歸的一種,適用於因變數為分類變數的時候,今天呢,只給大家寫因變數是二分類的情況。
資料就4個變數,admit、gre、gpa、和rank,今天我們就用這4個變數構建邏輯斯蒂迴歸模型。
myData <- read.csv("binary.csv")head(myData)summary(myData)str(myData)# 將rank轉化為因子型別myData$rank <- factor(myData$rank)summary(myData)# 稍微修改下源資料使其更適合邏輯斯蒂迴歸myData[myData$admit == 1, 3] <- myData[myData$admit == 1, 3] + 1
任何分析的第一步都是先畫圖
所以我們就先來畫我們的變數之間散點圖:
#散點圖library(ggplot2)ggplot(myData, aes(gpa, admit)) + geom_point()#加上線性擬合ggplot(myData, aes(gpa, admit)) + geom_point() + geom_smooth(method = "lm", se = FALSE) + coord_cartesian(ylim = c(0, 1))#加上邏輯斯蒂迴歸ggplot(myData, aes(gpa, admit)) + geom_point() + geom_smooth(method = "glm", se = T, method.args = list(family = "binomial"))
畫個圖就可以很一目瞭然的看出確實邏輯斯蒂比線性迴歸擬合更好。
好。
現在就來建模:
gpaModel <- glm(admit ~ gpa, data = myData, family = "binomial")summary(gpaModel)
首先我們是用gpa來預測admit,可以得到模型結果
可以看到結果中就有變數的係數和顯著性水平,我們可以看到gpa的係數是8.708這個指的是logOR的改變數哦。
當然,我們還可以得到係數的置信區間:
exp(confint(gpaModel))
上面的例子中,我們只用了一個預測變數,接下來我們所有變數都用:
fullModel <- glm(admit ~ gpa + gre + rank, data = myData, family = "binomial")summary(fullModel)
這個時候,輸出結果就比較複雜了,可以看到,gpa和gre這兩個變數都有顯著性意義,rank這個變數有4個水平,因為我們之前有將rank轉化為因子型別,所以此時它被自動轉化為3個啞變數,並且以rank1為參考水平。
同樣的,我們依然可以獲得各個係數的置信區間:
exp(confint(fullModel))
程式碼中加上exp,得到的係數就是OR的改變量了
其實這兒還想強調一點,大家注意我們這個全模型得到的gre的原始係數只有0.005345,非常的小,這是因為gre這個變數是在百這個數量級上的,而其他的變數都是個位數,就是因為這種數量級的不一致導致了係數相差巨大,所以更好的擬合方法因該是將gre這個變數進行轉換,比如說以2為底數進行log轉換後再擬合模型:
fullModel <- glm(admit ~ gpa + log2(gre) + rank, data = myData, family = "binomial")summary(fullModel)
這個時候再看,log2gre的係數就大小和gpa差不多了,此時係數的解釋就是gre每增加2倍logOR的改變數。
我們還可以將模型係數和其自信區間同時輸出:
cbind(OR=exp(coef(fullModel)),exp(confint(fullModel)))
往期內容: