首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UseMethod("predict")中出错:“predict”没有适用于类"c('double','numeric')的对象的'predict‘方法。“

UseMethod("predict")中出错:“predict”没有适用于类"c('double','numeric')的对象的'predict‘方法。“
EN

Stack Overflow用户
提问于 2019-02-28 21:29:11
回答 1查看 6.2K关注 0票数 0

我不是R专家。我正在尝试计算多项式模型产生的偏差:

代码语言:javascript
复制
f <- function(x) sin(x-5)/(x-5)
# From which we can sample datasets:
N <- 20
x <- runif(N,0,15)              
t <- f(x) + rnorm(N, sd=0.1)  

T是生成数据的函数,我使用的是标准差为0.2的高斯误差的同步函数。为了创建点x,我使用从0到15的均匀分布。

代码语言:javascript
复制
plot.bias <- function (f, polydeg) {
   plot(data.frame(x, t))
   curve(f, type="l", col="green", add=TRUE)
   polyfit <- lm(t ~ poly(x, polydeg, raw=TRUE))
   p <- polynom(coef(polyfit))
   curve(p, col="red", add=TRUE)
   points(x, calc.bias(f, polydeg, x), col="blue")
   abline(h=0, col='blue')
}

这是一个函数,它首先绘制数据,然后绘制原始生成曲线,然后计算给定次数的回归多项式,绘制它,最后绘制偏差。偏差由以下函数计算,该函数给出误差:

代码语言:javascript
复制
calc.bias <- function (f, polyfit, point) {
  predictions <- numeric(0)
  print(class(point))
  for (i in 1:100)
  {
     x <- runif(N, 0, 15)                 
     t <- f(x) + rnorm(N, sd=0.2)
     d <- data.frame(point)
     add <- predict(polyfit, newdata = data.frame(point))
     predictions <- c(predictions, add)
  }
  return((f(point)-mean(predictions))^2)
}

我所做的是用我们的多项式模型计算100个不同数据集中最佳预测(f函数)减去给定点预测的差值。我将这些结果存储在预测向量中,最后该函数返回差值均值的平方,即偏差的平方。

奇怪的是,当我执行普通代码,而不是在函数中,它工作,它不会产生任何错误。但是当我运行的时候:

代码语言:javascript
复制
plot.bias(f, 1)

错误就出现了。怎么啦?许多tnx

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 21:51:49

我想我找到了。这似乎是有效的,但不确定这是你所期望的。在plot.bias中,我更改了您对calc.bias的使用(即calc.bias(f, polyfit, x)而不是calc.bias(f, polydeg, x))。我使用的整个代码:

代码语言:javascript
复制
library(PolynomF)

f <- function(x) sin(x-5)/(x-5)
# From which we can sample datasets:
N <- 20
x <- runif(N,0,15)              
t <- f(x) + rnorm(N, sd=0.1)  



calc.bias <- function (f, polyfit, point) {
  predictions <- numeric(0)
  print(class(point))
  for (i in 1:100)
  {
    x <- runif(N, 0, 15)                 
    t <- f(x) + rnorm(N, sd=0.2)
    d <- data.frame(point)
    add <- predict(polyfit, newdata = data.frame(point))
    predictions <- c(predictions, add)
  }
  return((f(point)-mean(predictions))^2)
}

plot.bias <- function (f, polydeg) {
  plot(data.frame(x, t))
  curve(f, type="l", col="green", add=TRUE)
  polyfit <- lm(t ~ poly(x, polydeg, raw=TRUE))
  p <- polynom(coef(polyfit))
  curve(p, col="red", add=TRUE)
  points(x, calc.bias(f, polyfit, x), col="blue")
  abline(h=0, col='blue')
}

plot.bias(f, 1)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54926897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档