我已经使用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得到之前的值(或者至少是一些非常相似的值),但我觉得我错过了一些东西。
感谢您的帮助!
答案 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