2011-10-14 42 views
3

這個問題與我的previous question密切相關,唯一的區別是我不想繪製數據,我試着自己解決它,但仍然陷入了困境創建函數自動創建彙總數據集(fit < - lm(y〜x1 + x2 + ... xn)

所以我想從線性迴歸擬閤中檢索自變量,擬合變量,殘差和標準化殘差。

我會用例子,這是好心由布賴恩·迪格斯創建的。所以,謝謝你。

dat <- data.frame(x1=rnorm(100), x2=rnorm(100,4,5), x3=rnorm(100,8,27), x4=rnorm(100,- 6,0.1),t=(1:100)+runif(100,-2,2)) 
dat <- transform(dat, y=x1+4*x2+3.6*x3+4.7*x4+rnorm(100,3,50)) 

fit <- lm(y~x1+x2+x3+x4, data=dat) # fit 
dat$resid <- residuals(fit) 
vars <- names(coef(fit))[-1] 

下一步我卡住了,像以前一樣。我試圖只獲取用於迴歸的變量並將它們綁定到新的數據集。我嘗試了以下,但它不起作用。這一步是錯誤的。我可以綁定殘差,但沒有使用變量。

fit.data <- cbind(predict(fit),as.name(names(coef(fit))[2])) 

任何幫助真的很感激。是的,仍然在自學教學。

+0

你指的是實際的數據?你爲什麼不從'dat'那裏得到這樣的結果呢:'dat [,vars]'? –

+0

謝謝尼克。你說得對,我可以用'dat'。不幸的是,我們正在尋找一個數據集,它有一些變量的空白字段,而不是其他字段。那些空白字段將被排除。 'na.omit()'會實現這一點。所以我可以綁定迴歸中使用的變量。所有的變量都有相同的長度。然後應用'na.omit()'。實際上,這應該與迴歸最終使用的數據集相同。從審計的角度來看,我仍然非常好奇將'na.omit'和'dat'創建的數據集與基礎擬合數據進行比較。 –

+0

你一定要從'ggplot2'包中查看'fortify' ... –

回答

0

你不能將所有不具有相應維度的東西組合在一起。爲此目的,你需要一個列表。因爲彙總對象沒有合適的值,所以你也會希望使用適合對象(也許不適用於rstandard(),但我不確定)。

mod.results <- list(vars = names(coef(fit))[-1], 
        fitted.values=fit$fitted.values, 
        residuals = residuals(fit), 
        std.resid = rstandard(fit)) 

把它在一個功能很簡單:

> extr.res <- function(fit) {mod.results <- list(vars = names(coef(fit)), 
fitted.values=fit$fitted.values, residuals = residuals(fit), std.resid = rstandard(fit)) } 
> str(extr.res(fit)) 
List of 4 
$ vars   : chr [1:5] "(Intercept)" "x1" "x2" "x3" ... 
$ fitted.values: Named num [1:100] -36.19 31.4 -2.59 -130.03 -1.12 ... 
    ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ... 
$ residuals : Named num [1:100] -71.6 -21.2 -50.7 19 -58.5 ... 
    ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ... 
$    : Named num [1:100] -1.608 -0.487 -1.175 0.435 -1.297 ... 
    ..- attr(*, "names")= chr [1:100] "1" "2" "3" "4" ... 
+0

謝謝迪文。我看到殘差和擬合的數據,但看不到變量背後的實際數據,例如x1或x2等等。所以我沒有捕獲迴歸中自變量的數據。 –

+1

如果你想要解決處理缺失值的答案,那麼你不應該提供一個完整數據的例子。請編輯您的問題以準確反映您的問題。 –