使用sin链接进行逻辑回归'

时间:2014-08-21 17:01:30

标签: r logistic-regression

是否可以在R中使用带有逻辑回归的sin链接? logit链接在0或1的边界上表现不佳.sin链接允许在边界上进行参数估计。我知道如何在这些情况下使用sin链接与其他软件,但不是R

对我而言,这似乎是一个编程问题,但如果它更适合作为统计问题在别处,我可以将其发布在Cross-Validated上,或者可以将其迁移到那里。

感谢您提出任何建议或意见。

以下是R代码中的一些示例。只有四个模型中的第一个运行并提供了良好的估计值和p值:

N1 <-  20  # flips
C1 <-   1  # heads

N2 <-  20  # flips
C2 <-   0  # heads

model1b <- glm(cbind(C1, c(N1-C1)) ~ 1, family=binomial(link='logit'))  
model1b
summary(model1b)
predict(model1b, type="response", se.fit=TRUE)

model2b <- glm(cbind(C2, c(N2-C2)) ~ 1, family=binomial(link='logit'))  
model2b
summary(model2b)
predict(model2b, type="response", se.fit=TRUE)


model1c <- glm(cbind(C1, c(N1-C1)) ~ 1, family=binomial(link='sin'))  
model1c
summary(model1c)
predict(model1c, type="response", se.fit=TRUE)

model2c <- glm(cbind(C2, c(N2-C2)) ~ 1, family=binomial(link='sin'))  
model2c
summary(model2c)
predict(model2c, type="response", se.fit=TRUE)

P.S。

我认为这是罪恶链接的等式:

(sin(X * Beta) + 1) / 2

然而为了比较,logit链接的等式是:

exp(X * Beta)/(1 + exp(X * Beta))

其中:

X = design matrix
Beta = parameter estimates

所以,如果make.link允许我为自己的链接定义公式,我可以使用上面的公式。但是我觉得make.link的印象并不像那样。也许我错了。

修改

看起来这种方法应该有效。虽然,可能需要限制搜索的可能值的范围以避免多种解决方案。

首先,关于链接功能:(sin(lin.pred) + 1)/2,请注意sin(lin.pred)-1+1之间的界限。因此,(sin(lin.pred) + 1)限制在02之间。因此,(sin(lin.pred) + 1)/2限制在01之间。即使概率为0或1,这种包容性也可能使链接返回估计值。

这是一种详尽的搜索方法,用于在50次翻转中观察10个头时估计头部的概率。

observed.y <- 0.20

# First search between -10 and 10 for the single Beta in the model

lin.pred <- seq(-10, 10, 0.000001)

predicted.y <- (sin(lin.pred) + 1)/2

residual <- abs(predicted.y - observed.y)

my.outcome <- data.frame(lin.pred, observed.y, predicted.y, residual, stringsAsFactors = TRUE)

my.outcome[my.outcome$residual == min(my.outcome$residual),]

#
#          lin.pred observed.y predicted.y     residual
# 9356500 -0.643501        0.2         0.2 4.351732e-08
#

# Now search between -20 and 20 for the single Beta in the model 

lin.pred <- seq(-20, 20, 0.000001)

predicted.y <- (sin(lin.pred) + 1)/2

residual <- abs(predicted.y - observed.y)

my.outcome <- data.frame(lin.pred, observed.y, predicted.y, residual, stringsAsFactors = TRUE)

my.outcome[my.outcome$residual == min(my.outcome$residual),]

#
#         lin.pred observed.y predicted.y     residual
# 506944 -19.49306        0.2         0.2 1.213282e-08
#

随着搜索空间的增加,获得了不同的答案,但点估计值是“相同的”。我没有尝试添加协变量。也许我怀疑SIN链接是如何在其他软件中使用的,而我在这里使用它的尝试都是完全错误的。我在互联网上找不到关于SIN链接的任何内容。

编辑 - 2014年8月25日

我一直在寻求有关Cross Validated的问题的统计帮助:

https://stats.stackexchange.com/questions/113043/sin-link-with-logistic-regression

以及Stack Overflow上的编程帮助。

我认为SIN链路的反转是:lin.pred <- asin((2*y) - 1)只要线性预测器z落在-1 <= z <= 1范围内,就会返回正确的线性预测器。在设计矩阵中每行只有一个非零元素的条件下,这个反函数可能是可接受的,即,允许虚拟变量没有截距来比较组:例如,组A与B的成功概率。 / p>

上面提出的反向链接可以解决搜索空间的逆和约束的问题,在这种情况下,下一步是将该反向链接合并到R中的glm中的用户指定的链接函数中(以及任何其他所需的估计比例的信息。)

因此,问题可能再次集中在编程上,而不是统计上。

编辑 - 2014年8月26日

我还没有能够在R中将SIN链路实现为glm,但我确实设法用logit链接为似然函数编写R代码并用optim解决。然后我重复这种方法简单地替换SIN链接。两者的R代码都发布在这里:

https://stats.stackexchange.com/questions/113043/sin-link-with-logistic-regression

两种方法都将正确的点估计值提供给三位小数。 logit链接做得更好。我期待SIN链接的性能比我观察到的更好。也许我在某处犯了错误。

如果我了解有关使用glm链接的更多信息,我将发布代码。

编辑 - 2014年8月26日

一旦我记得使用method = 'Brent'(因为我只估算一个参数),那么两个链接都会返回与预期值匹配的估算值。

0 个答案:

没有答案