我尝试使用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
答案 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"))
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