标签: 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']])~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
Run Code Online (Sandbox Code Playgroud)

运行最后一行给出了这个输出:

> predict(object=LM.2,
+         newdata=data.frame(Concentration=Abs[1]))
         1          2          3          4 
 0.5338437  0.4731341  0.3820697 -0.0732525 
Warning message:
'newdata' had 1 row but variables found have 4 rows 
Run Code Online (Sandbox Code Playgroud)

这似乎不是我想要的输出.我试图获得每个Absorbance(Abs)条目的单个预测浓度值.能够一次预测所有条目并将它们添加到现有数据框中会很好,但我甚至无法正确地给它一个值.我在这里阅读了很多主题,谷歌上的网页以及所有帮助文件,对于我的生活,我无法理解这个功能发生了什么.任何帮助将不胜感激,谢谢.

r predict

4
推荐指数
1
解决办法
2万
查看次数

在Predict()的model.frame.default中出错 - "因子具有新的级别" - 对于Char变量

我有一个数据集,我分成测试/训练数据集.紧接着那次分裂后,我制作了一个后勤模型:

logModel1 = glm(Y ~ . -var1 -var2 -var3, data=train, family=binomial)
Run Code Online (Sandbox Code Playgroud)

如果我使用该模型在同一列车上进行预测,我就不会得到任何错误(当然,这对我的模型来说是一个非常有用的测试).所以我使用下面的代码来预测我的测试集:

predictLog1 <- predict(logModel1, type="response", newdata=test)
Run Code Online (Sandbox Code Playgroud)

但是我收到以下错误:

model.frame.default中的错误(条款,newdata,na.action = na.action,xlev = object $ xlevels):因子myCharVar有新级别这是对myCharVar的观察,这是另一个......

这让我特别困惑:

  • myCharVar是我的火车和测试装置中的一个字符变量.我用str(test$myCharVar)和确认了这一点str(train$myCharVar)
  • 我的模型甚至不使用myCharVar作为预测的一部分.

我在这个SO链接上找到了子弹2的解释: "因子有新的级别"错误变量我没有使用

那个从我的火车和测试装置中完全删除角色变量的建议为我提供了一个解决方法,所以至少我没有被阻止.但这似乎相当不优雅,而不是仅仅使用"-myCharVar"从模型中删除它们.如果有人理解为什么我的测试集中的字符变量会抛出"因子有新级别"错误,我当然会感兴趣.

r predict

4
推荐指数
1
解决办法
1万
查看次数

R:使用 dynlm 包进行动态线性回归,如何预测()?

我正在尝试构建一个动态回归模型,到目前为止我是用 dynlm 包完成的。基本上模型看起来像这样

y_t = a*x1_t + b*x2_t + ... + c*y_(t-1).
Run Code Online (Sandbox Code Playgroud)

y_t应预测,x1_t并且x2_t将给予,所以是y_(t-1)

使用 dynlm 包构建模型工作正常,但是当涉及到预测时,y_t我感到困惑......

我发现了这个,这似乎是一个非常相似的问题,但它并没有帮助我处理我自己的问题。

这是我面临的问题(基本上是什么predict(),似乎很奇怪。请参阅评论!):

library(dynlm)

# Create Data
set.seed(1)
y <- arima.sim(model = list(ar = c(.9)), n = 11) #Create AR(1) dependant variable
A <- rnorm(11) #Create independent variables
B <- rnorm(11)
y <- y + .5 * A + .2 * B #Add relationship to independent variables 
data = cbind(y, A, B) …
Run Code Online (Sandbox Code Playgroud)

r dynamic linear-regression predict

4
推荐指数
1
解决办法
8208
查看次数

在 Y 中丢失数据的回归后预测.lm

predict.lm当因变量 Y 的某些值丢失时,我不明白如何使用该命令从线性回归生成预测值,即使没有独立的 X 观测值丢失。从代数上讲,这不是问题,但我不知道在 R 中执行此操作的有效方法。以这个假数据框和回归模型为例。我尝试在源数据框中分配预测,但由于缺少一个 Y 值而无法这样做:我收到错误消息。

# Create a fake dataframe
x <- c(1,2,3,4,5,6,7,8,9,10)
y <- c(100,200,300,400,NA,600,700,800,900,100)
df <- as.data.frame(cbind(x,y))

# Regress X and Y
model<-lm(y~x+1)
summary(model)

# Attempt to generate predictions in source dataframe but am unable to.
df$y_ip<-predict.lm(testy)

Error in `$<-.data.frame`(`*tmp*`, y_ip, value = c(221.............
  replacement has 9 rows, data has 10
Run Code Online (Sandbox Code Playgroud)

我通过使用代数df$y<-B0+ B1*df$x生成预测或通过调用模型的系数生成预测来解决这个问题df$y<-((summary(model)$coefficients[1, 1]) + (summary(model)$coefficients[2, 1]*(df$x));但是,我现在正在使用具有数百个系数的大数据模型,这些方法不再实用。我想知道如何使用该predict功能来做到这一点。

预先感谢您的帮助!

r predict missing-data lm

4
推荐指数
1
解决办法
3424
查看次数

如何从 nls 计算 95% 预测区间

借用这个问题的示例数据,如果我有以下数据并且我将以下非线性模型拟合到它,我如何计算我的曲线的95%预测 区间?

library(broom)
library(tidyverse)

x <- seq(0, 4, 0.1)
y1 <- (x * 2 / (0.2 + x))
y <- y1 + rnorm(length(y1), 0, 0.2)

d <- data.frame(x, y)

mymodel <- nls(y ~ v * x / (k + x),
            start = list(v = 1.9, k = 0.19),
            data = d)

mymodel_aug <- augment(mymodel)

ggplot(mymodel_aug, aes(x, y)) +
  geom_point() +
  geom_line(aes(y = .fitted), color = "red") +
  theme_minimal()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

举个例子,我可以轻松地从线性模型计算预测区间,如下所示:

## linear example

d2 <- d %>%
  filter(x > …
Run Code Online (Sandbox Code Playgroud)

r nls predict non-linear-regression

4
推荐指数
1
解决办法
3305
查看次数

使用保存的模型对象预测

我试图使用之前保存的模型在R中使用预测函数.使用以下代码创建并保存模型:

    lrModel1 <- glm(response ~ .,data = modelData,family = binomial,model = TRUE)
    save(lrModel1,file = "lrModel100.rda")
Run Code Online (Sandbox Code Playgroud)

当我加载模型供以后使用时,如下所示并尝试使用它上面的预测函数,如下所示:

    bar <- load("lrModel100.rda")
    predicted <- predict(bar,validationData,type = "response")
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

    Error in UseMethod("predict") : 
            no applicable method for 'predict' applied to an object of class "character"
Run Code Online (Sandbox Code Playgroud)

有没有办法从保存的RDA文件中获取模型对象名称并将其用于预测?

谢谢.

拉维

r predict

3
推荐指数
1
解决办法
7033
查看次数

如何解决predict.lm()错误:变量“亲和力”适合类型“ nmatrix.1”,但提供了“数值”类型

我有一个简单的线性模型:

mylm = lm(formula = prodRate~affinity, mydf)
Run Code Online (Sandbox Code Playgroud)

其中mydf是一个数据框,看起来像:

 prodRate    affinity

1  2643.5744 0.005164040

2  2347.6923 0.004439970

3  1783.6819 0.003322830
Run Code Online (Sandbox Code Playgroud)

当我使用predict.lm()时出现错误:

my_pred= predict(mylm,newdata=data.frame(affinity=seq(0,1,0.1)) )
Run Code Online (Sandbox Code Playgroud)

错误:变量“亲和力”适合类型“ nmatrix.1”,但提供了类型“数字”。

这是为什么?如何解决?谢谢!

r predict

3
推荐指数
1
解决办法
4260
查看次数

使用R公式中的poly()进行预测

我对公式和用户定义函数有疑问:

情况1:

 clotting <- data.frame(
     u = c(5,10,15,20,30,40,60,80,100),
     lot1 = c(118,58,42,35,27,25,21,19,18),
     lot2 = c(69,35,26,21,18,16,13,12,12))

 g1 = glm(lot1 ~ log(u) + poly(u,1), data = clotting, family = Gamma)
 dc = clotting
 dc$u = 1
 predict(g1, dc)

      1           2           3           4           5           6           7           8           9
 -0.01398929 -0.01398929 -0.01398929 -0.01398929 -0.01398929 -0.01398929 -0.01398929 -0.01398929 -0.01398929
Run Code Online (Sandbox Code Playgroud)

但是,如果我只是简单地将poly包装为用户定义的函数(实际上我将拥有自己更复杂的函数),那么我将得到错误:

案例2:

 xpoly <- function(x, degree=1){poly(x,degree)}
 g2 = glm(lot1 ~ log(u) + xpoly(u,1), data = clotting, family = Gamma)
 predict(g2, dc)
       Error in poly(x, degree) :
      'degree' …
Run Code Online (Sandbox Code Playgroud)

r function formula predict

3
推荐指数
1
解决办法
1311
查看次数

如何在R中绘制逻辑glm预测值和置信区间

我有一个glm存在/不存在响应变量的二项式和一个9级的因子变量,如下所示:

data$y<-factor(data$y,levels=c(0,1),labels=c("absent","present"))
table(data$y,data$site_name)

          Andulay Antulang Basak Dauin Poblacion District 1 Guinsuan Kookoo's Nest Lutoban Pier Lutoban South Malatapay Pier
  absent        4        4     1                          0        3             1            5             5              2
  present       2        2     5                          6        3             5            1             1              4

model <- glm(y~site_name,data=data,binomial)
Run Code Online (Sandbox Code Playgroud)

为了简洁起见,只是跳过模型推理和验证,我如何在每个站点上绘制一个以其置信区间在箱图中"出现"的概率?我想要的是在R中的Plot预测概率和置信区间中显示的内容,但是我想用箱线图显示它,因为我的回归变量site_name是具有9个级别的因子,而不是连续变量.

我想我可以按如下方式计算必要的值(但不是100%肯定正确性):

将模型系数转换回成功概率的函数:

calc_val <- function(x){return(round(1/(1+1/(exp(x))),3))}
Run Code Online (Sandbox Code Playgroud)

基于模型的预测概率:

prob <- tapply(predict(model,type="response"),data$site_name,function(x){round(mean(x),3)})
means <- as.data.frame(prob)
Run Code Online (Sandbox Code Playgroud)

预测概率的75%和95%置信区间:

ci <- cbind(confint(model,level=0.9),confint(model,level=0.5))
rownames(ci) <- gsub("site_name","",rownames(ci))
ci <- t(apply(ci,1,calc_val))
Run Code Online (Sandbox Code Playgroud)

将它们连接在一个表中

ci<-cbind(means,ci)
ci
                            prob   5 %  95 %  25 …
Run Code Online (Sandbox Code Playgroud)

plot r predict confidence-interval logistic-regression

3
推荐指数
1
解决办法
4184
查看次数

使用"MASS :: polr"进行概率序数逻辑回归:如何对新数据进行预测

我想在R中进行序数回归,所以我想使用包中的polr函数MASS.首先,我创建一个这样的模型:

model <- polr(labels ~ var1 + var2, Hess = TRUE)  
Run Code Online (Sandbox Code Playgroud)

现在我想使用该模型来预测新病例.我以为那只是:

pred <- predict(model, data = c(newVar1, newVar2))  
Run Code Online (Sandbox Code Playgroud)

然而,似乎预测是以某种方式预测训练集,而不是新数据.当我的训练集是2000个例子时,我的新数据是700个例子.我仍然得到2000个预测标签.

所以我的问题是:如何使用polr新数据进行预测?

regression r ordinal predict logistic-regression

3
推荐指数
1
解决办法
1956
查看次数