簡體   English   中英

我的 GLM model 是否正確實施了二項分布?

[英]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的發生,分別是prepre-wetpre-dry )、 duringwetdry )、 seasonwinterfall )和observer (最多 10 個不同的觀察者)。

我想找出哪些變量在解釋成功的測試時最重要,即successyes

我已經按照下面的代碼構建了模型,有和沒有不同效果之間的相互作用,並選擇了最簡約的 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM