在R语言glm()函数中,family="binomial"与family=binomial是否等效?
R中glm()二元分类模型的family参数两种写法对比
family = "binomial"和family = binomial在glm()中完全等价,可以互换使用,生成的拟合结果完全一致。
原因解释
glm()的family参数支持两种输入形式:
- 字符型字符串(如"binomial"):glm内部会自动将其映射为对应的分布族函数(即调用
binomial()),生成标准的二项分布族对象。 - 分布族函数名(如binomial):传入函数名时,glm会自动执行该函数,生成同样的分布族对象。
两种方式最终传递给glm的是同一个分布族对象,因此拟合过程和结果没有任何差异。
代码验证示例
用构造的二元分类数据测试两种写法的一致性:
# 构造二元分类数据集:判断鸢尾花是否为setosa iris_bin <- iris iris_bin$is_setosa <- as.factor(ifelse(iris_bin$Species == "setosa", 1, 0)) # 两种方式拟合逻辑回归模型 model_str <- glm(is_setosa ~ Sepal.Length + Sepal.Width, data = iris_bin, family = "binomial") model_fun <- glm(is_setosa ~ Sepal.Length + Sepal.Width, data = iris_bin, family = binomial) # 对比模型系数 all.equal(coef(model_str), coef(model_fun)) # 输出结果:TRUE # 对比完整模型对象 all.equal(model_str, model_fun) # 输出结果:TRUE
扩展:指定额外参数的情况
如果需要自定义link函数(比如用probit代替默认的logit),两种写法也都支持且等价:
- 字符串写法:
glm(..., family = "binomial", link = "probit") - 函数写法:
glm(..., family = binomial(link = "probit"))
内容的提问来源于stack exchange,提问作者Phoebe
相关产品推荐
相关产品推荐

