Hình dung hướng di chuyển có khả năng nhất cho các điểm có độ tuổi sử dụng R?


8

Tôi có một câu hỏi về cách tốt nhất để hình dung hướng di chuyển dự đoán được đưa ra một tập hợp các điểm với độ tuổi ước tính.

Hãy tưởng tượng tôi có một bộ tọa độ địa lý, đại diện cho các cộng đồng. Đối với mỗi điểm, tôi có một ước tính về độ tuổi của cộng đồng đó. Tôi muốn vẽ một mũi tên trên bản đồ chỉ ra hướng di chuyển chung nhất theo thời gian. Tôi cũng muốn độ lớn của mũi tên biểu thị độ dốc phù hợp / mức độ tin cậy của chúng ta đến mức có sự liên kết có ý nghĩa giữa thời gian và không gian. Tôi không hỏi về lý thuyết về quá trình di chuyển, chỉ là về cách bạn sẽ quyết định góc, vị trí và độ lớn của mũi tên.

Ví dụ, bên dưới các điểm đỏ cũ hơn các điểm xanh. Trong hộp đầu tiên, có vẻ như một kết luận hợp lý rằng di cư là Đông Nam. Trong hộp thứ hai, không có mẫu rõ ràng, vì vậy mũi tên nhỏ hơn.

Thí dụ

Có một cách tiêu chuẩn, nguyên tắc để làm điều này? Một cách tôi nghĩ là vẽ một vectơ giữa điểm cũ nhất và điểm cũ thứ 2, sau đó giữa điểm cũ thứ 2 và thứ 3 lâu đời nhất, v.v. Sau đó tổng hợp các vectơ (nhưng làm thế nào để quyết định vị trí bắt đầu?). Hoặc có thể bạn cần lấy các vectơ giữa tất cả các cặp điểm và cân chúng theo độ tuổi tương đối? Hoặc có lẽ tôi cần phải làm việc ra các đường viền, sau đó vẽ một con đường bắt đầu từ điểm cao nhất và đi xuống dốc?

Một giải pháp dựa trên R sẽ là lý tưởng.


nó nhắc tôi đến các mô hình hồi quy hoặc các bề mặt, tính toán hướng dòng chảy.
Andreas Müller

1
Có, phù hợp z~x+yvới các điểm dữ liệu sẽ đưa ra phương trình của mặt phẳng phù hợp với các điểm, sau đó vẽ một mũi tên có hướng được xác định bởi các hệ số và kích thước dựa trên mức ý nghĩa. Trung tâm mũi tên ở tâm của các điểm.
Spacesman

Đây là một câu hỏi xuất sắc (+1). Tôi khuyên bạn nên thêm chỉnh sửa của bạn như là một câu trả lời. Xử lý chỉnh sửa cho câu hỏi khiến câu hỏi của bạn hơi mất tập trung. Tốt nhất là mở một câu hỏi mới hỏi làm thế nào để cải thiện các tính năng của mã của bạn.
Aaron

Câu trả lời:


2

Đây là giải pháp hiện tại của tôi, dựa trên gợi ý ở trên để phù hợp với một bề mặt. Giải pháp này không giải quyết đúng tỷ lệ, do đó tọa độ và giá trị z phải nhỏ (ví dụ từ -1 đến 1).

drawDirection = function(x,y,z){
  # use linear model to fit surface
  m = lm(z ~ x+y)

  # Treat coefficeints like vectors and 
  # define arrow start and end points
  arrow = c(0,0,
            m$coefficients["x"],
            m$coefficients['y'])
  # Move arrow to centroid
  adj.x = mean(x)- (m$coefficients["x"]/2)
  adj.y = mean(y)- (m$coefficients["y"]/2)
  arrow = arrow + c(adj.x,adj.y,adj.x,adj.y)

  # colours for points
  # Yellow = higher = more recent
  z.col = heat.colors(10)[as.numeric(cut(z,breaks=10))]
  # Plot points with some extra space around
  plot(x,y, col=z.col, pch=16,
       xlim=c(min(x)-sd(x)*2,max(x)+sd(x)*2),
       ylim=c(min(y)-sd(y)*2,max(y)+sd(y)*2))
  # Plot arrow
  # (scale width by 10 x the R squared)
  arrows(arrow[1],arrow[2],arrow[3],arrow[4],
         lwd = 1+(10*summary(m)$adj.r.squared))
}

par(mfrow=c(1,2))

# Simulate some data
n = 30
# Correlated North-East
x = runif(n,0,1)
y = jitter(x,amount=1)
z = jitter(x+y,amount=1)
x = x
y = y
drawDirection(x,y,z)

# Uncorrelated
x2 = runif(n,0,1)
y2 = runif(n,0,1)
z2 = runif(n,0,1)

drawDirection(x2,y2,z2)

Đầu ra

Tuy nhiên, tôi nghĩ rằng tôi đang làm sai tỷ lệ - nếu tôi tăng phạm vi của x và y, thì mũi tên không đúng tỷ lệ:

# Correlated North-East, 
#  with x and y variables between 0 and 360
x = runif(n,0,1)
y = jitter(x,amount=1)
z = jitter(x+y,amount=1)
x = x*360
y = y*360
drawDirection(x,y,z)

Chiều dài mũi tên không đúng tỷ lệ

Vì vậy, bây giờ bạn có thể chia tỷ lệ tọa độ địa lý và giá trị z.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.