我想使用逻辑回归来实际执行回归而不是分类。
我的响应变量是介于0到1之间的数字,不是绝对的。该响应变量与任何二项式过程都不相关。特别是,没有“成功”,没有“试验次数”等。它只是一个实际变量,根据情况取0到1之间的值。
这里是一个最小的例子,用以说明我想要实现的目标
dummy_data <- data.frame(a=1:10,
b=factor(letters[1:10]),
resp = runif(10))
fit <- glm(formula = resp ~ a + b,
family = "binomial",
data = dummy_data)
此代码给出警告,然后失败,因为我正尝试拟合“错误类型”的数据:
在eval(family $ initialize)中:在二项式glm中非整数成功!
但是我认为必须有一种方法,因为family
的帮助说:
对于二项式和准二项式家庭,响应可以是 以下列三种方式之一指定:[...](2)作为具有 值介于0和1之间,解释为成功的比例 案例(总案例数由权重决定)。
使用"quasibinomial"
作为家族使用相同的代码是可行的,这使我认为可能有一种使之与二项式glm一起工作的方法。
我理解似然性是基于$ y_i $在$ {0,1} $中的假设得出的,但是从数学上看,对数似然仍然在$ [0中使用$ y_i $是有意义的,1] $。我错了吗?
答案 0 :(得分:1)
这是因为您使用的是二项式族,并且给出了错误的输出。由于选择的家庭是二项式,这意味着结果必须为0或1,而不是概率值。
此代码可以正常工作,因为响应为0或1。
dummy_data <- data.frame(a=1:10,
b=factor(letters[1:10]),
resp = sample(c(0,1),10,replace=T,prob=c(.5,.5)) )
fit <- glm(formula = resp ~ a + b,
family = binomial(),
data = dummy_data)
如果您想直接对概率建模,则应在案件总数中增加一列。在这种情况下,给定权重列中的案例数,您要建模的概率被解释为成功率。
dummy_data <- data.frame(a=1:10,
b=factor(letters[1:10]),
resp = runif(10),w=round(runif(10,1,11)))
fit <- glm(formula = resp ~ a + b,
family = binomial(),
data = dummy_data, weights = w)
您仍然会收到警告消息,但是在下列情况下您可以忽略它:
resp
是n个试验中1的比例。
对于resp
中的每个值,w
中的对应值是试验次数。
答案 1 :(得分:1)
从Warning: non-integer #successes in a binomial glm! (survey packages)的讨论中,我认为我们可以通过另一个族函数?quasibinomial()
来解决它。
dummy_data <- data.frame(a=1:10,
b=factor(letters[1:10]),
resp = runif(10),w=round(runif(10,1,11)))
fit2 <- glm(formula = resp ~ a + b,
family = quasibinomial(),
data = dummy_data, weights = w)