【问题标题】:Firth's Logistic RegressionFirth 的逻辑回归
【发布时间】:2020-05-26 17:11:24
【问题描述】:

我正在尝试通过进行逻辑回归来找到销售汽车的人的预测因子。我的样本量为 n=922,主要包含 kardinal 和 ordinal 变量。 由于我的一些变量有多达 7 个类别(--> 6 个虚拟变量),所以我遇到了分离。 在文献中,他们推荐了 Firth 的减偏逻辑回归方法。

安装软件包后,我使用了以下公式:

logistf(formula = attr(data, "formula"), data = sys.parent(), pl = TRUE, ...)

并输入(或尝试输入)我的数据:

mydataBrAll <- logistf(formula = attr(mydataBr$Verkauft, "formula"), data = mydataBr, pl = FALSE)
summary(mydataBrAll)

Verkauft 是我的因变量,mydataBr 是我的数据

"formula" 中必须输入什么样的术语? 如果这可行,我可以像在常规 log.reg 中使用它一样使用逐步向后算法(或伪 R² 等)吗?型号?:

'Backwards Selection'
backwards <- step(mydataBrAll, direction = "backward")

你们中的一些人可能认为这是一个简单的问题,但我无法在网上解释的帮助下弄清楚。

非常感谢任何帮助!

【问题讨论】:

    标签: r logistic-regression


    【解决方案1】:

    公式应该是R中大多数建模函数中使用的常规公式对象(如lm()glm()等)。 您可以通过在 R 命令行中键入 help(formula) 来获取有关如何编写公式的详细信息。

    本质上,公式是y ~ model 形式的表达式。引用help(formula)的详情部分:

    y ~ model 形式的表达式被解释为响应 y 由模型符号指定的线性预测器建模的规范。

    在您的示例中,假设您有 3 个预测变量,分别称为 x1x2x3(可以是 numericfactor 变量),您可以这样写:

    mydataBrAll <- logistf(formula = Verkauft ~ x1 + x2 + x3, data = mydataBr, pl = FALSE)
    summary(mydataBrAll)
    

    请注意,公式可能更复杂,并涉及预测变量的转换。同样,有关更多详细信息,请参阅formula 的文档。

    您知道,logistf() 的文档中显示的 attr(data, "formula") 表达式作为函数签名(又名 API)的一部分是指名为 formula 的属性,该属性可能存在于包含您所在数据的对象中传入函数的data 参数。由于您的示例中不是这种情况(显然您尚未将该属性添加到数据对象中),因此您必须在调用 logistf() 时明确定义公式。
    有关对象中属性的更多信息,请参阅help(attr)

    关于后向选择的第二个问题:在 logistf() 文档的详细信息部分中,您会看到以下句子:

    此外,前向和后向函数执行方便的变量选择

    即该包包含一个forward()backward() 函数,可用于执行预测变量的前向和后向选择。

    step() 函数也可能起作用,因为在其文档页面中没有任何相反的说明。

    【讨论】:

    • 感谢您的详细回复!事实上,我已经尝试过您建议的方法:mydataBrAll &lt;- logistf(formula = Verkauft ~ ., data = mydataBr, pl = FALSE) 但不幸的是,计算时间太长,以至于我永远得不到结果,不得不终止 R 会话。我什至尝试使用较少的自变量来查看模型大小是否会导致问题。你知道问题可能是什么吗?
    • 如果不查看数据,很难判断问题所在。我最初的猜测是你可能有太多类别的变量......?我建议您尝试拟合单独的回归,每个回归一次只使用一个预测变量,然后看看哪个会产生问题。
    • 啊,是的!谢谢!我看到我的一个变量有一个没有条目的类别。减少该类别后,它起作用了。不幸的是,当我之后尝试使用 step() 函数时,我收到了以下错误消息:``` 错误:$ 运算符对原子向量无效``` 在使用函数 is.atomic() 检查后,我看到 mydataBrAll$Alter确实是原子的。你知道如何改变它以便能够使用向后算法。如果您需要了解有关我的数据的更多信息,我至少可以发布变量并对它们所基于的数据发表评论。
    • 嗯,实际上问题应该是另一个。错误消息告诉您 运算符 $ 对于原子向量无效,这意味着 step() 函数正在尝试将 $ 运算符应用于向量(顺便说一句“原子向量”与说“矢量”相同——请参见此处:arrgh.tim-smith.us/atomic.html)。因此,mydataBrAll$Alter 是一个原子向量也就不足为奇了,因为数据帧的每一列都是一个原子向量。正如我所说,错误背后的原因应该在其他地方找到(分析 step() 函数的作用)。
    • 你试过应用logistf包自带的backward()函数吗?
    猜你喜欢
    • 1970-01-01
    • 2020-01-31
    • 1970-01-01
    • 2021-11-11
    • 2018-01-26
    • 2020-03-22
    • 2016-12-01
    • 2016-03-24
    • 1970-01-01
    相关资源
    最近更新 更多