首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我的具有二项分布的GLM模型实现正确了吗?

我的具有二项分布的GLM模型实现正确了吗?
EN

Stack Overflow用户
提问于 2019-11-22 16:29:20
回答 2查看 37关注 0票数 0

我一直在尝试使用基因测试成功的数据(yes=成功测试;no=失败测试)来实现GLM模型。

代码语言:javascript
运行
AI代码解释
复制
> 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-wetpre-dry)、during (wetdry)、season (winterfall)和observer (最多10个不同的观察者)。

我想找出在解释一个成功的测试时,哪些变量是最重要的,即successyes

我已经按照下面的代码构建了不同效果之间的交互和不交互的模型,并选择了最简约的模型,遵循具有AIC值的理论方法:

代码语言:javascript
运行
AI代码解释
复制
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实现正确了吗?

希望有人能把我带到正确的轨道上,我希望这个问题能引起大家的兴趣。

EN

回答 2

Stack Overflow用户

发布于 2019-11-22 17:03:38

您可以将success列转换为因子。因此,如果您执行其他模型,如xgboost,您将不会得到任何错误

代码语言:javascript
运行
AI代码解释
复制
    dataraw$success = as.factor(dataraw$success)
票数 1
EN

Stack Overflow用户

发布于 2019-11-28 12:17:22

将其设置为0,1和no,yes会得到相同的结果。为了正确地确定系数的方向,您需要确保您尝试预测的类别被编码为1,或者在级别中是第2个。

下面是一个例子:

代码语言:javascript
运行
AI代码解释
复制
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

至于找出“在解释成功的测试中哪些变量是最重要的”,我也会尝试一个完整的模型:

代码语言:javascript
运行
AI代码解释
复制
glm(success ~ . + pre:during, data=dataraw , family=binomial)

在某些变量相互关联的情况下,您将看到它可能会给出不同的结果,而不是单独计算每个变量

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58998237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档