我如何使用glm()函数?

时间:2016-08-02 11:03:12

标签: r glm linear lm p-value

我尝试使用R在我的数据上拟合一般线性模型(GLM)。我有一个Y连续变量和两个分类因子,A和B.每个因子编码为0或1,用于存在或缺席。

即使仅查看数据,我看到A和B之间有明显的相互作用,GLM表示p值>>> 0.05。我做错了吗?

首先,我创建了包含GLM数据的数据框,其中包含Y因变量和两个因子A和B.这是两个因子(0和1)。每种组合有3个重复。

A<-c(0,0,0,1,1,1,0,0,0,1,1,1)
B<-c(0,0,0,0,0,0,1,1,1,1,1,1)
Y<-c(0.90,0.87,0.93,0.85,0.98,0.96,0.56,0.58,0.59,0.02,0.03,0.04)
my_data<-data.frame(A,B,Y)

让我们看看它的样子:

my_data
##    A B    Y
## 1  0 0 0.90
## 2  0 0 0.87
## 3  0 0 0.93
## 4  1 0 0.85
## 5  1 0 0.98
## 6  1 0 0.96
## 7  0 1 0.56
## 8  0 1 0.58
## 9  0 1 0.59
## 10 1 1 0.02
## 11 1 1 0.03
## 12 1 1 0.04

正如我们只能看到数据一样,因子A和因子B之间存在明显的相互作用,因为当A和B存在时,Y的值急剧下降(即A = 1且B = 1)。然而,使用glm函数我在A和B之间没有显着的相互作用,因为p值>&gt;> 0.05

attach(my_data)
## The following objects are masked _by_ .GlobalEnv:
## 
##     A, B, Y


my_glm<-glm(Y~A+B+A*B,data=my_data,family=binomial)
## Warning: non-integer #successes in a binomial glm!
summary(my_glm)
## 
## Call:
## glm(formula = Y ~ A + B + A * B, family = binomial, data = my_data)
## 
## Deviance Residuals: 
##       Min         1Q     Median         3Q        Max  
## -0.275191  -0.040838   0.003374   0.068165   0.229196  
## 
## Coefficients:
##             Estimate Std. Error z value Pr(>|z|)
## (Intercept)   2.1972     1.9245   1.142    0.254
## A             0.3895     2.9705   0.131    0.896
## B            -1.8881     2.2515  -0.839    0.402
## A:B          -4.1747     4.6523  -0.897    0.370
## 
## (Dispersion parameter for binomial family taken to be 1)
## 
##     Null deviance: 7.86365  on 11  degrees of freedom
## Residual deviance: 0.17364  on  8  degrees of freedom
## AIC: 12.553
## 
## Number of Fisher Scoring iterations: 6

3 个答案:

答案 0 :(得分:1)

当您声明status是连续的时,数据显示Y只是一小部分。因此,可能是您首先尝试应用Y的原因。

如果满足某些假设,则可以使用逻辑回归对模型分数(即由0和1限定的连续值)进行建模。有关详细信息,请参阅以下经过交叉验证的帖子:https://stats.stackexchange.com/questions/26762/how-to-do-logistic-regression-in-r-when-outcome-is-fractional。但是,根据数据描述,尚不清楚这些假设是否已满。

模型分数的替代方案是β回归或分数回复模型。

请参阅下文,了解如何将这些方法应用于您的数据。这两种方法的结果在符号和意义上是一致的。

GLM

答案 1 :(得分:0)

family =二项式意味着Logit(Logistic)回归,它本身产生二进制结果。

来自Quick-R

  

Logistic回归

     

当您预测二元结果时,逻辑回归很有用   来自一组连续的预测变量。经常这样   由于其较少,优先于判别函数分析   限制性假设。

答案 2 :(得分:-1)

数据显示了互动。尝试适应不同的模型,物流是不合适的。

with(my_data, interaction.plot(A, B, Y, fixed = TRUE, col = 2:3, type = "l"))

enter image description here 方差分析显示了所有因素和相互作用的明显意义。

fit <- aov(Y~(A*B),data=my_data)
summary(fit)
            Df Sum Sq Mean Sq F value   Pr(>F)    
A            1 0.2002  0.2002   130.6 3.11e-06 ***
B            1 1.1224  1.1224   732.0 3.75e-09 ***
A:B          1 0.2494  0.2494   162.7 1.35e-06 ***
Residuals    8 0.0123  0.0015                     
---
Signif. codes:  0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1