Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R predict()函数返回的值错误/太多_R_Predict - Fatal编程技术网

R predict()函数返回的值错误/太多

R predict()函数返回的值错误/太多,r,predict,R,Predict,我正试图根据已建立的线性模型和标准曲线,将吸光度(Abs)值转换为浓度(ng/mL)。我计划使用predict()函数来实现这一点。我无法让predict()返回所需的结果。以下是我的代码示例: Standards<-data.frame(ng_mL=c(0,0.4,1,4), Abs550nm=c(1.7535,1.5896,1.4285,0.9362)) LM.2<-lm(log(Standards[['Abs550nm']])~Sta

我正试图根据已建立的线性模型和标准曲线,将吸光度(Abs)值转换为浓度(ng/mL)。我计划使用predict()函数来实现这一点。我无法让predict()返回所需的结果。以下是我的代码示例:

Standards<-data.frame(ng_mL=c(0,0.4,1,4),
                      Abs550nm=c(1.7535,1.5896,1.4285,0.9362))
LM.2<-lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']])
Abs<-c(1.7812,1.7309,1.3537,1.6757,1.7409,1.7875,1.7533,1.8169,1.753,1.6721,1.7036,1.6707,
       0.3903,0.3362,0.2886,0.281,0.3596,0.4122,0.218,0.2331,1.3292,1.2734)


predict(object=LM.2,
        newdata=data.frame(Concentration=Abs[1]))#using Abs[1] as an example, but I eventually want predictions for all values in Abs

这似乎不是我想要的输出。我试图为每个吸光度(Abs)条目获得一个单一的预测浓度值。如果能够一次预测所有条目并将它们添加到现有的数据帧中,那就太好了,但是我甚至不能让它正确地给我一个值。我在这里读了很多帖子,在谷歌上找到的网页,以及所有的帮助文件,我一生都无法理解这个函数到底在做什么。任何帮助都将不胜感激。

您必须在
newdata
中有一个变量,该变量与最初用于拟合模型的模型公式中使用的变量同名

您有两个错误:

  • 您在
    newdata
    中没有使用与用于拟合模型的协变量同名的变量,并且
  • 由于滥用公式接口,使问题更难解决
  • 不要像这样适合您的模型:

    mod <- lm(log(Standards[['Abs550nm']])~Standards[['ng_mL']])
    
    现在您可能有第三个错误。你似乎试图用新的吸光度值来预测,但你拟合模型的方式是,吸光度是响应变量。您需要为
    ng\u mL
    提供新值

    您看到的行为是当R在
    newdata
    中找不到正确命名的变量时会发生什么;它返回模型的拟合值或观测数据的预测值

    这让我觉得你的公式是前后颠倒的。你是说:

    mod2 <- lm(ng_mL ~ log(Abs550nm), data = standards)
    
    说。注意:名称中不需要包含
    log()
    位。R将其识别为一个函数,并为您应用于变量
    Abs550nm


    如果模型确实是
    log(Abs550nm)~ng_mL
    ,并且您想要为
    Abs550nm
    的新值找到
    ng_mL
    的值,您需要以某种方式反转已安装的模型。

    我是否将模型向后放置?我现在不确定。。。当我生成标准曲线时,我使用已知浓度(ng/mL),并测量吸光度(Abs)。因此,这将使浓度成为因子,而Abs将成为响应因子,对吗?所以,Abs~Conc。当我进行实验时,我测量样品的吸光度,以确定浓度。这是否意味着我必须转换公式?在过去,我只是将Abs插入基于线性模型的forumula y=mx+b。这一次,我想尝试predict(),就R而言,公式是
    response~predictor
    ,因此
    predict()
    将为给定模型的
    predictor
    的声明值提供新的
    response
    。在y=mx+b的情况下,这里y是
    log(Abs550nm)
    x
    ng_mL
    。如果这真的是模型,那么就像我说的,你需要把它倒过来,得到方程,用
    x
    ,而不是
    y
    ,R不做倒数,因为这是非标准的。注意,通过
    coef(mod)
    从方程中得到m和b。
    mod <- lm(log(Abs550nm) ~ ng_mL, data = standards)
    
    predict(mod, newdata = data.frame(ng_mL = c(0.5, 1.2)))
    
    mod2 <- lm(ng_mL ~ log(Abs550nm), data = standards)
    
    predict(mod2, newdata = data.frame(Abs550nm = c(1.7812,1.7309)))