【问题标题】:Running OLS on binary dependent variable在二进制因变量上运行 OLS
【发布时间】:2020-10-16 11:09:42
【问题描述】:

我有这样的数据:

data_in <-read_table2("Condition    grade   block   Q2_1    Q2_2    Q2_4    Q2_8    Q2_10   Q2_11   Q2_14
Treatment   8   LB-MS-3 3   3   3   2   1   2   2
Treatment   9   LB-HS-2 4   4   4   3   3   4   3
Treatment   7   LB-MS-1 3   4   3   3   2   2   4
Treatment   10  LB-HS-2 2   4   2   3   3   3   3
Control 9   LB-HS-1 2   4   4   2   3   2   2
Control 8   LB-MS-3 3   3   3   2   3   3   2
Control 10  LB-HS-2 4   4   3   3   3   2   2
Control 8   LB-MS-1 3   3   3   3   2   3   3
Control NA  LB-MS-3 3   3   3   2   3   3   4
Control 8   LB-MS-1 4   4   4   4   3   3   3
Control 9   LB-HS-1 3   3   4   3   3   4   4
Treatment   NA  LB-MS-1 2   2   2   2   2   2   2
Treatment   8   LB-MS-1 3   3   3   2   2   2   2
Control 11  LB-HS-1 3   4   3   1   2   3   3
Treatment   10  LB-HS-1 3   4   2   2   3   4   3
Treatment   8   LB-MS-3 4   4   4   3   3   4   3
Control 7   LB-MS-3 4   2   3   2   3   2   2
Treatment   7   LB-MS-2 4   3   3   4   3   4   3
Control 7   LB-MS-3 3   3   3   2   2   2   3
Treatment   8   LB-MS-2 4   2   3   3   2   2   2
")

我想将“条件”作为二进制因变量运行,并将几个数字和字符变量作为自变量运行。我的期望是 R 会为我将字符变量变成虚拟变量。

model <- lm(condition~.,data=data_in)
summary(model)

但是,当我运行它时,我得到了 NA。我对统计数据不是很熟悉,因此感谢任何帮助解释。

【问题讨论】:

  • 这似乎不是适合 Stack Overflow 的特定编程问题。如果您对适当使用各种统计方法有一般性问题,那么您应该通过Cross Validated 询问此类问题。你更有可能在那里得到更好的答案。
  • 你需要glmdata_in$Condition &lt;- factor(data_in$Condition)# &gt; glm(Condition ~ ., data = na.omit(data_in), family = "binomial")
  • @akrun。不需要na.omit 作为glm 的默认值,并且可能所有 R 建模函数都省略了 NA。
  • @Edward 我正在使用 lm 代码进行测试,但忘记删除 na.omit
  • 如果您真的想在二进制因变量上运行 OLS,则使用 data_in$condition &lt;- ifelse(data_in$condition=="Treatment", 1, 0) 将字符变量转换为 0/1 变量。然后,您的 lm 命令应该可以正常运行。

标签: r dplyr lm


【解决方案1】:

尚不完全清楚您的 Condition 变量是二进制的。通常,对于二进制变量,它们的编码介于 0 和 1 之间。例如,如果条件变量实际上是 4,则不将其压缩为两类,您需要将变量重新编码为 0 和 1。您的不同值是什么?条件变量?您可以通过输入 tabulate(data_in$condition) 来查看。

假设条件有两个值,3 和 4。您可以通过执行以下操作将这些值重新编码为 0 和 1。 data_in$condition[data_in$condition == 3] &lt;- 0

data_in$condition[data_in$condition == 4] &lt;- 1

作为一个概念点:二进制度量通常是“是”,“否”度量,其中 0 表示否实例,1 表示是实例。例如,如果您从编码为男性 1 和女性 2 的性别变量转换,您将创建一个女性变量,其中男性为 0,女性为 1。这是您的变量需要考虑的概念性问题。

如果您仍想继续,通常对于二元因变量,您想使用 logit 或 probit 模型来计算模型(它们的解释与您对 lm (OLS) 模型的解释不同,所以我'd 建议阅读一些统计论坛)。

要在 r 中运行 logit 或 probit,您只需键入: model &lt;- glm(condition ~ IV1 + IV2 + IV3, family = binomial(link = "probit"), data = data_in)

summary(model)

有几点需要注意。在这里,您使用的是 glm 函数而不是 lm,该函数对于使用 OLS 之外的其他广义线性模型非常有用。您需要在波浪号的另一侧包含自变量。这就是为什么您的模型以前不起作用的原因,您没有任何 IV 来计算与 DV 的协方差。如果您正在运行概率模型,则要指定您使用的链接函数,它是具有二项分布的概率链接函数。如果您使用 logit,则 family 将等于正态分布(因为 logit 遵循 logit 正态分布或正态分布)并将指定链接函数“link”等于“logit”。

编辑:您可以为条件变量创建一个新变量。

data_in$condition.num &lt;- NA

data_in$condition.num &lt;- ifelse(data_in$condition == "Control", 0, 1)

然后运行你的 Probit 模型:

model &lt;- glm(condition.num ~ grade + block + Q2_1, data = data_in, family = binomial(link = "probit"))

summary(model)

【讨论】:

  • 在您尝试解释结果之前,我建议您做的另一件事是计算您的预期值或为此使用 ggplot 制作图表。通过在 r 中搜索解释 logit 和 probit 结果,您可以找到很多帮助。根据您这样做的目的,您可以在二进制 DV 上使用 OLS 模型。有一些关于这有多合适的讨论,但在一些学术领域,OLS 通常是可以的,因为参数更容易解释。但是,是的,在您对此做太多事情之前,请先查看一些统计数据。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-14
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2020-12-10
相关资源
最近更新 更多