[英]Is my GLM model with a binomial distribution correctly implemented?
我一直在嘗試使用基因測試成功的數據來實現 GLM model(是=測試成功;否=測試不成功)。
> head(dataraw)
success pre during season observer
1: no pre-wet dry winter JvD&OK
2: yes pre-wet dry winter JvD&OK
3: no pre-wet dry winter JvD&OK
4: yes pre-wet dry winter JvD
5: yes pre-wet dry winter JvD
6: yes pre-wet dry winter JvD
四個預測變量用於解釋響應變量success
的發生,分別是pre
( pre-wet
或pre-dry
)、 during
( wet
或dry
)、 season
( winter
或fall
)和observer
(最多 10 個不同的觀察者)。
我想找出哪些變量在解釋成功的測試時最重要,即success
: yes
。
我已經按照下面的代碼構建了模型,有和沒有不同效果之間的相互作用,並選擇了最簡約的 model,遵循具有 AIC 值的理論方法:
m1 <- glm((success) ~ pre , data=dataraw , family=binomial)
summary(m1)
plot(allEffects(m1))
AIC(m1)
m2 <- glm((success) ~ during , data=dataraw , family=binomial)
summary(m2)
plot(allEffects(m2))
AIC(m2)
m3 <- glm((success) ~ season , data=dataraw , family=binomial)
summary(m3)
plot(allEffects(m3))
AIC(m3)
m4 <- glm((success) ~ observer , data=dataraw , family=binomial)
summary(m4)
plot(allEffects(m4))
AIC(m4)
m5 <- glm((success) ~ pre*during , data=dataraw , family=binomial)
summary(m4)
plot(allEffects(m4))
AIC(m4)
etc.
我不確定我是否遵循了好的方法以及我的代碼是否正確,特別是因為我看到其他人在使用二項分布時使用1
(表示是)和0
(表示否)。 這有關系嗎? 我的數據集dataraw
是否正確實施?
希望有人能讓我走上正軌,我希望這個問題能引起人們的興趣。
您可以將success
列轉換為因子。 因此,如果您執行 xgboost 等其他模型,您將不會收到任何錯誤
dataraw$success = as.factor(dataraw$success)
將其設置為 0,1 和 no,yes 會給出相同的結果。 要正確定位系數,您需要確保您嘗試預測的 class 被編碼為 1,或者在級別中為第 2 位。
請參閱下面的示例:
df <- mtcars
# setting it as 1 and 0
# creating a response based on mpg values
df$response <- ifelse(df$mpg > 20,1,0)
coefficients(summary(glm(response ~ gear,data=df,family="binomial")))
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.487170 2.1205286 -2.116062 0.03433955
gear 1.143544 0.5630026 2.031152 0.04223960
df$response <- factor(ifelse(df$mpg > 20,"yes","no"))
# setting it as a factor
#by default,levels are sorted alphabetically, so it works if it is yes/no
levels(df$response)
[1] "no" "yes"
coefficients(summary(glm(response ~ gear,data=df,family="binomial")))
Estimate Std. Error z value Pr(>|z|)
(Intercept) -4.487170 2.1205286 -2.116062 0.03433955
gear 1.143544 0.5630026 2.031152 0.04223960
# now we flip the levels
# you can see coefficients are flipped
df$response <- factor(ifelse(df$mpg > 20,"yes","no"),levels=c("yes","no"))
coefficients(summary(glm(response ~ gear,data=df,family="binomial")))
Estimate Std. Error z value Pr(>|z|)
(Intercept) 4.487170 2.1205286 2.116062 0.03433955
gear -1.143544 0.5630026 -2.031152 0.04223960
至於找到“哪些變量對解釋成功的測試最重要”,我也會嘗試完整的 model :
glm(success ~ . + pre:during, data=dataraw , family=binomial)
如果某些變量是相關的,您會發現它可能會因單獨評估每個變量而給出不同的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.