我有一些經度和緯度的資料。我的第三個變數是電動汽車在城市中的滲透率。因此,我的資料稀疏,我不知道 f(long,lat) -> MS_Year 的映射。我有以下資料
long lat MS_Year
<dbl> <dbl> <dbl>
1 -66.0436169857389 50.3417726256247 0.0122
2 -66.1704063635085 48.168838536499 0.0115
3 -67.1376617834163 48.9202603958534 0.0136
4 -67.474931686395 48.8025438021711 0.0108
5 -67.5756670981796 48.5194066352801 0.0111
6 -67.6273066949175 48.429540936994 0.0167
我已經能夠毫無問題地繪制 3D 散點圖。
scatterplot3d(Plot_Me_Tot_2019_grouped)
[在此處輸入圖片描述][1]
但是,我花了一整天的時間試圖了解如何制作表面。據我了解,這特別難,因為我需要使用非引數估計器來顯示拓撲的復雜程度。(這個想法是為了證明非引數回歸的合理性,我剛剛了解到但從未使用過;它可能解釋了我的全部掙扎)。
因此,我需要創建一個具有輸出 MS_Year 的多項式函式 f(long,lat)。
我嘗試按如下方式應用它:
library(predict3d)
library(rgl)
fit5=lm(MS_Year ~polym(long, lat,degree=5, raw=T),data=Plot_Me_Tot_2019_grouped)
predict3d(fit5,radius=0.05)
我這樣做了,導致它結合了這個[多項式回歸][2],到這個[3D繪圖][3]。這是一個徹底的失敗。
有人遇到過類似的問題嗎?
我覺得我的問題是創建鏈接函式又名 f(long,lat),然后使用 expand.grid(long,lang) 創建一個曲面并繪制它。
人們應該明白,我對從 DF 到 3D 表面所需的矩陣格式的轉換沒有很好的理解。
非常感謝您抽出寶貴的時間 [1] : 
這在點之間進行了雙線性插值;它最終變得非常粗糙。您可能更喜歡將某種表面擬合到這些點上,而不是對它們進行插值。這適合區域平滑:
library(mgcv)
#> Loading required package: nlme
#> This is mgcv 1.8-38. For overview type 'help("mgcv-package")'.
fit <- gam(MS_Year ~ s(long, lat), data = df)
xo <- sort(df$long)
yo <- sort(df$lat)
grid <- expand.grid(long = xo, lat = yo)
pred <- predict(fit, newdata = grid)
plot3d(df, type = "s", size = 0.5)
persp3d(xo, yo, matrix(pred, 100,100), col = "gray", add = TRUE)
由
long這是同一個資料集,但更平滑的人設法看到它在和中或多或少是線性的lat。您的資料可能不會以如此簡單的形狀結束。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/420153.html
標籤:
下一篇:如何正確繪制sf物件
