如何处理分类数据以进行逻辑回归?

问题描述 投票:-2回答:1

我想对此数据集执行逻辑回归。前三列是预测变量。第四列(值=否)和第五列(值=是)是响应变量。例如,在第一个ROW中,有53个“否”和6个“是”。在第二行中,有10个“否”和4个“是”。

下面是数据的链接。

data

如何将其转换为四列数据框?谢谢。

我想要的是这样的东西:

results

data

r dataframe
1个回答
0
投票

在此处扩展我的评论。您的数据已经采用正确的格式来拟合使用R的广义线性模型。

它在R文档中的某个地方很好地隐藏了,但是我敢打赌,如果有人读help(formula)help(glm)help(lm)help(family),则在这种行为的某处会有一个注释。

[如果有两列指定successnot success,则正确的公式格式为cbind(success, not success) ~ explanatory variables。对于您的具体情况

glm(cbind(notUsing, Using) ~ age + education + wantsMore, data = [your df here], family = binomial)

可用于拟合某种模型。这(有点)等效于为每个notUsingUsing添加相同的行,例如,对于第1行,您将拥有53行,其中usage = noage = <25education = lowwantsMore = yes和6 usage = Yes所在的行。

rows <- numeric(sum(df$notUsing + df$Using))
trials <- character(sum(df$notUsing + df$Using))
j <- 1
for(i in 1:nrow(df)){
  ind <- j:(j + df$notUsing[i] + df$using[i] - 1)
  first <- seq(df$notUsing[i])
  trials[ind[first]] <- 'No'
  trials[ind[-first]] <- 'Yes'
  rows[ind] <- i
  j <- j + df$notUsing[i] + df$using[i]
}
df_long <- cbind(df[rows, 1:3], data.frame(usage = trials))
#Identical coefficients, but different deviance and degrees of freedom
print(glm(usage ~ ., data = df_long, family = binomial))
print(glm(cbind(using, notUsing) ~ ., data = df, family = binomial))

#alternative binding methods "hiding" the loop.:
library(dplyr)
library(tidyverse)
rbind(df %>% uncount(notUsing) %>% select(1:3) %>% add_column(usage = 'No'),
df %>% uncount(using) %>% select(1:3) %>% add_column(usage = 'Yes'))
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.