2015-04-29 6 views
3

Я хочу взять шумные 2d данные и использовать LESS сглаживание, чтобы найти более гладкую 2D-поверхность. Данные представляют собой форму кадра данных или матрицы из r строк и c столбцов. Пакет 'asbio' будет обрабатывать поверхностные графики для n * n-данных, и я могу разобраться, как сделать 1D-совместимость с «лесс» из базового пакета статистики, но я не могу разобраться, как сделать 2D-график.fit 2d поверхность, использующая LOESS в R

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 как список, но я подозреваю, что есть больше, чем это. При поиске информации я могу найти только одномерные линейные описания.

Может ли кто-нибудь помочь?

ответ

3

Работали это ....

Фрейм данных или матрица должна быть преобразована в кадр данных трех столбцов. После создания кадра данных 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) 
+0

Я думаю, что это очень полезный вопрос и полезный ответ. Я думаю, было бы еще лучше, если бы вы проиллюстрировали метод 'прогноза' для лёссовых объектов. Согласитесь, что довольно сложно найти 2d-примеры лессовых приятелей, и многие люди не знают об этой способности. –

Смежные вопросы