I have a simple linear model:
mylm = lm(formula = prodRate~affinity, mydf)
where mydf is a dataframe which looks like:
prodRate affinity
1 2643.5744 0.005164040
2 2347.6923 0.004439970
3 1783.6819 0.003322830
when I use predict.lm() an error came up:
my_pred= predict(mylm,newdata=data.frame(affinity=seq(0,1,0.1)) )
Error: variable 'affinity' was fitted with type "nmatrix.1" but type "numeric" was supplied.
Why is that? how to fix it? Thanks!
Thanks to the discussion with user20650 (see above), the bug was identified:
The mydf in mylm = lm(formula = prodRate~affinity, mydf)
was created by adding an matrix-like column to the existed dataframe mydf as following:
mydf$affinity = matrix(somenumber)
i.e. the "affinity" column in mydf is made from a matrix and its structure remains as matrix.
This matrix structure is NOT consistent with the "affinity" column in newdata=data.frame(affinity=seq(0,1,0.1))
in predict(mylm,newdata=...)
, which is a numeric vector.
solution1: fix mydf as following
mydf <- data.frame(prodRate , affinity)
.
i.e. make sure that the affinity column of mydf has a vector-like structure
solution2: keep the original mydf but enforce mydf$affinity as vector in the fomular:
mylm <- lm(formula = prodRate ~ as.vector(affinity), mydf)
so that the independent variable "affinity" in the linear model "mylm" has the vector-like structure instead of matrix-like structure, which will be consistent with the newdata=data.frame(affinity=seq(0,1,0.1))
in predict(mylm,newdata=...)
, which is a numeric vector.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With