我一直在尝试使用基因测试成功的数据(yes=成功测试;no=失败测试)来实现GLM模型。
> 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个不同的观察者)。
我想找出在解释一个成功的测试时,哪些变量是最重要的,即successyes
。
我已经按照下面的代码构建了不同效果之间的交互和不交互的模型,并选择了最简约的模型,遵循具有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
实现正确了吗?
希望有人能把我带到正确的轨道上,我希望这个问题能引起大家的兴趣。
发布于 2019-11-22 17:03:38
您可以将success
列转换为因子。因此,如果您执行其他模型,如xgboost,您将不会得到任何错误
dataraw$success = as.factor(dataraw$success)
发布于 2019-11-28 12:17:22
将其设置为0,1和no,yes会得到相同的结果。为了正确地确定系数的方向,您需要确保您尝试预测的类别被编码为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
至于找出“在解释成功的测试中哪些变量是最重要的”,我也会尝试一个完整的模型:
glm(success ~ . + pre:during, data=dataraw , family=binomial)
在某些变量相互关联的情况下,您将看到它可能会给出不同的结果,而不是单独计算每个变量
https://stackoverflow.com/questions/58998237
复制相似问题