R 还原转换预处理插入符号

R 还原转换预处理插入符号,r,r-caret,preprocessor,R,R Caret,Preprocessor,我转换数据以满足线性模型(正态分布)的要求: 调整后的模型: fit = lm(log10(Qmld)~log10(Peq750), data = d.reg1) #potential regression 预测数据: a=10^fit$coefficients[1] b=fit$coefficients[2] d.reg1$Qmld_predita=a*d.reg1$Peq750^b 既然模型适合转换后的数据,而这对我来说没有任何物理意义,我怎么能取消转换d.reg1$Qmld_pre

我转换数据以满足线性模型(正态分布)的要求:

调整后的模型:

fit = lm(log10(Qmld)~log10(Peq750), data = d.reg1) #potential regression
预测数据:

a=10^fit$coefficients[1]
b=fit$coefficients[2]

d.reg1$Qmld_predita=a*d.reg1$Peq750^b 

既然模型适合转换后的数据,而这对我来说没有任何物理意义,我怎么能取消转换
d.reg1$Qmld_predita

这是一个函数模型,可以根据选择的初始转换进行修改(例如,这里的初始转换是
c(“缩放”、“中心”)


这是另一个补充,如果你是缩放到0-1,你可以用它来进行逆变换。对深入学习很有用

revPredict <- function(preproc, data,digits=0,range = F) {
   if (range == T){
     data<-data %>%
       select(one_of(dimnames(preproc$ranges)[[2]])) %>%
       map2_df(preproc$ranges[2,]-preproc$ranges[1,], ., function(min_max, dat) min_max* dat)  %>%
       map2_df(preproc$ranges[1,], ., function(min, dat) min + dat) %>%
      mutate_if(is.numeric,funs(round(.,digits = digits)))
    return(data)
    }
  data<- data %>%
    select(one_of(names(preproc$mean))) %>%
    map2_df(preproc$std, ., function(sig, dat) dat * sig)  %>%
    map2_df(preproc$mean, ., function(mu, dat) dat + mu) %>%
    mutate_if(is.numeric,funs(round(.,digits = digits)))
  return(data)
}
revPredict%
map2_df(预编程$ranges[2,]-预编程$ranges[1,],,函数(min_max,dat)min_max*dat)%>%
map2_df(预加工$范围[1,],,函数(最小值,数据)最小值+数据)%>%
如果(是数字,funs(四舍五入(,数字=数字)),则进行变异
返回(数据)
}
数据%
选择(名称(预加工$mean))中的一个%>%
map2_df(预加工$std,功能(sig,dat)dat*sig)%>%
map2_df(预加工$平均值,函数(mu,dat)dat+mu)%>%
如果(是数字,funs(四舍五入(,数字=数字)),则进行变异
返回(数据)
}

我不明白你在问什么。你是在问
log10()
函数的逆函数是什么?我也不知道你为什么不使用
predict()
以及调整后的模型。如果您包含一个适当的样本输入数据,这样我们就可以运行代码并对其进行测试,这可能会有所帮助。还请记住,正态分布假设通常基于误差项(我们使用残差进行检查)所以你真的不应该在拟合模型之前检查。所以caret不会对每个训练集单独应用预处理?我认为这是避免信息泄漏的必要条件,但从你的帖子来看,似乎所有数据都被缩放并集中在一起。我假设每个变量和每个tra都有一个平均值和一个sd训练/测试集。不确定如果单独预处理训练和测试,它将如何工作,但在本例中,为
d.reg
计算一次预处理参数,然后即可使用。
library(tidyverse)

revPredict <- function(preproc, data, digits=0) {
  data %>%
    select(one_of(preproc$mean %>% names)) %>%
    map2_df(preproc$std, ., function(sig, dat) dat * sig) %>%
    map2_df(preproc$mean, ., function(mu, dat) dat + mu)
}

revPredict(preprocess_params, df_needing_reverse_transformation)
    mutate_if(is.numeric,funs(round(.,digits = digits)))
revPredict <- function(preproc, data,digits=0,range = F) {
   if (range == T){
     data<-data %>%
       select(one_of(dimnames(preproc$ranges)[[2]])) %>%
       map2_df(preproc$ranges[2,]-preproc$ranges[1,], ., function(min_max, dat) min_max* dat)  %>%
       map2_df(preproc$ranges[1,], ., function(min, dat) min + dat) %>%
      mutate_if(is.numeric,funs(round(.,digits = digits)))
    return(data)
    }
  data<- data %>%
    select(one_of(names(preproc$mean))) %>%
    map2_df(preproc$std, ., function(sig, dat) dat * sig)  %>%
    map2_df(preproc$mean, ., function(mu, dat) dat + mu) %>%
    mutate_if(is.numeric,funs(round(.,digits = digits)))
  return(data)
}