Editar
He encontrado un documento que describe exactamente el procedimiento que necesito. La única diferencia es que el documento interpola datos medios mensuales a diarios, al tiempo que conserva los medios mensuales. Tengo problemas para implementar el enfoque R
. Cualquier pista es apreciada.
Original
Para cada semana, tengo los siguientes datos de conteo (un valor por semana):
- Número de consultas médicas.
- Número de casos de influenza.
Mi objetivo es obtener datos diarios por interpolación (pensé en splines lineales o truncadas). Lo importante es que quiero conservar la media semanal, es decir, la media de los datos interpolados diarios debería ser igual al valor registrado de esta semana. Además, la interpolación debe ser suave. Un problema que podría surgir es que cierta semana tiene menos de 7 días (por ejemplo, al comienzo o al final de un año).
Le agradecería consejos sobre este asunto.
Muchas gracias.
Aquí hay un conjunto de datos de muestra para el año 1995 ( actualizado ):
structure(list(daily.ts = structure(c(9131, 9132, 9133, 9134,
9135, 9136, 9137, 9138, 9139, 9140, 9141, 9142, 9143, 9144, 9145,
9146, 9147, 9148, 9149, 9150, 9151, 9152, 9153, 9154, 9155, 9156,
9157, 9158, 9159, 9160, 9161, 9162, 9163, 9164, 9165, 9166, 9167,
9168, 9169, 9170, 9171, 9172, 9173, 9174, 9175, 9176, 9177, 9178,
9179, 9180, 9181, 9182, 9183, 9184, 9185, 9186, 9187, 9188, 9189,
9190, 9191, 9192, 9193, 9194, 9195, 9196, 9197, 9198, 9199, 9200,
9201, 9202, 9203, 9204, 9205, 9206, 9207, 9208, 9209, 9210, 9211,
9212, 9213, 9214, 9215, 9216, 9217, 9218, 9219, 9220, 9221, 9222,
9223, 9224, 9225, 9226, 9227, 9228, 9229, 9230, 9231, 9232, 9233,
9234, 9235, 9236, 9237, 9238, 9239, 9240, 9241, 9242, 9243, 9244,
9245, 9246, 9247, 9248, 9249, 9250, 9251, 9252, 9253, 9254, 9255,
9256, 9257, 9258, 9259, 9260, 9261, 9262, 9263, 9264, 9265, 9266,
9267, 9268, 9269, 9270, 9271, 9272, 9273, 9274, 9275, 9276, 9277,
9278, 9279, 9280, 9281, 9282, 9283, 9284, 9285, 9286, 9287, 9288,
9289, 9290, 9291, 9292, 9293, 9294, 9295, 9296, 9297, 9298, 9299,
9300, 9301, 9302, 9303, 9304, 9305, 9306, 9307, 9308, 9309, 9310,
9311, 9312, 9313, 9314, 9315, 9316, 9317, 9318, 9319, 9320, 9321,
9322, 9323, 9324, 9325, 9326, 9327, 9328, 9329, 9330, 9331, 9332,
9333, 9334, 9335, 9336, 9337, 9338, 9339, 9340, 9341, 9342, 9343,
9344, 9345, 9346, 9347, 9348, 9349, 9350, 9351, 9352, 9353, 9354,
9355, 9356, 9357, 9358, 9359, 9360, 9361, 9362, 9363, 9364, 9365,
9366, 9367, 9368, 9369, 9370, 9371, 9372, 9373, 9374, 9375, 9376,
9377, 9378, 9379, 9380, 9381, 9382, 9383, 9384, 9385, 9386, 9387,
9388, 9389, 9390, 9391, 9392, 9393, 9394, 9395, 9396, 9397, 9398,
9399, 9400, 9401, 9402, 9403, 9404, 9405, 9406, 9407, 9408, 9409,
9410, 9411, 9412, 9413, 9414, 9415, 9416, 9417, 9418, 9419, 9420,
9421, 9422, 9423, 9424, 9425, 9426, 9427, 9428, 9429, 9430, 9431,
9432, 9433, 9434, 9435, 9436, 9437, 9438, 9439, 9440, 9441, 9442,
9443, 9444, 9445, 9446, 9447, 9448, 9449, 9450, 9451, 9452, 9453,
9454, 9455, 9456, 9457, 9458, 9459, 9460, 9461, 9462, 9463, 9464,
9465, 9466, 9467, 9468, 9469, 9470, 9471, 9472, 9473, 9474, 9475,
9476, 9477, 9478, 9479, 9480, 9481, 9482, 9483, 9484, 9485, 9486,
9487, 9488, 9489, 9490, 9491, 9492, 9493, 9494, 9495), class = "Date"),
wdayno = c(0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L,
5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L,
6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L,
0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L,
1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L,
2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L,
3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L,
4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L,
5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L,
6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L,
0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L,
1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L,
2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L,
3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L,
4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L,
5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L,
6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L,
0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L,
1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L,
2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L,
3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L,
4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L,
5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L,
6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L, 1L, 2L, 3L, 4L, 5L, 6L,
0L, 1L, 2L, 3L, 4L, 5L, 6L, 0L), month = c(1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
3, 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,
8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11,
11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12,
12, 12, 12, 12), year = c(1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995,
1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995, 1995), yearday = 0:364,
no.influ.cases = c(NA, NA, NA, 168L, NA, NA, NA, NA, NA,
NA, 199L, NA, NA, NA, NA, NA, NA, 214L, NA, NA, NA, NA, NA,
NA, 230L, NA, NA, NA, NA, NA, NA, 267L, NA, NA, NA, NA, NA,
NA, 373L, NA, NA, NA, NA, NA, NA, 387L, NA, NA, NA, NA, NA,
NA, 443L, NA, NA, NA, NA, NA, NA, 579L, NA, NA, NA, NA, NA,
NA, 821L, NA, NA, NA, NA, NA, NA, 1229L, NA, NA, NA, NA,
NA, NA, 1014L, NA, NA, NA, NA, NA, NA, 831L, NA, NA, NA,
NA, NA, NA, 648L, NA, NA, NA, NA, NA, NA, 257L, NA, NA, NA,
NA, NA, NA, 203L, NA, NA, NA, NA, NA, NA, 137L, NA, NA, NA,
NA, NA, NA, 78L, NA, NA, NA, NA, NA, NA, 82L, NA, NA, NA,
NA, NA, NA, 69L, NA, NA, NA, NA, NA, NA, 45L, NA, NA, NA,
NA, NA, NA, 51L, NA, NA, NA, NA, NA, NA, 45L, NA, NA, NA,
NA, NA, NA, 63L, NA, NA, NA, NA, NA, NA, 55L, NA, NA, NA,
NA, NA, NA, 54L, NA, NA, NA, NA, NA, NA, 52L, NA, NA, NA,
NA, NA, NA, 27L, NA, NA, NA, NA, NA, NA, 24L, NA, NA, NA,
NA, NA, NA, 12L, NA, NA, NA, NA, NA, NA, 10L, NA, NA, NA,
NA, NA, NA, 22L, NA, NA, NA, NA, NA, NA, 42L, NA, NA, NA,
NA, NA, NA, 32L, NA, NA, NA, NA, NA, NA, 52L, NA, NA, NA,
NA, NA, NA, 82L, NA, NA, NA, NA, NA, NA, 95L, NA, NA, NA,
NA, NA, NA, 91L, NA, NA, NA, NA, NA, NA, 104L, NA, NA, NA,
NA, NA, NA, 143L, NA, NA, NA, NA, NA, NA, 114L, NA, NA, NA,
NA, NA, NA, 100L, NA, NA, NA, NA, NA, NA, 83L, NA, NA, NA,
NA, NA, NA, 113L, NA, NA, NA, NA, NA, NA, 145L, NA, NA, NA,
NA, NA, NA, 175L, NA, NA, NA, NA, NA, NA, 222L, NA, NA, NA,
NA, NA, NA, 258L, NA, NA, NA, NA, NA, NA, 384L, NA, NA, NA,
NA, NA, NA, 755L, NA, NA, NA, NA, NA, NA, 976L, NA, NA, NA,
NA, NA, NA, 879L, NA, NA, NA, NA), no.consultations = c(NA,
NA, NA, 15093L, NA, NA, NA, NA, NA, NA, 20336L, NA, NA, NA,
NA, NA, NA, 20777L, NA, NA, NA, NA, NA, NA, 21108L, NA, NA,
NA, NA, NA, NA, 20967L, NA, NA, NA, NA, NA, NA, 20753L, NA,
NA, NA, NA, NA, NA, 18782L, NA, NA, NA, NA, NA, NA, 19778L,
NA, NA, NA, NA, NA, NA, 19223L, NA, NA, NA, NA, NA, NA, 21188L,
NA, NA, NA, NA, NA, NA, 22172L, NA, NA, NA, NA, NA, NA, 21965L,
NA, NA, NA, NA, NA, NA, 21768L, NA, NA, NA, NA, NA, NA, 21277L,
NA, NA, NA, NA, NA, NA, 16383L, NA, NA, NA, NA, NA, NA, 15337L,
NA, NA, NA, NA, NA, NA, 19179L, NA, NA, NA, NA, NA, NA, 18705L,
NA, NA, NA, NA, NA, NA, 19623L, NA, NA, NA, NA, NA, NA, 19363L,
NA, NA, NA, NA, NA, NA, 16257L, NA, NA, NA, NA, NA, NA, 19219L,
NA, NA, NA, NA, NA, NA, 17048L, NA, NA, NA, NA, NA, NA, 19231L,
NA, NA, NA, NA, NA, NA, 20023L, NA, NA, NA, NA, NA, NA, 19331L,
NA, NA, NA, NA, NA, NA, 18995L, NA, NA, NA, NA, NA, NA, 16571L,
NA, NA, NA, NA, NA, NA, 15010L, NA, NA, NA, NA, NA, NA, 13714L,
NA, NA, NA, NA, NA, NA, 10451L, NA, NA, NA, NA, NA, NA, 14216L,
NA, NA, NA, NA, NA, NA, 16800L, NA, NA, NA, NA, NA, NA, 18305L,
NA, NA, NA, NA, NA, NA, 18911L, NA, NA, NA, NA, NA, NA, 17812L,
NA, NA, NA, NA, NA, NA, 18665L, NA, NA, NA, NA, NA, NA, 18977L,
NA, NA, NA, NA, NA, NA, 19512L, NA, NA, NA, NA, NA, NA, 17424L,
NA, NA, NA, NA, NA, NA, 14464L, NA, NA, NA, NA, NA, NA, 16383L,
NA, NA, NA, NA, NA, NA, 19916L, NA, NA, NA, NA, NA, NA, 18255L,
NA, NA, NA, NA, NA, NA, 20113L, NA, NA, NA, NA, NA, NA, 20084L,
NA, NA, NA, NA, NA, NA, 20196L, NA, NA, NA, NA, NA, NA, 20184L,
NA, NA, NA, NA, NA, NA, 20261L, NA, NA, NA, NA, NA, NA, 22246L,
NA, NA, NA, NA, NA, NA, 23030L, NA, NA, NA, NA, NA, NA, 10487L,
NA, NA, NA, NA)), .Names = c("daily.ts", "wdayno", "month",
"year", "yearday", "no.influ.cases", "no.consultations"), row.names = c(NA,
-365L), class = "data.frame")
fuente
R
u otros paquetes estadísticos (no tengo acceso a ArcGIS)? Sin una implementación concretamente disponible, todavía estoy atascado, me temo.geoRglm
, siempre que comprenda muy bien la variografía y el cambio de soporte (que es necesario para desarrollar el modelo de correlación espacial). Springer Verlag publica el manual como Geoestadística basada en modelos, Diggle & Ribeiro Jr.Respuestas:
Me las arreglé para crear una
R
función que interpola puntos espaciados de manera lineal y con splines mientras conserva los medios (por ejemplo, semanalmente, mensualmente, etc.). Utiliza las funcionesna.approx
yna.spline
delzoo
paquete y calcula iterativamente las splines con las propiedades deseadas. El algoritmo se describe en este documento .Aquí está el código:
Apliquemos la función al conjunto de datos de ejemplo dado en la pregunta:
Tanto las interpolaciones lineales como las de spline parecen estar bien. Verifiquemos si se conservan las medias semanales (salida truncada):
fuente
Cualquier línea recta que atraviese la media en el punto medio del rango producirá valores diarios que tienen la media requerida. El último comentario de Nick Cox sobre 'dividir recuentos semanales por número de días' es un caso especial de eso con gradiente = 0.
Entonces podemos ajustar esto y elegir el gradiente para que las cosas sean un poco más suaves. Aquí hay tres funciones R para hacer algo así:
Agregue una medida de día a sus datos, luego trace, y luego trace el interpolador:
Otra posibilidad es restringir la continuidad los fines de semana, pero esto le brinda un sistema con un solo grado de libertad, es decir, está completamente definido por la pendiente de la primera sección (porque entonces todas las otras secciones tienen que unirse). No he codificado esto, ¡tienes una oportunidad!
[Apols por el código R ligeramente en mal estado, realmente debería devolver los puntos en lugar de trazarlos]
fuente
(Si los datos hubieran sido mediciones en lugar de conteos, me inclinaría por modelar las proporciones a través de un modelo de Dirichlet, pero eso es un poco más complicado).
El hecho de que el número de días no siempre sea el mismo no debería ser un problema particular, siempre y cuando sepas lo que es, siempre y cuando uses un desplazamiento para poner las cosas en el mismo 'nivel'.
fuente
Agruparé algunos comentarios adicionales como otra respuesta.
La estructura de este proyecto ha tardado un poco en aclararse. Dado que la influenza ahora se revela como una covariable entre varias, lo que haces no parece tan crucial, o al menos no merece el escepticismo expresado en algunos de mis comentarios anteriores. Como todo lo demás es diario, reducir todo lo demás a semanas arrojaría demasiados detalles.
El enfoque original de la pregunta permanece, en la interpolación que conserva la media semanal a la que una respuesta (extrema) es que la media semanal conserva la media semanal. Como eso, como era de esperar, parece poco atractivo o poco realista, otros métodos de interpolación parecen más atractivos y / o métodos de imputación propuestos por @Spacedman. (No estoy claro si eso sería imputación con un sabor temporal o interpolación con sabor estocástico agregado).
Dos pensamientos específicos adicionales:
Tomar los valores semanales (divididos por el número de días) y luego suavizarlos con promedios ponderados probablemente en la práctica preservaría la media a una buena aproximación.
Como los casos de influenza son recuentos, suavizar los recuentos de raíz o registro y luego la transformación inversa podría funcionar mejor que simplemente suavizar los recuentos.
fuente