【问题标题】:Converting frequency data for use in logistic regression in R转换频率数据以用于 R 中的逻辑回归
【发布时间】:2019-12-10 03:58:47
【问题描述】:

这里有一个简单的问题:我有以下数据,我需要以可以对其进行逻辑回归的格式获取它。

pvp <- rep(c("lib", "mod", "con"), 3)
pres <- c(rep("Bush", 3), rep("Clinton", 3), rep("Perot", 3))
count <- c(70, 195, 382, 324, 332, 199, 56, 101, 117)
df <- as.data.frame(cbind(pvp, pres, count))

df$pres <- recode(df$pres, 'Clinton' = '1', 'Bush' = '0', 'Perot' = '0')
df$count <- as.numeric(as.character(df$count))

看起来像这样:

> df
  pvp pres count
1 lib    0    70
2 mod    0   195
3 con    0   382
4 lib    1   324
5 mod    1   332
6 con    1   199
7 lib    0    56
8 mod    0   101
9 con    0   117

我需要运行逻辑回归来预测 pvp 中的 pres。通常我想我会使用 tidyverse 中的spread 将数据转换为宽格式。但是在这里,我在该扩展函数中使用 key = pvp 时遇到问题。我也无法折叠这些类别,因为其中一些显然对应于 pres = 1,而另一些对应于 pres = 0。我可以使用什么解决方案以可以对其运行逻辑回归的格式获取数据?

提前致谢。

【问题讨论】:

  • 我认为您可以使用汇总数据运行逻辑回归 - 请参阅 stackoverflow.com/a/52574900/496803
  • 这绝对是正确的。我不知道重量声明,但当我看到它时,它很直观。非常感谢您的回答!
  • 当我在这里时,as.data.frame(cbind... 会给你带来麻烦。只需改用data.frame(pvp,pres,count),您就不必担心数据会从数字转换为字符。
  • 哦,我不认为有区别。很高兴知道!
  • glm 可以直接在频率矩阵上运行。我仍然不明白weights 参数的确切用途。由于不是直接从数据中读取的

标签: r dataframe tidyverse logistic-regression


【解决方案1】:

无需扩展数据,可以在训练模型时使用“权重”参数。

model_logit <- glm(pres ~ pvp, family="binomial", weight = df$count, data = df)
predictions <- predict(model_logit, data.frame(pvp=unique(df$pvp)), type="response") 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-26
    • 2019-08-20
    • 2015-05-04
    • 1970-01-01
    • 2018-02-12
    • 2014-06-20
    • 2021-11-13
    • 1970-01-01
    相关资源
    最近更新 更多