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

mylm = lm(formula = prodRate~affinity, mydf)

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

1  2643.5744 0.005164040

2  2347.6923 0.004439970

3  1783.6819 0.003322830

当我使用predict.lm()时出现错误:
my_pred= predict(mylm,newdata=data.frame(affinity=seq(0,1,0.1)) )

错误:变量'affinity'配备了类型“nmatrix.1”,但提供了类型“numeric”。

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

最佳答案

通过与user20650的讨论(请参见上文),发现了该错误:

mylm = lm(formula = prodRate〜affinity,mydf)中的mydf是通过将类似矩阵的列添加到现有数据框mydf中来创建的,如下所示:

mydf $亲和=矩阵(somenumber)

即mydf中的“亲和力”列是由矩阵构成的,其结构仍然是矩阵。
此矩阵结构与预报(mylm,newdata = ...)中newdata = data.frame(affinity = seq(0,1,0.1))中的“亲和力”列不一致,predict(mylm,newdata = ...)是数字矢量。

解决方案1:如下修复mydf
mydf 即确保mydf的亲和力列具有类似矢量的结构

解决方案2:保留原始的mydf,但在末尾强制将mydf $ affinity作为向量执行:
mylm 因此线性模型“mylm”中的自变量“亲和力”具有类似于矢量的结构,而不是类似于矩阵的结构,这将与newdata = data.frame(affinity = seq(0,1,0.1) )在predict(mylm,newdata = ...)中,这是一个数值向量。

关于r - 如何解决predict.lm()错误: variable 'affinity' was fitted with type "nmatrix.1" but type "numeric" was supplied,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22337495/

10-11 13:30