是否可以在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)
限制在0
和2
之间。因此,(sin(lin.pred) + 1)/2
限制在0
和1
之间。即使概率为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'
(因为我只估算一个参数),那么两个链接都会返回与预期值匹配的估算值。