2013-05-20 28 views

Trả lời

1
l <- matrix(0,nrow(B),nrow(B)) 
l[-1,-nrow(B)] <- diag(nrow(B)-1) 
l 
##  [,1] [,2] [,3] 
## [1,] 0 0 0 
## [2,] 1 0 0 
## [3,] 0 1 0 

l %*% B 
##  [,1] [,2] 
## [1,] 0 0 
## [2,] 2 1 
## [3,] 4 5 
+0

Cảm ơn bạn nhưng tôi đang cố gắng hiểu tại sao trễ không xuất hiện để hoạt động – ManInMoon

+0

' lag' không hoạt động. Vì nó được dự định sẽ được sử dụng cho một chuỗi thời gian, nó thay đổi các thuộc tính. –

+0

Tôi không hiểu những gì bạn có ý nghĩa bởi nó làm việc ... khi tôi làm? Lag công việc "thuộc tính" không xuất hiện – ManInMoon

2

Tôi chưa bao giờ hiểu lag chức năng, thay vào đó tôi muốn sử dụng Lag từ quantmod gói :

> # library(quantmod) 
> apply(B, 2, Lag) 
    [,1] [,2] 
[1,] NA NA 
[2,] 2 1 
[3,] 4 5 

Nếu bạn muốn (hoặc cần) trễ ma trận mà không cần ts, một cách có thể sử dụng applyLag từ gói quantmod, nhưng nếu bạn không muốn cài đặt gói chỉ với một chức năng thì bạn có thể viết hàm của riêng mình, một ý tưởng sẽ là như thế này:

lag.matrix <- function(x, k=1){ 
    N <- ncol(B) 
    l <- matrix(embed(x,k+1)[, -c(1:(k*N))], ncol=N) 
    NAs <- matrix(rep(NA, k*N), ncol=N) 
    rbind(NAs, l) 
} 
> lag.matrix(B, k=1) 
    [,1] [,2] 
[1,] NA NA 
[2,] 2 1 
[3,] 4 5 
> lag.matrix(B, k=2) 
    [,1] [,2] 
[1,] NA NA 
[2,] NA NA 
[3,] 2 1 

soluction khác có thể là một posted như một bình luận bởi @GSee trong đó sử dụng lag như bạn muốn.

> lag(xts(B, .POSIXct(0)+0:(nrow(B)-1))) 
        [,1] [,2] 
1970-01-01 01:00:00 NA NA 
1970-01-01 01:00:01 2 1 
1970-01-01 01:00:02 4 5 
+0

Lưu ý rằng 'Lag' và' lag.xts' về cơ bản ngược lại với 'lag.zoo'. ví dụ. chú ý sự khác biệt giữa 'lag (xts (B, .POSIXct (0) +0: 2))' và 'lag (sở thú (B, .POSIXct (0) +0: 2))' – GSee

+0

@GSee cảm ơn vì đã làm rõ điều này tôi đã xóa phần này khỏi câu trả lời của mình để tránh nhầm lẫn. –

3

Đó là vì lag thấu kính chính xác lần của đối tượng, không phải là giá trị dữ liệu. Nó thực sự dành cho các đối tượng chuỗi thời gian.

Khi lag được sử dụng trên ma trận đơn giản, B, phương thức lag.default được gọi. Vì không có thời gian gắn liền với một ma trận đơn giản nó giả định thời gian được tính 1, 2, ..., NROW(B):

> time(B) 
[1] 1 2 3 
attr(,"tsp") 
[1] 1 3 1 

và thay đổi các lần bởi một để bây giờ họ bắt đầu từ 0:

> time(lag(B)) 
[1] 0 1 2 
attr(,"tsp") 
[1] 0 2 1 

Sử dụng một lớp chuỗi thời gian nếu bạn muốn kết hợp các đối tượng có thời gian. (Cột đầu tiên là thời gian như vậy hiển thị dưới đây.)

> library(zoo) 
> 
> # zooreg - regular series or almost so 
> B.zr <- zooreg(B) 
> merge(B.zr, lag(B.zr)) 
    B.zr.1 B.zr.2 lag(B.zr).1 lag(B.zr).2 
0  NA  NA   2   1 
1  2  1   4   5 
2  4  5   3   7 
3  3  7   NA   NA 

> # zoo - irregular series 
> B.z <- zoo(B) 
> merge(B.z, lag(B.z)) 
    B.z.1 B.z.2 lag(B.z).1 lag(B.z).2 
1  2  1   4   5 
2  4  5   3   7 
3  3  7   NA   NA 

Lưu ý sự khác biệt giữa lag.zooreg mà có thể mở rộng ra ngoài phạm vi của thời đại ban đầu sản xuất một thời gian 0 và lag.zoo mà không thể vì không có quy luật giả định trong cái sau.

Chúng tôi cũng có thể sử dụng ts lớp học giả định đều đặn để có thể tạo thời gian 0 nhưng không có merge.ts làm cho nó ít hữu ích hơn ở đây.

1

Cách dễ nhất để trễ ma trận trong R là sử dụng hàm 'embed()'. Dưới đây là ví dụ có thể tái sản xuất nhanh:

> # Create a 5x2 matrix 
> m <- replicate(2, 1:5) 
> m 
    [,1] [,2] 
[1,] 1 1 
[2,] 2 2 
[3,] 3 3 
[4,] 4 4 
[5,] 5 5 
> 
> # Use the 'embed()' function to lag the matrix 
> lag_m <- embed(m, 3) 
> lag_m 
    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 3 3 2 2 1 1 
[2,] 4 4 3 3 2 2 
[3,] 5 5 4 4 3 3 

Một vài từ quan trọng về hàm embed() và đầu ra của nó.

  • Hàm này được dùng như sau: nhúng (ma trận, tụt + 1)

Đối số đầu tiên của hàm là ma trận chúng tôi muốn tụt hậu. Đối số thứ hai; tuy nhiên, là số lượng độ trễ chúng tôi muốn "cộng 1".Do đó, nhúng (ma trận, 3) có nghĩa là chúng ta muốn trễ ma trận theo 2 khoảng thời gian.

  • Kết quả của hàm là ma trận tụt và nó là như sau:

. hai cột đầu tiên đại diện cho ma trận m ban đầu, nhưng số hàng được điều chỉnh cho số lượng độ trễ (5 hàng ban đầu trừ đi khoảng thời gian trễ 2 lần)

. tập hợp cột thứ hai (cột 3 và 4) là ma trận m bị trễ 1 khoảng thời gian

. tập hợp cột thứ ba (cột 5 và 6) là ma trận m bị trễ 2 khoảng thời gian.

Các vấn đề liên quan