Quiero interpolar el conjunto de datos de abajo usando la distribución lognormal en R. Como puedes ver en los datos de abajo, tengo diferentes clases de tamaño de tierra (ha) y me gustaría interpolar los datos usando las clases de tamaño de tierra estándar que usaré para todos los países.
Estas son las clases de tamaño de terreno originales
Clases de tamaño (ha)
Superficie de las explotaciones
Menos de 0,8 ha
18012
0.8 - 1.6
66155
1.6 - 2.4
80224
2.4 - 3.2
61555
3.2 - 4.0
47754
4.0 - 6.0
56234
6,0 ha y más
38257
Total de participaciones
368191
Y los tamaños estándar de las tierras que quiero interpolar sus datos utilizando los datos anteriores (superficie de las explotaciones) se dan como:
clases de tamaño (ha)
0 - 1
1 - 2
2 - 3
3 - 4
4 - 5
5 - 10
He realizado este cálculo en Excel y me gustaría crear una función en R para hacerlo.
El código siguiente es la función que estoy tratando de crear.
install.packages("assertthat")
library(assertthat)
interpolation <- function(x, x1, y1,x2, y2)
{
assert_that(is.numeric(x),
isTRUE(all(is.finite(x))),
is.scalar(x1),
is.scalar(y1),
is.scalar(x2),
is.scalar(y2),
x1< x2)
meanlog <- mean(log(y2)
SDlog <- sd(log(y2)
output <- rep(NA_real_, length(x))
output[x <= x1] <- y1
output[x >= x2] <- y2
btwpoints <- which(is.na(output))
output[btwpoints] <- stats::approx(
x = plnorm(c(x1, x2)),
y = c(y1, y2),
xoutput = plnorm(x[btwpoints]), method =
"linear")$y
return(output)
}
He conseguido establecer las cuatro coordenadas (x1,x2,y1, y2) que representan las clases de tamaño inferior y superior. Estoy atascado en la configuración de la distribución lognormal en la función.