2012-12-07 133 views
3

我是来自Stata世界的R的新手。我刚刚运行的线性模型(具有约100个变量,各有500个数据点左右),像这样:预测预测的标准误差

RegModel.3 <- lm(ordercount~timecount2+timecount4 .... expeditedrop, data=Dataset) 

现在我想找到预测的标准误差,如在Stata的stdf功能,为每个拟合值。

我尝试下面的代码:

predict(RegModel.3$fitted.values, new, se.fit=TRUE) 

但我发现了以下错误:

Error in UseMethod("predict") : no applicable method for 'predict' applied to an object of class "c('double', 'numeric')" 

我在做什么错?此外,我怎么去类似的方式的方式使用write.csv命令导出输出我写的系数:

write.csv(RegModel.3$coefficients, file='results.csv') 

谢谢!

回答

4

可再现从?lm采取例如:

write.csv(cbind(pp$fit,stderr=pp$se.fit),file="predintervals.csv") 

ctl <- c(4.17,5.58,5.18,6.11,4.50,4.61,5.17,4.53,5.33,5.14) 
trt <- c(4.81,4.17,4.41,3.59,5.87,3.83,6.03,4.89,4.32,4.69) 
group <- gl(2,10,20, labels=c("Ctl","Trt")) 
weight <- c(ctl, trt) 
lm.D9 <- lm(weight ~ group) 


pp <- predict(lm.D9, interval="prediction",se.fit=TRUE) 

(参见?predict.lm供参考)和应该这样做。 (在这种情况下,标准误差全部相同,因为存在单个分类预测器并且没有连续预测器......)

PS:只要有可能,最好使用标准访问器,如coef()来提取系数或fitted()以提取拟合值,而不是通过$到达对象内部。尝试methods(class="lm")以查看可用的访问器。

编辑:插图,一般的做法仍然是一个大问题的工作:

set.seed(101) 
X <- matrix(runif(101*500),nrow=500) 
prednames <- paste0("predictor",1:100) 
X2 <- setNames(as.data.frame(X), 
       c("response",prednames)) 
form <- reformulate(paste(prednames,collapse="+"),response="response") 
fit1 <- lm(form,data=X2) 
pp <- predict(fit1,interval="predict",se.fit=TRUE) 
+1

当我使用预测(),我得到以下错误:错误predict.lm(RegModel.3,间隔=“预测”,se.fit = TRUE): 下标越界---你知道我为什么得到它吗? – Bryan

+1

@ user1884063请发布一个[可重现的例子](http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example) –

+0

或至少告诉我们什么'str(RegModel .3)'是... –