簡體   English   中英

在R上獲得樣條曲面

[英]Obtain spline surface on R

如何生成b樣條曲面,讓我們說:

x=attitude$rating
y=attitude$complaints
z=attitude$privileges

樣條基礎上的x和y。 z是控制點集。

如果我理解你,你有x,y和z數據,你想在x和y上使用雙變量樣條插值,使用z作為控制點。 您可以使用akima包中的akima interp(...)執行此操作。

library(akima)
spline <- interp(x,y,z,linear=FALSE)
# rotatable 3D plot of points and spline surface
library(rgl)
open3d(scale=c(1/diff(range(x)),1/diff(range(y)),1/diff(range(z))))
with(spline,surface3d(x,y,z,alpha=.2))
points3d(x,y,z)
title3d(xlab="rating",ylab="complaints",zlab="privileges")
axes3d()

由於x,y和x高度相關,因此繪圖本身對您的數據集非常不感興趣。

編輯對OP評論的回應。

如果你想要一個b樣條曲面,請在遺憾的命名MBA包中試用mba.surf(...)

library(MBA)
spline <- mba.surf(data.frame(x,y,z),100,100)

library(rgl)
open3d(scale=c(1/diff(range(x)),1/diff(range(y)),1/diff(range(z))))
with(spline$xyz,surface3d(x,y,z,alpha=.2))
points3d(x,y,z)
title3d(xlab="rating",ylab="complaints",zlab="privileges")
axes3d()

 require(rms)  # Harrell's gift to the R world.

 # Better to keep the original names and do so within a dataframe.
 att <- attitude[c('rating','complaints','privileges')]
 add <- datadist(att)  # records ranges and descriptive info on data
 options(datadist="add")  # need these for the rms functions

#  rms-`ols` function (ordinary least squares) is a version of `lm`
 mdl <- ols( privileges ~ rcs(rating,4)*rcs(complaints,4) ,data=att)
# Predict is an rms function that works with rms's particular classes
 pred <- Predict(mdl, 'rating','complaints')
# bplot calls lattice functions; levelplot by default; this gives a "3d" plot
 bplot(pred, yhat~rating+complaints, lfun=wireframe)

在此輸入圖像描述

它是一個交叉的限制三次樣條模型。 如果您想要使用您喜歡的樣條函數,那么請務必嘗試一下。 我對rcs - 功能有好運。

這樣可以提供更加開放的網格,計算點數更少:

pred <- Predict(mdl, 'rating','complaints', np=25)
bplot(pred, yhat~rating+complaints, lfun=wireframe)
png()
bplot(pred, yhat~rating+complaints, lfun=wireframe)
dev.off()

在此輸入圖像描述

您可以使用jhoward所示的rgl方法。 str(pred)的頂部看起來像:

 str(pred)
Classes ‘Predict’ and 'data.frame': 625 obs. of  5 variables:
 $ rating    : num  43 44.6 46.2 47.8 49.4 ...
 $ complaints: num  45 45 45 45 45 ...
 $ yhat      : num  39.9 39.5 39.1 38.7 38.3 ...
 $ lower     : num  28 28.3 27.3 25 22 ...
 $ upper     : num  51.7 50.6 50.9 52.4 54.6 ...
snipped

library(rgl)
open3d()
with(pred, surface3d(unique(rating),unique(complaints),yhat,alpha=.2))
with(att, points3d(rating,complaints,privileges, col="red"))
title3d(xlab="rating",ylab="complaints",zlab="privileges")
axes3d()
aspect3d(x=1,z=.05)

一旦你意識到沒有關於該模型的不適當推斷的極端數據,就很好地說明了外推的危險性。 rms-package有一個perimeter函數,繪圖函數有一個perim參數,周邊對象可以傳遞給它。

在此輸入圖像描述

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM