簡體   English   中英

公式中的錯誤。(公式,數據=數據):公式中的無效功效

[英]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)
  • 在GLM中使用該劑量的冪作為預測變量

然后使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM