[英]Error in terms.formula(formula) : '.' in formula and no 'data' argument
[英]Error in terms.formula(formula, data = data) : invalid power in formula
我正在嘗試對劑量預測值進行轉換,這是我的代碼:
mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
其中“ m”是我使用的力量。 但是,我遇到了一個錯誤
> mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
Error in terms.formula(formula, data = data) : invalid power in formula
誰知道為什么?
抱歉,不清楚。 根據先前的計算,我的m為-0.18182。 我現在知道我不應該使用as.numeric(as.factor)。 但是如果代碼是
mod = glm(colonies ~ (as.factor(dose))^(m), data = salmonella, family = "poisson")
錯誤仍然存在。 這很奇怪,因為當我將m更改為2時,它可以工作。
tl; dr我最好的猜測是,您應該使用I(...^m)
來保護^
/讓R將其視為數值乘冪運算符。
我在faraway
包裹中找到salmonella
,可以確認您的錯誤。 實際上,它通過各種簡化而得以保留。
m <- 1 ## same results with m <- 2L, etc.
mod = glm(colonies ~ (as.numeric(as.factor(dose)))^(m), data = salmonella, family = "poisson")
mod = glm(colonies ~ dose^(m), data = salmonella, family = "poisson")
mod = glm(colonies ~ dose^m, data = salmonella, family = "poisson")
mod = lm(colonies ~ dose^m, data = salmonella)
看起來R的公式接口不允許在公式的冪中進行符號替換。
但是 :如果您真正想做的是
dose
轉換為均勻間隔的整數值(0 = 1、10 = 2、33 = 3) 然后使用I()
指定R應該將^
視為數字運算符,而不是公式中的交互運算符,這就是您想要的:
ss <- transform(salmonella, numdose=as.numeric(as.factor(dose)))
mod = glm(colonies ~ I(numdose^m), data = ss, family = "poisson")
OTOH圖片顯示這並不完全是瘋狂的(盡管也沒有必要):
library(ggplot2); theme_set(theme_bw())
m <- 2
ggplot(ss,aes(numdose,colonies))+
geom_point()+
geom_smooth(method="glm",method.args=list(family=poisson))+
geom_smooth(method="glm",method.args=list(family=poisson),
formula=y~I(x^m),colour="red")
ggsave("numdose.png")
如果這是來自程序包“ faraway”的salmonella
數據集,則您不能在劑量值上使用as.factor或as.numeric,因為它已經是數字了。
此外,在R中執行多項式模型的正確方法是使用poly
函數而不是形成二次項。 如果您堅持使用“原始”二次項,那么使用poly會更容易,但是正如Ben所建議的那樣,應該使用I函數
library(faraday)
m=2
mod = glm(colonies ~ I(dose^m), data = salmonella, family = "poisson")
但是,更好的是:
m=2; mod = glm(colonies ~ poly(dose, m), data = salmonella, family = "poisson")
這將為您提供線性項和二次項,但二次項將作為正交多項式完成,然后您可以進行適當的推斷。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.