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.
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 .
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.
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ư R
hoặc Mathicala cho công việc đó.)
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ụngMedian
Lự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 Sum
nà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 Con
hoạ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.)
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
.
Tạo lưới cho số lượng nhiễu loạn bằng cách sử dụng Con
lệnh như
Con["N" < 5, sigma, epsilon]
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.
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"
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ố R
mã để 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)