1

我已经使用logitcar-package 的转换转换了我的数据集中的一些值。变量“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 才能得到以前的值(或至少一些非常相似的值),但我觉得我错过了一些东西。

谢谢您的帮助!

4

2 回答 2

4

这里发生的另一件事是,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
于 2014-05-24T13:22:39.943 回答
3

您设置了percents=TRUE标志,它将您的值除以 100,而反向命令不知道它。

于 2014-05-24T12:57:56.917 回答