2012-03-10 19 views
4

在R,你可能已經用估計log換算因變量的模型:model.frame和更新

mfit <- lm(
    formula = log(salary) ~ yrs.service + yrs.since.phd, 
    data = Salaries 
) 

那麼你可能想改變模型框架,並呼籲更新改裝模型:

n  <- nrow(Salaries) 
mfr <- model.frame(mfit)[sample(1:n, size=n, replace=TRUE),] 
mfit2 <- update(mfit, data = mfr) 

這將導致一個錯誤:

Error in eval(expr, envir, enclos) : object 'salary' not found 

的原因是,式仍然具有依賴雜物ble log(salary)並且模型框架中的變量被稱爲log(salary)。 R認爲它可以找到salary,然後打電話給log。沒有重採樣的情況下會出現同樣的錯誤,這個例子只是說明了爲什麼人們可能想要這樣做。

以上過程來自執行重新採樣行的引導程序包。這是行爲預期,還是它的錯誤?我知道可以通過變換數據參數中的變量來避開它,但是這似乎很煩人和被忽視...

+0

這不是完全相同的統計模型,但你也可以適合'glm(salary〜yrs.service + yrs.since.phd,family = gaussian(link =「log」))' – 2012-04-24 16:05:48

回答

0

我不認爲這是一個錯誤。由於式可接收的函數和操作,即,

log(foo)*3 ~ abs(fooller) + fooz 

它不能分離什麼是從功能abs()用參數fooller結果稱爲abs(fooller)的對象。

在我看來,這是一個命名約定的問題。您不應將變量或列命名爲可能被誤解爲函數的名稱。相反,您可以使用salary.log

+0

這實際上並不是一個很好的有用的答案。 'abs(傻瓜)'在R中不是一個合法的符號/變量名(如果你創建一個變量叫做'abs(fooler)' [ie backtick-protected],那麼你應該得到你所得到的),'all.vars()'可以提取' fooller' – 2018-02-05 16:43:50