Làm thế nào để chọn phương pháp nội suy raster?


8

Tôi làm việc với bộ dữ liệu ~ 1,3 triệu tòa nhà dân cư; mỗi trong số chúng được mô tả bởi một biến phân phối thông thường từ 0 đến 100. Bộ dữ liệu bao gồm toàn bộ Thụy Sĩ nên rõ ràng có các khu vực có mật độ điểm rất dày đặc và rất thưa thớt.

Hạn chế được áp dụng bởi nhà cung cấp dữ liệu của chúng tôi là chúng tôi không thể phát hành bộ dữ liệu chi tiết hơn 5 tòa nhà.

Tôi đã suy nghĩ về việc chuyển đổi dữ liệu điểm này thành một bề mặt raster. Mục tiêu chính của tôi trong bài tập này là tạo ra bề mặt giảm thiểu lỗi sẽ phát sinh khi ai đó cố gắng lấy giá trị điểm từ raster này bằng cách trích xuất dữ liệu tại các vị trí quan tâm của họ (so với trích xuất từ ​​dữ liệu gốc của vị trí điểm).

Tôi muốn biết loại phương pháp nào phù hợp nhất để làm điều đó. Có khá ít lựa chọn trong hộp công cụ Phân tích không gian và thậm chí nhiều hơn trong phần Điều khiển địa lý, vì vậy tôi rất đánh giá cao một số trợ giúp về việc bắt đầu từ đâu.


1
Biến đại diện cho cái gì?
Dan C

@DanC Đó là một biện pháp tương tự như chỉ số tước .
radek

Bạn có muốn chỉ có các ô raster khi bạn có các điểm và NoData xung quanh hoặc bạn muốn nội suy giữa các điểm? Bạn muốn chọn kích thước ô nào và khoảng cách tối thiểu và tối đa giữa các điểm là bao nhiêu? Ý tôi là có bao nhiêu điểm có thể rơi vào một ô (có thể> 5) và có bao nhiêu ô sẽ không có điểm.
nadya

@nadya Ad1: Tôi hài lòng với cả hai giải pháp và sẽ chọn giải pháp giới thiệu ít lỗi nhất. Ad2: Tôi không bị giới hạn về kích thước ô miễn là tôi đáp ứng các yêu cầu về quyền riêng tư; khoảng cách tối thiểu có thể trong vòng vài mét, tối đa? cũng có thể là đường chéo của cả nước? Quảng cáo 3: Đối với lưới 100m, số điểm có thể lên tới ~ 50; và số lượng bán rỗng - có khả năng thực sự lớn.
radek

Câu trả lời:


10

Có vẻ như câu hỏi này liên quan đến câu hỏi trước đó hỏi về việc ngụy trang dữ liệu đó bằng cách sử dụng lưới không đều. Nếu chúng tôi chấp nhận rằng một lưới thông thường sẽ được sử dụng, thì có vẻ như

  • Hầu hết các tế bào phải đủ lớn để bao gồm năm hoặc nhiều tòa nhà và

  • Khi các ô không bao gồm năm tòa nhà, giá trị của chúng sẽ được thay đổi theo những cách không thể đoán trước (nhưng được kiểm soát).

Làm thế nào bạn đo lường lỗi xác định giải pháp tốt nhất. Đặt giá trị được tính trong một ô là y và để các giá trị của các tòa nhà nằm trong (hoặc ít nhất là chồng lấp) ô đó là x1 , x2 , ..., xk . Hơn nữa, giả sử rằng mỗi tòa nhà có "mức độ quan tâm" không âm (có thể tỷ lệ thuận với số lượng cư dân trong đó), được sử dụng làm đại diện cho số lần dự kiến ​​mà raster của bạn sẽ sử dụng để ước tính rằng giá trị xây dựng. Chúng ta hãy gọi các mức này lần lượt là w1 , ..., wk và để w chỉ định tổng (không khác) của chúng.

  1. Các sai số tuyệt đối trung bình là giá trị trung bình cộng của các kích thước lỗi | y - xi | khi tôi vượt qua các chỉ số xây dựng. Điều này được giảm thiểu bằng cách chọn y là trung tuyến của xi .

  2. Các lỗi tối đa là lớn nhất trong số max (| y - xi |) như tôi chạy trên các chỉ số tòa nhà. Điều này được giảm thiểu bằng cách chọn y là trung bình của ( xi ) (trung bình của max và min). Điều này bị ảnh hưởng nặng nề bởi chỉ một giá trị ngoại lai duy nhất, do đó, trung bình có thể thích hợp hơn.

  3. Các lỗi dự kiến là trung bình có trọng số của | y - xi | với các trọng số được đưa ra bởi wi / w . Điều này được giảm thiểu bằng cách lấy y làm trung bình trọng số của xi (nhưng không có GIS nào thực hiện phép tính này cho bạn - bạn sẽ phải sử dụng gói thống kê hoặc toán học như Rhoặc Mathicala cho công việc đó.)

  4. Các lỗi bình phương dự kiến là bình quân gia quyền ( y - xi ) ^ 2. Nó được giảm thiểu bằng cách lấy y là giá trị trung bình có trọng số của xi , bằng tổng wi wi / w .

Bạn có thể hài lòng với (1) hoặc (2) do tính đơn giản và diễn giải trực tiếp của chúng; Tôi bao gồm (3) và (4) để cho một số ý nghĩa của các tùy chọn. Để thực hiện (1), bạn có thể bắt đầu bằng cách chia lưới tất cả dữ liệu với kích thước ô nhỏ đến mức mỗi tòa nhà chiếm ô riêng của nó. (Ở khoảng 200 x 300 km, một ô có kích thước khoảng 5 m sẽ cần một mạng lưới khổng lồ 40.000 x 60.000 tế bào, nhưng chỉ khoảng một triệu trong số chúng sẽ bị chiếm giữ, do đó chỉ cần khoảng 10 MB lưu trữ đĩa Định dạng vòng cung nếu bạn cẩn thận lưu trữ các giá trị dưới dạng số nguyên.) Tổng hợp lưới này thành một ô lớn hơn bằng cách sử dụngMedianLựa chọn. (Kích thước ô của lưới tổng hợp có thể sẽ vào khoảng 100m, tạo ra một mạng lưới toàn quốc từ 2000 đến 3000 ô: đủ nhỏ để thực hiện các quy trình được mô tả dưới đây không chỉ có thể thực hiện được mà còn thực hiện nhanh chóng.)

Bạn cũng nên tổng hợp lưới chỉ số nhị phân của các tòa nhà - yêu cầu lần Sumnày - để đếm số lượng tòa nhà trên mỗi ô. Đối với các ô tổng hợp có số lượng nhỏ hơn 5, ngẫu nhiên gây nhiễu trung vị. Làm điều này với một Conhoạt động. Một lựa chọn hiệu quả, mặc dù hơi phức tạp, cho sự nhiễu loạn sẽ là thêm nhiễu phân phối bình thường vào logit của giá trị (tỷ lệ từ 0 đến 1 thay vì 0 đến 100): điều này sẽ đảm bảo kết quả vẫn nằm trong khoảng từ 0 đến 100 Bạn cũng có thể làm nhiễu một chút tất cả các ô để không ai có thể phân biệt các ô bị nhiễu với các ô không bị xáo trộn bằng cách kiểm tra các chữ số có nghĩa ít nhất.

Quy trình làm việc cho thủ tục "nhiễu loạn logistic" này, như sau, như sau. Nó phụ thuộc vào hai tham số: "sigma" là mức độ nhiễu của các ô cần nó và "epsilon" là lượng tối thiểu để làm nhiễu tất cả các ô. Cả hai đều là số không âm. Thử nghiệm trên các lớp nhỏ, bắt đầu với sigma = 0,15 và epsilon = 0,01 và thay đổi các tham số này cho đến khi kết quả đạt yêu cầu. (Đặt epsilon thành 0 sẽ loại bỏ hoàn toàn nhiễu loạn cho các ô như vậy.)

  1. Bắt đầu với một lưới [Z] các giá trị trung bình (tất cả trong phạm vi từ 0 đến 100) và một lưới khác [N] đếm số lượng tòa nhà trong mỗi ô, cả hai được tạo bởi Aggregate.

  2. Tạo lưới cho số lượng nhiễu loạn bằng cách sử dụng Conlệnh như

    Con["N" < 5, sigma, epsilon]
    
  3. Tạo ra nhiễu loạn thường phân phối bằng cách tham gia một mạng lưới các đơn vị variates bình thường (sử dụng CreateNormalRaster và nhân nó bằng lưới trước. Gọi kết quả "e", nói.

  4. Tính toán các nhật ký nhiễu loạn của các giá trị như

    [Logit] = log("z" / (100 - "z")) + "e"
    
  5. Chuyển đổi trở lại giá trị trong phạm vi 0..100:

    100 / (1 + exp(-"logit"))
    

Để minh họa, đây là một số Rmã để tạo các lưới tổng hợp mẫu nhỏ, làm nhiễu chúng và so sánh các nhiễu loạn với các giá trị ban đầu.

ncol <- 30; nrow <- 20
seed.random <- 17
x <- rpois(ncol * nrow, 5)
y <- floor(100 / (1 + exp(-(rnorm(ncol * nrow, mean = -2, sd = 1/sqrt(x))))))

sigma <- 0.15
epsilon <- 0.01

e <- rnorm(ncol*nrow, sd = ((x < 5)*sigma + (x >= 5)*epsilon))
logit <- log(y / (100 - y)) + e
y0 <- 100 / (1 + exp(-logit))

library(raster)
z <- matrix(y, ncol=ncol)
n <- matrix(x, ncol=ncol)
z0 <- matrix(y0, ncol=ncol)

par(mfrow=c(2,2))
n.r <- raster(n)
plot(n.r, main="Counts of residences [N]")

z.r <- raster(z)
plot(z.r, main="Median values [Z]")

z0.r <- raster(z0)
plot(z0.r, main="Perturbed median values")

plot(y, y0, type="n", xlab="Original medians", ylab="Perturbed medians",
     main="Perturbed vs. original medians")
points(y[x < 5], y0[x < 5], col="Red")
points(y[x >= 5], y0[x >= 5], pch=19)

Lô đất


Cảm ơn rất nhiều - một lần nữa, câu trả lời rất kỹ lưỡng. Đúng - đó là một cách tiếp cận khác cho vấn đề và câu hỏi thực sự liên quan đến vấn đề bạn đã đề cập. Giải pháp có vẻ tốt - sẽ cung cấp cho nó một shot với dữ liệu của tôi càng sớm càng tốt!
radek
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.