Logit-Transformation向后

时间:2014-05-24 12:55:36

标签: r r-car

我已经使用car-package中的logit转换从我的数据集中转换了一些值。变量" var"代表这些值并由百分比值组成。

但是,如果我通过引导包中的inv.logit将它们转换回来,则值与原始值不匹配。

data$var
46.4, 69.5, 82.7, 61.7, 76.4, 84.8, 69.1

data["var_logit"] <- logit(data$var, percents=TRUE)

data$var_logit
-0.137013943, 0.778005062, 1.454239241, 0.452148763, 1.102883518, 1.589885549, 0.760443432

data$var_logback <- inv.logit(data$var_logit)
0.46580 0.68525 0.81065 0.61115 0.75080 0.83060 0.68145

看起来我必须将结果乘以100得到之前的值(或者至少是一些非常相似的值),但我觉得我错过了一些东西。

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

你设置percents=TRUE标志,它将你的值除以100,而逆命令不知道它。

答案 1 :(得分:2)

此处发生的另一件事是car::logit如果有0或1个值,则自动调整数据:

  

调整:调整因子以避免比例为0或1;如果数据中没有这样的比例,则默认为“0”;如果有,则默认为“.025”。

library(car)
dat <- c(46.4, 69.5, 82.7, 61.7, 76.4, 84.8, 69.1)
(L1 <- logit(dat, percents=TRUE))
## [1] -0.1442496  0.8236001  1.5645131
##      0.4768340  1.1747360  1.7190001  0.8047985
(L2 <- logit(c(dat,0),percents=TRUE))
## [1] -0.1370139  0.7780051  1.4542392  0.4521488
##      1.1028835  1.5898855  0.7604434 -3.6635616
## Warning message:
## In logit(c(0, dat)) : proportions remapped to (0.025, 0.975)

这意味着您无法轻易地反转结果。

这是一个函数(在Wolfram Alpha的帮助下使用car::inv.logit的胆量,因为我懒得去代数)反转结果:

inv.logit <- function(f,a) {
   a <- (1-2*a)
   (a*(1+exp(f))+(exp(f)-1))/(2*a*(1+exp(f)))
}
zapsmall(inv.logit(L2,a=0.025)*100)
## [1] 46.4 69.5 82.7 61.7 76.4 84.8 69.1  0.0