二项式,二项式()和'二项式'之间的差异

时间:2015-05-08 16:01:08

标签: r

二项式,二项式()和'二项式'之间有什么区别?当使用glm时。它们不完全相同,可以通过以下代码看出:

> library(MASS)
> bwdf = birthwt[-10]    
> mod = glm(low~., data=bwdf, family=binomial)
> mod2 = glm(low~., data=bwdf, family=binomial())
> mod3 = glm(low~., data=bwdf, family="binomial")
> identical(mod, mod2)
[1] FALSE
> identical(mod3, mod2)
[1] FALSE
> identical(mod3, mod)
[1] FALSE

但价值观相同:

> mod

Call:  glm(formula = low ~ ., family = binomial, data = bwdf)

Coefficients:
(Intercept)          age          lwt        race2        race3       smoke1          ptl          ht1          ui1          ftv  
    0.48062     -0.02955     -0.01542      1.27226      0.88050      0.93885      0.54334      1.86330      0.76765      0.06530  

Degrees of Freedom: 188 Total (i.e. Null);  179 Residual
Null Deviance:      234.7 
Residual Deviance: 201.3        AIC: 221.3
> 
> mod2

Call:  glm(formula = low ~ ., family = binomial(), data = bwdf)

Coefficients:
(Intercept)          age          lwt        race2        race3       smoke1          ptl          ht1          ui1          ftv  
    0.48062     -0.02955     -0.01542      1.27226      0.88050      0.93885      0.54334      1.86330      0.76765      0.06530  

Degrees of Freedom: 188 Total (i.e. Null);  179 Residual
Null Deviance:      234.7 
Residual Deviance: 201.3        AIC: 221.3
> 
> mod3

Call:  glm(formula = low ~ ., family = "binomial", data = bwdf)

Coefficients:
(Intercept)          age          lwt        race2        race3       smoke1          ptl          ht1          ui1          ftv  
    0.48062     -0.02955     -0.01542      1.27226      0.88050      0.93885      0.54334      1.86330      0.76765      0.06530  

Degrees of Freedom: 188 Total (i.e. Null);  179 Residual
Null Deviance:      234.7 
Residual Deviance: 201.3        AIC: 221.3

有什么不同吗?

1 个答案:

答案 0 :(得分:5)

请记住,identical函数非常挑剔,mod个对象的一部分是用于创建对象的调用。 call根据括号和引号会有所不同,因此identical会说它们不同。尝试在你关心的mod对象上调用identical,看看它们是否相同。

如果你查看glm代码的前几行,你会看到它检查family参数,如果它是一个字符串,那么它使用get来“获得”该名称的功能。如果family是一个函数(传入或作为get的结果),则它调用该函数。因此,无论您将名称作为字符串,函数还是评估函数的结果传递,在代码的第1部分之后,您将在family中具有完全相同的结果,因此结果相同(但是call会有所不同。