ajustar escala e interpolação

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.

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@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@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.

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@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@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@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.

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@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@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@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@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.

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@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@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@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@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@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.

On 10/09/2017 20:03, Heloíse Pavanato via R-br wrote:
Vamos ver como soluciono este problema. Não tentou usar nearest.pixel() do pacote 'spatstat' para 'coletar' o valor no pixel mais próximo? Se quiser usar interpolações, como outros colegas sugeriram, sugiro o interpp() do pacote 'akima'. Com isso você pode interpolar do grid de menor resolução para as coordenadas do grid de maior resolucao ou de ambas para um grid comum. Usar nearest.pixel() seria um caso particular. Se fosse considerado um modelo estatístico, um ponto a se pensar nesse tipo de problema que é: O valor no pixel representa a média sobre o pixel ou é o valor do processo no centro do pixel. Elias

Só gostaria de acrescentar que vento é um grandeza vetorial. Se for interpolar (independente do método) para os dados de uma maior para menor resolução (upscaling) considere a velocidade e a direção do vento (ou as componentes zonal, u, e meridional, v) dependendo de como os dados do ASCAT são fornecidos. O melhor é fazer a interpolação de u e v separadamente e então determinar a intensidade (módulo) do vento. Embora a média aritmética da intensidade possa dar um valor != 0, as diferentes direções do vento do grid menor, dentro de um grid maior, podem se cancelar. Att. 2017-09-11 9:58 GMT-03:00 Elias T. Krainski via R-br < r-br@listas.c3sl.ufpr.br>:
On 10/09/2017 20:03, Heloíse Pavanato via R-br wrote:
Vamos ver como soluciono este problema.
Não tentou usar nearest.pixel() do pacote 'spatstat' para 'coletar' o valor no pixel mais próximo? Se quiser usar interpolações, como outros colegas sugeriram, sugiro o interpp() do pacote 'akima'. Com isso você pode interpolar do grid de menor resolução para as coordenadas do grid de maior resolucao ou de ambas para um grid comum. Usar nearest.pixel() seria um caso particular. Se fosse considerado um modelo estatístico, um ponto a se pensar nesse tipo de problema que é: O valor no pixel representa a média sobre o pixel ou é o valor do processo no centro do pixel. Elias _______________________________________________ R-br mailing list R-br@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 fornea cdigo mnimo reproduzvel.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria - UFSM ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 ## www.ufsm.br/meteorologia ###############################################################

+1 2017-09-11 10:19 GMT-03:00 Jônatan via R-br <r-br@listas.c3sl.ufpr.br>:
Só gostaria de acrescentar que vento é um grandeza vetorial. Se for interpolar (independente do método) para os dados de uma maior para menor resolução (upscaling) considere a velocidade e a direção do vento (ou as componentes zonal, u, e meridional, v) dependendo de como os dados do ASCAT são fornecidos. O melhor é fazer a interpolação de u e v separadamente e então determinar a intensidade (módulo) do vento. Embora a média aritmética da intensidade possa dar um valor != 0, as diferentes direções do vento do grid menor, dentro de um grid maior, podem se cancelar. Att.
2017-09-11 9:58 GMT-03:00 Elias T. Krainski via R-br < r-br@listas.c3sl.ufpr.br>:
On 10/09/2017 20:03, Heloíse Pavanato via R-br wrote:
Vamos ver como soluciono este problema.
Não tentou usar nearest.pixel() do pacote 'spatstat' para 'coletar' o valor no pixel mais próximo? Se quiser usar interpolações, como outros colegas sugeriram, sugiro o interpp() do pacote 'akima'. Com isso você pode interpolar do grid de menor resolução para as coordenadas do grid de maior resolucao ou de ambas para um grid comum. Usar nearest.pixel() seria um caso particular. Se fosse considerado um modelo estatístico, um ponto a se pensar nesse tipo de problema que é: O valor no pixel representa a média sobre o pixel ou é o valor do processo no centro do pixel. Elias _______________________________________________ R-br mailing list R-br@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 fornea cdigo mnimo reproduzvel.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria - UFSM ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 ## www.ufsm.br/meteorologia ###############################################################
_______________________________________________ R-br mailing list R-br@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.

Olá, Meu muito obrigada a todos que contribuíram para solucionar esta questão do grid. Elias, obrigada! Eu não achei a função nearest.pixel() no spatstat. Seria nearest.raster.point()? Tentei antes usar a interpp() mas a função não aceita NAs no data.frame. Jonatan, obrigada pela importante consideração! As saídas do Ascat me dão matrizes velocidade e direção, mas por algumas questões práticas eu só tinha interesse na velocidade modular. Mas talvez esta outra abordagem seja importante em algum momento. Cesar, no fim acabei indo um pouco pela sua sugestão, mas implementando ela de acordo com a nearest.raster.point() que o Elias sugeriu. Então acabei usando uma interpolação baseada na vizinhança. Usei os valores mais próximos para preencher as lacunas, com excessão de grandes lacunas (maiores que 3 ou 2 valores consecutivos dependendo do espaçamento entre coordenadas). O processo foi bem manual, mas ao menos deu certo. Os levelplots do vento original e do que obtive na nova escala são praticamente iguais. Não vou postar a solução toda aqui pois é muito grande e super específica, mas basicamente usei
test.2 <- data.frame(ascat, freq = c(3, 2)) test.2.expand <- test.2[rep(row.names(test.2), test.2$freq), ]
e assim fui expandindo o grid primeiro para latitude, depois para longitude. Mais uma vez, obrigada! Abraço, Heloise. 2017-09-12 6:24 GMT+12:00 Cesar Rabak via R-br <r-br@listas.c3sl.ufpr.br>:
+1
2017-09-11 10:19 GMT-03:00 Jônatan via R-br <r-br@listas.c3sl.ufpr.br>:
Só gostaria de acrescentar que vento é um grandeza vetorial. Se for interpolar (independente do método) para os dados de uma maior para menor resolução (upscaling) considere a velocidade e a direção do vento (ou as componentes zonal, u, e meridional, v) dependendo de como os dados do ASCAT são fornecidos. O melhor é fazer a interpolação de u e v separadamente e então determinar a intensidade (módulo) do vento. Embora a média aritmética da intensidade possa dar um valor != 0, as diferentes direções do vento do grid menor, dentro de um grid maior, podem se cancelar. Att.
2017-09-11 9:58 GMT-03:00 Elias T. Krainski via R-br < r-br@listas.c3sl.ufpr.br>:
On 10/09/2017 20:03, Heloíse Pavanato via R-br wrote:
Vamos ver como soluciono este problema.
Não tentou usar nearest.pixel() do pacote 'spatstat' para 'coletar' o valor no pixel mais próximo? Se quiser usar interpolações, como outros colegas sugeriram, sugiro o interpp() do pacote 'akima'. Com isso você pode interpolar do grid de menor resolução para as coordenadas do grid de maior resolucao ou de ambas para um grid comum. Usar nearest.pixel() seria um caso particular. Se fosse considerado um modelo estatístico, um ponto a se pensar nesse tipo de problema que é: O valor no pixel representa a média sobre o pixel ou é o valor do processo no centro do pixel. Elias _______________________________________________ R-br mailing list R-br@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 fornea cdigo mnimo reproduzvel.
-- ############################################################### ## Jônatan Dupont Tatsch ## Professor do Departamento de Física ## Centro de Ciências Exatas e Naturais (CCNE) ## Universidade Federal de Santa Maria - UFSM ## Faixa de Camobi, Prédio 13 - Campus UFSM - Santa Maria, RS, Brasil - 97105-900 ## Telefone: +55(55)33012083 <+55%2055%203301-2083> ## www.ufsm.br/meteorologia ###############################################################
_______________________________________________ R-br mailing list R-br@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.
_______________________________________________ R-br mailing list R-br@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.

On 18/09/2017 20:01, Heloíse Pavanato wrote:
não achei a função nearest.pixel() no spatstat. Seria nearest.raster.point()? Veja esse exemplo:
library(spatstat) ### simula uma imagem qualquer x0 <- seq(0, 7, 0.1) y0 <- seq(0, 10, 0.1) grid.z <- im(t(outer(x0, y0, function(x,y) cos(x) - sin(y-2))), x0, y0) ### visualiza plot(grid.z, x0, y0) contour(x0, y0, t(grid.z$v), add=TRUE) ### simula alguns pontos x.loc <- runif(5, 0, 7) y.loc <- runif(5, 0, 10) ### extrai valores dos pixels proximos id.r.c <- nearest.pixel(x.loc, y.loc, grid.z) str(id.r.c) ### extrai os valores z <- grid.z[Reduce('cbind', id.r.c)] str(z) ###junta cbind(x.loc, y.loc, z) ### adiciona como texto text(x.loc, y.loc, format(z, dig=2))

Oi Elias, Obrigada pelo exemplo!! Muito útil. Na interpp() eu tenho NAs em z (interpp(x, y, z)), que são os valores de vento que deveriam ser gerados pela interpolação, e não deu certo. Dai fui conferir na descrição da função e diz que missing values não são aceitos. Abraço, Heloise. 2017-09-19 12:11 GMT+12:00 Elias T. Krainski via R-br < r-br@listas.c3sl.ufpr.br>:
On 18/09/2017 20:01, Heloíse Pavanato wrote:
Tentei antes usar a interpp() mas a função não aceita NAs no data.frame
NAs nas coordenadas não faz sentido em interpolação. Na resposta não bastaria colocar como target na interpolação?
Elias
_______________________________________________ R-br mailing list R-br@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.

Tudo o que você precisa fazer é separar os dados em dois conjuntos de dados, onde há informação e onde não há. Use então os argumentos x, y, z xo e yo, onde os três primeiros são coordenadas e resposta sem NA e os dois últimos (xo e yo) são coordenadas para as quais será interpolado. Att. Elias On 18/09/2017 21:28, Heloíse Pavanato wrote:
Oi Elias,
Obrigada pelo exemplo!! Muito útil.
Nainterpp() eu tenho NAs em z (interpp(x, y, z)), que são os valores de vento que deveriam ser gerados pela interpolação, e não deu certo. Dai fui conferir na descrição da função e diz que missing values não são aceitos.
Abraço, Heloise.
2017-09-19 12:11 GMT+12:00 Elias T. Krainski via R-br <r-br@listas.c3sl.ufpr.br <mailto:r-br@listas.c3sl.ufpr.br>>:
On 18/09/2017 20:01, Heloíse Pavanato wrote:
Tentei antes usar ainterpp() mas a função não aceita NAs no data.frame
NAs nas coordenadas não faz sentido em interpolação. Na resposta não bastaria colocar como target na interpolação?
Elias
_______________________________________________ R-br mailing list R-br@listas.c3sl.ufpr.br <mailto:R-br@listas.c3sl.ufpr.br> https://listas.inf.ufpr.br/cgi-bin/mailman/listinfo/r-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 <http://www.leg.ufpr.br/r-br-guia>) e forneça código mínimo reproduzível.

Eu usaria a função nearest.pixel() do pacote 'spatstat'. Talvez haja solucao mais elegante. Elias

Existe regra de formação? (Acrefito que não). Portanto, o mais próximo que você irá chegar é a probabilidade do proximo ser 1 (ou 0), que será dado por p1 <- mean(seq_0s1s) e p0 <- 1 - p1 Em 7 de set de 2017 4:10 PM, "andrebvs--- via R-br" < r-br@listas.c3sl.ufpr.br> escreveu: Olá colegas, como posso formular uma rotina no R para saber (estimar) qual seria o próximo valor X no resultado da sequência abaixo? seq_0s1s <- sample(c(rep(0,20),rep(1,80)),50) resultado: 0 0 0 0 1 1 1 0 1 0 0 1 ... 1 1 1 0 1 0 1 0 1 1 1 0 0 0 0 1 0 X desde já grato! *Att. André* _______________________________________________ R-br mailing list R-br@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.

Leonard, Como você é um habitual participante da lista, vou, de plano, descartar a hipótese que essa questão seja um exercício ou "lição de casa", malgrado ela tem todos os aspectos de uma 🤔! Essa questão diz respeito de detectar padrões em sequências e a resposta está nesse domínio do conhecimento. Você precisa formular uma rotina para estimar que tipo de evento e qual seria a "precisão" aceitável? -- Cesar Rabak 2017-09-08 13:12 GMT-03:00 Leonard Assis via R-br <r-br@listas.c3sl.ufpr.br> :
Existe regra de formação? (Acrefito que não). Portanto, o mais próximo que você irá chegar é a probabilidade do proximo ser 1 (ou 0), que será dado por p1 <- mean(seq_0s1s) e p0 <- 1 - p1
Em 7 de set de 2017 4:10 PM, "andrebvs--- via R-br" < r-br@listas.c3sl.ufpr.br> escreveu:
Olá colegas, como posso formular uma rotina no R para saber (estimar) qual seria o próximo valor X no resultado da sequência abaixo?
seq_0s1s <- sample(c(rep(0,20),rep(1,80)),50)
resultado:
0 0 0 0 1 1 1 0 1 0 0 1 ... 1 1 1 0 1 0 1 0 1 1 1 0 0 0 0 1 0 X
desde já grato!
*Att. André*
_______________________________________________ R-br mailing list R-br@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.
_______________________________________________ R-br mailing list R-br@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.

On 09/09/2017 19:11, Cesar Rabak via R-br wrote:
próximo valor X no resultado da sequência abaixo? Há os processos estocásticos e modelos estatísticos para modelar dados binários no tempo, que podem ser usados para predição 1 passo à frente. Servem? Elias

Existem diferentes abordagens. Como conheço menos de 1% dos mais de 11 mil pacotes do R pesquisei no google por pacotes em algumas das abordagens que pensei para o problema. Para cadeias de markov, encontrei vários pacotes. Acho que algum deles deve servir. HMM, modelos Markovianos escondidos, há mais de um pacote disso também. Modelos marginais, há mais de um pacote também. Modelos condicionais/hierárquivos, há vários pacotes também. Não sei se você tem preferência filosófica por uma dessas abordagens ou qualquer uma está OK. Pode ser que haja alguma que eu não ouvi falar ainda. Elias On 12/09/2017 16:56, andrebvs@bol.com.br wrote:
Interessante sua sugestão, mas, como seria essa modelagem de dados binários no tempo, com uso do R?
------------------------------------------------------------------------
*De: *"Elias T. Krainski via R-br" <r-br@listas.c3sl.ufpr.br> *Enviada: *2017/09/11 11:30:23 *Para: *r-br@listas.c3sl.ufpr.br *Assunto: * Re: [R-br] Estimar último valor na sequência de 0s e 1s...
On 09/09/2017 19:11, Cesar Rabak via R-br wrote:
próximo valor X no resultado da sequência abaixo? Há os processos estocásticos e modelos estatísticos para modelar dados binários no tempo, que podem ser usados para predição 1 passo à frente. Servem? Elias
R-br mailing list R-br@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 fornea cdigo mnimo reproduzvel.
participantes (6)
-
andrebvs@bol.com.br
-
Cesar Rabak
-
Elias T. Krainski
-
Heloíse Pavanato
-
Jônatan
-
Leonard Assis