gpt4 book ai didi

r - 在 R 中使用 LOESS 拟合 2d 表面

转载 作者:行者123 更新时间:2023-12-04 11:56:56 24 4
gpt4 key购买 nike

我想获取嘈杂的 2d 数据并使用 LOESS 平滑来找到更平滑的 2D 表面。数据是r行c列的数据框或矩阵的形式。 'asbio' 包将为 n*n 数据绘制曲面图,我可以计算出如何使用 stats 基础包中的 'loess' 进行 1D 拟合,但我无法计算出如何进行 2D 绘图。

library(rgl)


age <- 1:100
year <- 1959:2012
z<- data.frame(matrix(array(0, length(age)*length(year)),nrow=length(age), ncol=length(year)))
rownames(z) <- age
colnames(z) <- year
distYear <- dnorm(1:length(year), 26, 10)
distAge <- dnorm(age, 50, 15)
for(theYear in year){
#for(theAge in age){
z[,theYear-year[1]+1] <- as.numeric(distYear[theYear-year[1]+1]*distAge*runif(length(age))*50000)
#}
}
z<- data.matrix(z)
z <- data.frame(z)
colnames(z) <- year

# First define the colours for the Z values.
zlim <- range(z)
zlen <- zlim[2] - zlim[1]
scale <- 20/zlen
colorlut <- terrain.colors(20,alpha=1.0) # height color lookup table
col <- colorlut[ (t(as.matrix(z))-zlim[1])*scale+1 ] # assign colors to heights for each point.


surface3d(age,year,as.matrix(z), col=col)

loess(z~age+year,data=data.frame(z))

我收到一个错误,将 data.frame 拒绝为列表,但我怀疑它不止于此。搜索信息,我只能找到一维线性描述。

任何人都可以帮忙吗?

最佳答案

搞定了....

数据框或矩阵需要转换为三列数据框。
创建上面的数据框 z 后,下面将平滑并显示它(使用 rgl)。

open3d(useFreeType=par3d("useFreeType"))
surface3d(age,year,as.matrix(z), col=col)

zz <- z
zz$Ages <- rownames(z)
zzx <- melt(zz, id.vars="Ages", value.name="Vals")

theResult <- loess(Vals~as.numeric(Ages)+as.numeric(variable),data=data.frame(zzz))
resultTable <- matrix(theResult$fitted, nrow=length(age), length(year))

open3d(useFreeType=par3d("useFreeType"))
surface3d(age,year,as.matrix(resultTable), col=col)

关于r - 在 R 中使用 LOESS 拟合 2d 表面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29946399/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com