所以我有一些数据结构与以下类似:
| Works | DoesNotWork |
-----------------------
Unmarried| 130 | 235 |
Married | 10 | 95 |
我正在尝试使用逻辑回归从Work Status
来预测Marriage Status
,但是我认为我不懂R中的方法。例如,如果我的数据如下所示:
MarriageStatus | WorkStatus|
-----------------------------
Married | No |
Married | No |
Married | Yes |
Unmarried | No |
Unmarried | Yes |
Unmarried | Yes |
我了解我可以执行以下操作:
log_model <- glm(WorkStatus ~ MarriageStatus, data=MarriageDF, family=binomial(logit))
汇总数据时,我只是不知道该怎么做。我是否需要将数据扩展为非汇总形式并将Married/Unmarried
编码为0/1
,然后对Working/Not Working
进行同样的操作,并将其编码为0/1
?
仅给出第一个摘要DF ,我将如何编写逻辑回归glm
函数?像这样吗
log_summary_model <- glm(Works ~ DoesNotWork, data=summaryDF, family=binomial(logit))
但是当我拆分响应因变量时,这没有意义吗?
我不确定是否要使这个问题复杂化,非常感谢您的帮助,谢谢!
答案 0 :(得分:1)
这应该为您做。
library(dplyr)
library(tibble)
# Load data
MarriageDF <- tribble(
~'MarriageStatus', ~'WorkStatus',
'Married', 'No',
'Married', 'No',
'Married', 'Yes',
'Unmarried', 'No',
'Unmarried', 'Yes',
'Unmarried', 'Yes') %>%
mutate(., WorkStatus = as.factor(WorkStatus) %>% as.numeric(.) - 1) # convert to 0/1
log_model <- glm(WorkStatus ~ MarriageStatus, data = MarriageDF, family = 'binomial')
summary(log_model)
::编辑,因为我相信我阅读了以下问题的早期版本::
是的,您需要“扩展”数据或对其进行格式化,以使其整洁(每行一次观察)。我不相信有一种方法可以对第一个表中的数据进行逻辑回归。
答案 1 :(得分:1)
您需要将列联表扩展到一个数据框中,然后可以使用频率计数作为权重变量来计算logit模型:
.accepted_renderer
数据:
mod <- glm(works ~ marriage, df, family = binomial, weights = freq)
summary(mod)
Call:
glm(formula = works ~ marriage, family = binomial, data = df,
weights = freq)
Deviance Residuals:
1 2 3 4
16.383 6.858 -14.386 -4.361
Coefficients:
Estimate Std. Error z value Pr(>|z|)
(Intercept) -0.5921 0.1093 -5.416 6.08e-08 ***
marriage -1.6592 0.3500 -4.741 2.12e-06 ***
---
Signif. codes: 0 ‘***’ 0.001 ‘**’ 0.01 ‘*’ 0.05 ‘.’ 0.1 ‘ ’ 1
(Dispersion parameter for binomial family taken to be 1)
Null deviance: 572.51 on 3 degrees of freedom
Residual deviance: 541.40 on 2 degrees of freedom
AIC: 545.4
Number of Fisher Scoring iterations: 5