[R-br] ajustar escala e interpolação
Heloíse Pavanato
helopavanato em gmail.com
Domingo Setembro 10 20:03:52 -03 2017
Olá Cesar,
Muito obrigada pela sua sugestão. Vamos ver como soluciono este problema.
Abraço,
Heloise.
2017-09-10 10:05 GMT+12:00 Cesar Rabak <cesar.rabak em gmail.com>:
> Heloíse,
>
> Você se fez entender e de fato você tem duas particularidades: seu grid e
> coordenadas de vento além de terem granularidades diferentes têm um ligeiro
> *offset* que se mostra como você descreve.
>
> Se as coordenadas do vento (que têm a maior granularidade) fossem
> arrendondadas para décimo de grau elas teriam o seguinte "passo":
>
> Pegando o seu exemplo:
>
> > round(vento[1:5,1],1)
> [1] -23.9 -23.6 -23.4 -23.1 -22.9
>
> Note que as frações seriam apenas quatro e com espaçamentos "não
> equidistantes", por consequência do arredondamento eles se alternam em 0,3
> e 0,2 grau...
>
> Se com essas "coincidências" no grid você conseguir fazer sua análise, é o
> "automatismo" mais simples que se pode pensar...
>
> Caso contrário, você precisará escrever o script para o interpolador
> bivariado, levando em conta que mesmo o *thin plate splines* funcionará
> muito mais como uma régua flexível ("japonesa", ou como a antiga "curva
> francesa") que tentará heurística e localmente adaptar-se aos dados sem
> levar em conta a física do vento, por isso uma análise dos resultados seria
> necessária, especialmente por que, imagino, as informações de vento trazem
> também a direção de onde sopram. . .
>
> HTH
> --
> Cesar Rabak
>
>
> 2017-09-06 19:19 GMT-03:00 Heloíse Pavanato <helopavanato em gmail.com>:
>
>> Olá Cesar e Elias,
>>
>> Obrigada pela atenção. Vou dar uma olhada no pacote spatstat.
>>
>> Cesar, respondo em linha:
>>
>> As coordenadas do grid e vento múltiplas de 0,5 grau deveriam "se
>> corresponder" ou não?
>>
>> Sim, mas não como os dados estão agora. Por exemplo, entre as latitudes
>> de vento de -10.875 e -10.625 a correspondência no grid seria -10.8 e
>> -10.7. Entre -10.625 e -10.375 as correspondências seriam -10.6, -10.5 e
>> -10.4.
>> Não sei como automatizar estre processo, pois veja que para as latitudes
>> de vento que terminam com "75" eu tenho duas correspondências e para as que
>> terminam em "25" eu tenho três. Me fiz entender?
>>
>> Aqui vai um dput() dos dados para você ter uma noção:
>>
>>
>> dput(vento[1:30, ])
>>
>>
>> structure(list(lat = c(-23.875, -23.625, -23.375, -23.125, -22.875,
>>
>> -22.625, -22.375, -22.125, -21.875, -21.625, -21.375, -21.125,
>>
>> -20.875, -20.625, -20.375, -20.125, -19.875, -19.625, -19.375,
>>
>> -19.125, -18.875, -18.625, -18.375, -18.125, -17.875, -17.625,
>>
>> -17.375, -17.125, -16.875, -16.625), lon = c(-42.875, -42.875,
>>
>> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875,
>>
>> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875,
>>
>> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875,
>>
>> -42.875, -42.875, -42.875, -42.875, -42.875, -42.875, -42.875
>>
>> ), media = c(6.16, 5.99714285714286, 5.91857142857143, 5.82,
>>
>> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA, NA,
>>
>> NA, NA, NA, NA, NA, NA, NA, NA, NA, NA)), .Names = c("lat", "lon",
>>
>> "media"), row.names = c(NA, 30L), class = "data.frame")
>>
>>
>> dput(grid[1:30, ])
>>
>>
>> structure(list(lat = c(-10.4, -10.4, -10.5, -10.5, -10.6, -10.6,
>>
>> -10.6, -10.5, -10.5, -10.6, -10.7, -10.7, -10.7, -10.7, -10.8,
>>
>> -10.8, -10.8, -10.9, -10.9, -10.9, -10.8, -10.8, -10.9, -11,
>>
>> -11, -11, -10.8, -10.9, -10.9, -11), lon = c(-36.4, -36.3, -36.5,
>>
>> -36.3, -36.5, -36.4, -36.3, -36.6, -36.4, -36.6, -36.6, -36.5,
>>
>> -36.4, -36.3, -36.6, -36.5, -36.4, -36.6, -36.5, -36.4, -37,
>>
>> -36.9, -36.9, -37.1, -37, -36.9, -36.8, -37, -36.8, -36.8)), .Names =
>> c("lat",
>>
>> "lon"), row.names = c(NA, 30L), class = "data.frame")
>>
>>
>> A questão de você interpolar os valores de vento tem menos a ver com o R
>> em si e mais com o domínio do problema que você trabalha: qual é a forma de
>> interpolar o valor do vento para uma coordenada intermediária entre pontos
>> que você tenha as medidas?
>>
>> Talvez seja mais apropriado trabalhar com "a quase metade dos dados" do
>> que utilizar o dobro de pontos sendo que a outra metade será resultado de
>> um processo de cálculo e portanto não deveria modificar sua análise dos
>> dados.
>>
>> Também acho que a interpolação é o menos importante para fins de
>> análises, e posso manter NAs para isso. Porém, tenho que gerar um
>> levelplot() desta e de outras variáveis, por isso gostaria de usar a
>> interpolação para este fim. Pensei em usar thin plate splines ou qualquer
>> outro interpolador bivariado em termos de latitude e longitude.
>>
>> Obrigada pela ajuda.
>>
>> Saudações,
>> Heloise
>>
>> 2017-09-07 0:08 GMT+12:00 Cesar Rabak <cesar.rabak em gmail.com>:
>>
>>> Heloise,
>>>
>>> Esta observação me deixa confuso:
>>>
>>> #Quando faço um merge() dos dois dataframes, obviamente meus valores de
>>>> #vento$media aparecem como NA pois não há nenhuma correspondência
>>>> entre as #coordenadas do grid e de vento.
>>>
>>>
>>> As coordenadas do grid e vento múltiplas de 0,5 grau deveriam "se
>>> corresponder" ou não?
>>>
>>> A questão de você interpolar os valores de vento tem menos a ver com o R
>>> em si e mais com o domínio do problema que você trabalha: qual é a forma de
>>> interpolar o valor do vento para uma coordenada intermediária entre pontos
>>> que você tenha as medidas?
>>>
>>> Talvez seja mais apropriado trabalhar com "a quase metade dos dados" do
>>> que utilizar o dobro de pontos sendo que a outra metade será resultado de
>>> um processo de cálculo e portanto não deveria modificar sua análise dos
>>> dados.
>>>
>>> HTH
>>> --
>>> Cesar Rabak
>>>
>>>
>>> 2017-09-06 4:47 GMT-03:00 Heloíse Pavanato via R-br <
>>> r-br em listas.c3sl.ufpr.br>:
>>>
>>>> Colegas do R-br,
>>>>
>>>>
>>>>
>>>> Tenho a seguinte questão:
>>>>
>>>>
>>>>
>>>> Estou trabalhando com um grid de 0.1 x 0.1 grau de latitude e longitude
>>>> onde quero inserir a variável vento. No entanto a resolução do vento é
>>>> de 0.25 x 0.25 graus.
>>>>
>>>> Os dados estão armazenados aqui:
>>>>
>>>>
>>>> http://www.datafilehost.com/d/693635d4
>>>>
>>>> http://www.datafilehost.com/d/ee24730c
>>>>
>>>>
>>>> vento <- read.csv('ascat.data.csv', header = TRUE)
>>>>
>>>> str(vento)
>>>>
>>>> grid <- read.csv('grid.data.csv', header = TRUE)
>>>>
>>>> str(grid)
>>>>
>>>>
>>>> #Quando faço um merge() dos dois dataframes, obviamente meus valores
>>>> de #vento$media aparecem como NA pois não há nenhuma correspondência
>>>> entre as #coordenadas do grid e de vento.
>>>>
>>>>
>>>> dmerge <- merge(grid, vento, by = c('lon', 'lat'), all.x = TRUE)
>>>>
>>>>
>>>> Porém, eu gostaria de obter valores de vento, por exemplo, entre
>>>> latitudes de -22.625 e -22.375 na mesma escala do grid: -22.6, -22.5,
>>>> -22.4, etc. E o mesmo para longitude.
>>>>
>>>>
>>>> Tentei utilizar a scales::rescale(), mas consegui mudar apenas os
>>>> mínimos e máximos das coordenadas:
>>>>
>>>>
>>>> #install.packages('scales', dependencies = TRUE)
>>>>
>>>> library(scales)
>>>>
>>>>
>>>> vento$lon.r <- rescale(vento$lon, to = range(grid$lon))
>>>> vento$lon.r
>>>>
>>>>
>>>> vento$lat.r <- rescale(vento$lat, to = range(grid$lat))
>>>> vento$lat.r
>>>>
>>>>
>>>> Então, creio que eu tenho dois problemas: o primeiro é obter as
>>>> coordenadas de vento na mesma escala que as do grid; segundo é interpolar
>>>> vento$media para substituir os NAs, que correspondem a quase metade do
>>>> total de valores.
>>>>
>>>>
>>>> Agradeço se algum colega tiver alguma dica.
>>>>
>>>>
>>>> Obrigada,
>>>>
>>>> Heloise.
>>>>
>>>> _______________________________________________
>>>> R-br mailing list
>>>> R-br em listas.c3sl.ufpr.br
>>>> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-br
>>>> Leia o guia de postagem (http://www.leg.ufpr.br/r-br-guia) e forneça
>>>> código mínimo reproduzível.
>>>>
>>>
>>>
>>
>
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://listas.inf.ufpr.br/pipermail/r-br/attachments/20170911/1376d52a/attachment.html>
Mais detalhes sobre a lista de discussão R-br