在数据框列上使用 poly

Use poly on dataframe column

我有一个像这样的数据框

wood <- read_csv("/Users/name/Desktop/AR/Exercise data-20201109/woodstrength.csv")

我select x 和 y

x <- wood %>% select(Conc)
y <- wood %>% select(Strength)

关系可以用 2 次多项式建模,所以我这样做了

m <- lm(y ~ poly(x, 2, raw = TRUE))

哪个returns

non-numerical argument for binary operator

但是 x 看起来像这样

> x
# A tibble: 19 x 1
    Conc
   <dbl>
 1   1  
 2   1.5
 3   2  
 4   3  
 5   4  
 6   4.5
 7   5  
 8   5.5
 9   6  
10   6.5
11   7  
12   8  
13   9  
14  10  
15  11  
16  12  
17  13  
18  14  
19  15 

我做错了什么?

所以显然选择 %>% 检索某种类型的子数据帧,poly() 无法处理。我用 x <- wood[['Conc']] 得到了 x,现在它不会抛出错误。非常感谢任何更详尽的解释。

如果您查看 poly 的帮助页面 (?poly) :

poly(x, ..., degree = 1, coefs = NULL, raw = FALSE, simple = FALSE)
[...]
x, newdata: a numeric vector at which to evaluate the polynomial. ‘x’
          can also be a matrix.  Missing values are not allowed in ‘x’.

您的数据集是 tibble,当您执行 select 时,它会将 object 保留为 tibble:

wood = tibble(`Conc` = rnorm(10),'Strength'=rnorm(10))
x <- wood %>% select(Conc)

class(x)
[1] "tbl_df"     "tbl"        "data.frame"

你得到那个错误是因为在函数下面,它应用了一些期望矩阵或向量的东西,但是看到了一个列表或 data.frame 或者在你的情况下是一个小标题,因此错误。您可以看到为什么调用该列有效:

 class(wood[["Conc"]])
[1] "numeric"

要将其转换为数值或向量,您可以执行以下操作:

x <- wood %>% pull(Conc)
y <- wood %>% pull(Strength)
m <- lm(y ~ poly(x, 2, raw = TRUE))

或:

m <- lm(Strength ~ poly(Conc, 2, raw = TRUE),data=wood)