R 是否有任何方法适合“glm()”,以便包括所有级别(即无参考级别)?

R 是否有任何方法适合“glm()”,以便包括所有级别(即无参考级别)?,r,glm,levels,R,Glm,Levels,以代码为例: x <- read.table("http://data.princeton.edu/wws509/datasets/cuse.dat", header=TRUE)[,1:2] fit <- glm(education ~ age, family="binomial", data=x) summary(fit) 其中age有4个级别:您需要使用model.matrix函数将age变量中的因子转换为二进制变量 见答案 编辑: 以下是一

以代码为例:

x <- read.table("http://data.princeton.edu/wws509/datasets/cuse.dat",
                header=TRUE)[,1:2]

fit <- glm(education ~ age, family="binomial", data=x)

summary(fit)
其中age有4个级别:您需要使用model.matrix函数将age变量中的因子转换为二进制变量

见答案

编辑: 以下是一个例子:

x <- read.table("http://data.princeton.edu/wws509/datasets/cuse.dat",
                header=TRUE)[,1:2]
binary_variables <- model.matrix(~ x$age -1, x)
fit <- glm(x$education ~ binary_variables, family="binomial")
summary(fit)
您需要使用model.matrix函数将年龄变量中的因子转换为二进制变量

见答案

编辑: 以下是一个例子:

x <- read.table("http://data.princeton.edu/wws509/datasets/cuse.dat",
                header=TRUE)[,1:2]
binary_variables <- model.matrix(~ x$age -1, x)
fit <- glm(x$education ~ binary_variables, family="binomial")
summary(fit)
请参见?公式,具体来说,在您的型号规格中包含+0的含义

# Sample data - explanatory variable (continuous)
x <- runif( 100 )
# explanatory data, factor with 3 levels
f <- as.factor( sample( 3 , 100 , TRUE ) )
# outcome data
y <- runif( 100 ) + rnorm(100) + rnorm( 100 , mean = c(1,3,6) )

# model without intercept
summary( glm( y ~ x + f + 0 ) )
#Call:
#glm(formula = y ~ x + f + 0)

#Deviance Residuals: 
#    Min       1Q   Median       3Q      Max  
#-5.7316  -1.8923   0.0195   1.8918   5.9520  

#Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
#x    0.3216     0.9772   0.329    0.743    
#f1   3.4493     0.6823   5.055 2.06e-06 ***
#f2   3.6349     0.6959   5.223 1.02e-06 ***
#f3   3.1962     0.6598   4.844 4.87e-06 ***
请参见?公式,具体来说,在您的型号规格中包含+0的含义

# Sample data - explanatory variable (continuous)
x <- runif( 100 )
# explanatory data, factor with 3 levels
f <- as.factor( sample( 3 , 100 , TRUE ) )
# outcome data
y <- runif( 100 ) + rnorm(100) + rnorm( 100 , mean = c(1,3,6) )

# model without intercept
summary( glm( y ~ x + f + 0 ) )
#Call:
#glm(formula = y ~ x + f + 0)

#Deviance Residuals: 
#    Min       1Q   Median       3Q      Max  
#-5.7316  -1.8923   0.0195   1.8918   5.9520  

#Coefficients:
#   Estimate Std. Error t value Pr(>|t|)    
#x    0.3216     0.9772   0.329    0.743    
#f1   3.4493     0.6823   5.055 2.06e-06 ***
#f2   3.6349     0.6959   5.223 1.02e-06 ***
#f3   3.1962     0.6598   4.844 4.87e-06 ***


我的理解是,参考级别的系数仅为0。您正在寻找一种称为效果编码的东西。看到SAS真的输出截距和所有四个级别了吗?当只有N个级别时,使用N+1参数对模型进行参数化实际上没有意义,但您可以使用lsmeans包等工具输出所有四个级别的模型预测。显示相应模型的SAS输出可能会有所帮助,以说明您需要什么。我的理解是,参考级别的系数仅为0。您正在寻找一种称为效果编码的方法。看到SAS真的输出截距和所有四个级别了吗?当只有N个级别时,使用N+1参数对模型进行参数化实际上没有意义,但您可以使用lsmeans包等工具输出所有四个级别的模型预测。显示相应模型的SAS输出可能会有帮助,说明您想要什么。那么,如果包含所有级别,截距会是什么?在运行+0和+1时,即使用intercept时,请看参数的差异……我想我没有看到使用+0进行此操作,我认为通常的方法是-1。@Spacedman,我再次向您推荐?公式!没有截距的模型也可以指定为y~x+0或y~0+x:-是的,我没有质疑它的正确性,只是质疑它的频率!FWIW x-0不同于x+0,这与我的数学家不一致,任何其他常数都会产生错误@太空人好,好!我自己更喜欢+0,因为我认为它是+0*b0,也就是说,模型必须穿过原点,所以如果这有意义的话,考虑所有其他参数?那么,如果你包括所有级别,截距会是多少?在运行+0和+1时,即使用intercept时,请看参数的差异……我想我没有看到使用+0进行此操作,我认为通常的方法是-1。@Spacedman,我再次向您推荐?公式!没有截距的模型也可以指定为y~x+0或y~0+x:-是的,我没有质疑它的正确性,只是质疑它的频率!FWIW x-0不同于x+0,这与我的数学家不一致,任何其他常数都会产生错误@太空人好,好!我自己更喜欢+0,因为我认为它是+0*b0,也就是说,模型必须通过原点运行,因此如果有意义的话,可以考虑所有其他参数?glm在使用因子变量时仍然会这样做。我看不出这有什么帮助。只需在模型规范中包含-1或+0,这将自动处理。你完全正确,我不知道glm会这么做。请原谅我的无知。在某些情况下,知道如何这样做仍然很有用,例如,有时你想从模型中删除派生的输入变量,而这种方式很可能无法通过公式指定…@TheLoverter4865抱歉,这并不是故意让人觉得粗鲁!我只是觉得你应该意识到,为了方便起见,这是不必要的,但是Ben是绝对正确的,有时候知道模型是如何“在引擎盖下”工作是很好的,这样你就明白了它的意思。因此,在这种情况下,它是有用的。@SimonO'Hanlon,我认为你错了,因为你的建议似乎没有包括OP想要的截距,而这个解决方案包括截距,tooglm在使用因子变量时无论如何都会这样做。我看不出这有什么帮助。只需在模型规范中包含-1或+0,这将自动处理。你完全正确,我不知道glm会这么做。请原谅我的无知。在某些情况下,知道如何这样做仍然很有用,例如,有时你想从模型中删除派生的输入变量,而这种方式很可能无法通过公式指定…@TheLoverter4865抱歉,这并不是故意让人觉得粗鲁!我只是觉得你应该意识到,为了方便起见,这是不必要的,但是Ben是绝对正确的,有时候知道模型是如何“在引擎盖下”工作是很好的,这样你就明白了它的意思。所以在这种情况下它是有用的。@SimonO'Hanlon,我认为你错了,因为你的建议似乎没有包括OP想要的截取,而这个解决方案也包括截取