1

当我在 R 中运行“glm”时,“性别”变量以 M 为后缀(代表男性)。它有什么特殊含义还是我的代码有问题

>as.formula('response ~ gender + age + var1 +var2+var3+var4')
  response ~ gender + age + var1 + var2 + var3 + var4
>model <- try(glm(formula = fmla,   na.action=na.exclude , data = tmpData));
>summary(model) 
>    

                           Estimate Std. Error t value Pr(>|t|)    
(Intercept)                   27.5192512  0.7215193  38.141  < 2e-16 ***
genderM                       -3.1572328  0.3952508  -7.988 1.87e-15 ***
age                            0.0078203  0.0139269   0.562   0.5745    
var1                          -0.0007449  0.0004484  -1.661   0.0968 .  
var2                           0.0284026  0.0017356  16.365  < 2e-16 ***
var3                           0.0007293  0.0005172   1.410   0.1586    
var4                           0.0854644  0.0418632   2.042   0.0413 *  
4

3 回答 3

1

那是因为您已将性别定义为一个因素(检查 的输出class(gender))。glm()将除参考水平( 中的第一个levels(gender))之外的因子的每个水平视为模型中的虚拟二分变量(0 或 1),并为每个水平输出回归系数。

如果您的因子有 n 个水平,那么您将有 n-1 个虚拟变量。如果你的因子只有两个水平,就像你的那样,你只会得到一个虚拟变量,系数与你有一个数字 0 或 1 变量一样。

于 2013-01-16T22:59:50.900 回答
0

用于线性模型中每个变量的对比系数由 contrasts 属性确定,您可以使用该contrasts()函数查看和更改该属性,例如:

require(reshape)
mdata <- melt(UCBAdmissions)
contrasts(mdata$Gender)
glm(mdata$value ~ mdata$Gender + mdata$Admit + mdata$Dept)
contrasts(mdata$Gender) <- c(-0.5, 0.5) # Use "deviation coding" instead
glm(mdata$value ~ mdata$Gender + mdata$Admit + mdata$Dept)

无序因子的默认对比编码是处理对比/虚拟编码。如果您不确定这些类型的对比编码之间的差异,您可能需要查看stats.stackexchange.com

于 2013-01-16T23:12:18.490 回答
0

就好像你有一个虚拟的 0-1 变量,其中 1 代表gender存在M(大概 0 代表F)。因此,您是说考虑到其他变量,具有该值的案例的响应比具有gender该值M 的案例的响应低约 3 F

试试这个例子

require(reshape)
mdata <- melt(UCBAdmissions) 
glm(mdata$value ~ mdata$Gender + mdata$Admit + mdata$Dept)

你会得到类似的东西。和其他部门的值mdata$DeptB 与 的基本位置不同DeptA

于 2013-01-16T22:57:59.570 回答