दिखा रहा है कि stats:::simulate.lm
संशोधित करने के लिए गेविन सिम्पसन का सुझाव एक व्यवहार्य है।
## Modify stats:::simulate.lm by inserting some tracing code immediately
## following the line that reads "ftd <- fitted(object)"
trace(what = stats:::simulate.lm,
tracer = quote(ftd <- list(...)[["XX"]]),
at = list(5))
## Prepare the data and 'fit' object
df <- data.frame(x=x<-1:10, y=1.5*x + rnorm(length(x)))
fit <- lm(y ~ x, data = df)
newX <- 8:1
## Pass in new x-values via the argument 'XX'
simulate(fit, nsim = 4, XX = newX)
# sim_1 sim_2 sim_3 sim_4
# 1 8.047710 8.647585 7.9798728 8.400672
# 2 6.398029 7.714972 7.9713929 7.813381
# 3 5.469346 5.626544 4.8691962 5.282176
# 4 4.689371 4.310656 4.2029540 5.257732
# 5 4.628518 4.467887 3.6893648 4.018744
# 6 2.724857 4.280262 2.8902676 4.347371
# 7 1.532617 2.400321 2.4991168 3.357327
# 8 1.300993 1.379705 0.1740421 1.549881
काम करता है यही कारण है, लेकिन यह एक क्लीनर है (और उनसे बेहतर) दृष्टिकोण:
## A function for simulating at new x-values
simulateX <- function(object, nsim=1, seed=NULL, X, ...) {
object$fitted.values <- X
simulate(object=object, nsim=nsim, seed=seed, ...)
}
## Prepare a fit object and some new x-values
df <- data.frame(x=x<-1:10, y=1.5*x + rnorm(length(x)))
fit <- lm(y ~ x, data = df)
newX <- 8:1
## Try it out
simulateX(fit, nsim = 4, X = newX)
# sim_1 sim_2 sim_3 sim_4
# 1 8.828988 6.890874 7.397280 8.1605794
# 2 6.162839 8.174032 3.612395 7.7999466
# 3 5.861858 6.351116 3.448205 4.3721326
# 4 5.298132 4.448778 2.006416 5.7637724
# 5 7.260219 4.015543 3.063622 4.2845775
# 6 3.107047 4.859839 6.202650 -1.0956775
# 7 1.501132 1.086691 -1.273628 0.4926548
# 8 1.197866 1.573567 2.137449 0.9694006
स्रोत
2013-02-19 21:40:44
अंतिम पंक्ति अपने क्यू में मुझे उलझन में है। 'x' तय है; क्या आप नए 'x' डेटा के लिए' y' (प्रतिक्रिया) अनुकरण करते हैं? –
क्षमा करें, गेविन, आप सही हैं। मेरा कहना था कि प्रतिक्रियाओं को अनुकरण किया जाएगा। इसे संपादित किया गया है। – PirateGrunt
ठीक है, तो आप 'अनुकरण' पर देख सकते हैं लेकिन यह केवल वर्तमान 'x' के लिए काम करता है। लेकिन आप मौजूदा ऑब्जेक्ट की बजाय 'newdata = newX' के साथ 'ऑब्जेक्ट()' के साथ मॉडल ऑब्जेक्ट पर' predict() 'को कॉल करने के लिए (simulate.lm()') को बदल सकते हैं और फिर इसे आगे बढ़ने की अनुमति दें सामान्य कोड मानते हैं कि 'भार' का उपयोग नहीं किया गया था क्योंकि इससे मामलों को जटिल बनाया जाएगा ... –