我想对此数据集执行逻辑回归。前三列是预测变量。第四列(值=否)和第五列(值=是)是响应变量。例如,在第一个ROW中,有53个“否”和6个“是”。在第二行中,有10个“否”和4个“是”。
下面是数据的链接。
如何将其转换为四列数据框?谢谢。
我想要的是这样的东西:
在此处扩展我的评论。您的数据已经采用正确的格式来拟合使用R的广义线性模型。
它在R文档中的某个地方很好地隐藏了,但是我敢打赌,如果有人读help(formula)
,help(glm)
,help(lm)
或help(family)
,则在这种行为的某处会有一个注释。
[如果有两列指定success
和not success
,则正确的公式格式为cbind(success, not success) ~ explanatory variables
。对于您的具体情况
glm(cbind(notUsing, Using) ~ age + education + wantsMore, data = [your df here], family = binomial)
可用于拟合某种模型。这(有点)等效于为每个
notUsing
和Using
添加相同的行,例如,对于第1行,您将拥有53行,其中usage = no
与age = <25
,education = low
,wantsMore = yes
和6usage = 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'))