r - 使用 lm 更改分类变量和参考类别的顺序
问题描述
我有一个无序分类变量(event_time),它有 5 个不同的选项("future", "past", "prebirth", "never", "uncertain")
作为预测变量,我想以某种方式指定"never"
参考类别(理想情况下不转换变量)。我只是使用 lm 然后texreg::screenreg(list(m1, m2, m3)
比较具有不同结果变量但具有相同预测变量的模型的输出。
如果有一种方法可以重新排列类别在模型中显示的顺序(可能在screenreg
?),那就太好了。
如果这一切都可以在不处理转换和因子变量的情况下完成,还有一个额外的好处(如果变量已经是一个因子,我知道如何使用 relevel 来做到这一点)......非常感谢。
一些数据:
structure(list(yvar = c(4.43024525984776, -3.01051231657988,
4.70993862460106, -2.03636967067474, -1.09802960848352, -1.16527740798651,
5.6002805983151, -7.03524067599639, 1.02474010023752, 0.647438645180132
), event_time = c(NA, "Pre", "Future", "Time unknown", "Future", "Future", NA,
"Never", NA, "Never"), race = c("Black", "Black", "White", "Black",
"Black", "Black", "Black", "White", "Black", "White"), log_parent_income = c(4.0073333,
NA, 3.8066626, 2.1972246, 0.69314718, 4.2484951, 3.9120231, 1.9459101,
2.3025851, 3.8066626)), row.names = c(NA, -10L), class = c("tbl_df",
"tbl", "data.frame"))
然后只是做一个简单的lm(yvar ~ event_time + log_parent_income + race ...
模型。
解决方案
在基础 R 中,您可以直接在线性回归上更改对比度
lm(yvar ~ C(event_time, base = 2)+ log_parent_income + race, data = df)
也就是说,如果你知道你想要的基地。
如果您知道参考电平是最后一个,那么您可以执行以下操作:
lm(yvar ~ event_time + log_parent_income + race, data = df,
contrasts = list(event_time = "contr.SAS"))
当然,这意味着如果您要对各种变量执行相同操作,只需更改选项:
options(contrasts = rep("contr.SAS",2))
lm(yvar ~ event_time + log_parent_income + race, data = df)
这是假设这Never
是最后一个参考水平。您可以弄乱contr.treatment
基本参数以将引用设置为您想要的任何数字
最后,您可以编写一个将基本参数作为字符串字符接收的函数:
C1 <- function (object, contr, how.many, ...)
{
base <- list(...)$base
if(!is.null(base) &is.character(base))
base <- match(base, levels(factor(object)))
C(object, base = base)
}
然后您可以将其用作:
lm(yvar~C1(event_time, base = "Never"), df)
这还不够吗?您也可以通过提供一个函数来更改 contrasts 参数。有了这个,我相信这些名字将被保留
推荐阅读
- diff - 如何仅区分某些文件?
- reactjs - 从 Redux 存储更新组件状态
- python - Matplotlib:在直方图的刻度标签中指定 bin 值的格式
- javascript - 在所有时区中使用 JavaScript 将 Excel 日期序列号转换为日期
- c - 如何从 32 位程序中获取 64 位“程序文件”文件夹路径
- android - kotlin androidpdfviewer lib 似乎没有加载
- optimization - 解决受条件约束限制的优化问题
- python - Python 3.8+,在 lambda 函数中赋值
- spring - 如何在 Spring Boot 中使用 JavaMail 发送邮件?
- java - 使用Java中的流将2个列表的项目相乘和相加