Unexpected behavior in spatstat inhomogeneous K-, F- and G-functions












0















I have a point pattern with about 84,000 points. Quadrat tests suggested inhomogeneous intensity to I tried different Kernel bandwidths and got very odd behavior in the inhomogeneous implementations of the K-, F- and G-functions. Here is an example of the inhomogeneous F-function plot. Clearly, the estimated F-function does not reach 1 within the distance range while the Poisson process just flatlines. The F-function should also be increasing so the dips are odd. When manually specifying a longer range of r in the Finhom() function, the function still does not evaluate beyond the suggested range of 2000.



Unfortunately, I cannot share my data. However, I managed to reproduce some of the errors with an admittedly very simple example of a point pattern on the unit square:



library(spatstat) # version 1.57-1
# define point pattern
ex <- as.ppp(data.frame(x = c(.9, .25, .29, .7, .72, .8, .72, .85),
y = c(.1, .25, .29, .5, .5, .1, .45, .08)),
W = owin(c(0,1), c(0,1)))

plot(ex)
# testing inhomogeneity
quadrat.test(ex, 3, 3, method = "M", nsim = 500) # p around 0.05
# set bandwidth
diggle <- bw.diggle(ex)
# suggested bandwidth of 0.028

# estimate inhomogeneous F-function
Fi <- Finhom(ex, sigma = diggle)
plot(Fi, main ="Finhom for ex pattern")


The plot is attached here. Similar to my real data, the plot stops evaluating at r = 0.5, flatlines and does not go up all the way to 1.
Interestingly, when supplying the intensity directly via the lambda argument in the Finhom() function, the behavior changes:



lambda_ex <- density(ex, sigma = diggle, at = "points")
Fi_lambda <- Finhom(ex, lambda = lambda_ex)
plot(Fi_lambda, main ="Finhom w/ lambda directly")


Here, the functions behave as expected.



My questions are:




  1. why is there a difference between directly supplied intensity vs. intensity internally estimated in the Finhom() function?


  2. what could be the reason for the odd behavior of the F-function here? A code issue or user error? (Sidenote, the G- and K-functions also return odd behavior, to keep this question short-ish, I've focused on the F-function)



Thank you!










share|improve this question



























    0















    I have a point pattern with about 84,000 points. Quadrat tests suggested inhomogeneous intensity to I tried different Kernel bandwidths and got very odd behavior in the inhomogeneous implementations of the K-, F- and G-functions. Here is an example of the inhomogeneous F-function plot. Clearly, the estimated F-function does not reach 1 within the distance range while the Poisson process just flatlines. The F-function should also be increasing so the dips are odd. When manually specifying a longer range of r in the Finhom() function, the function still does not evaluate beyond the suggested range of 2000.



    Unfortunately, I cannot share my data. However, I managed to reproduce some of the errors with an admittedly very simple example of a point pattern on the unit square:



    library(spatstat) # version 1.57-1
    # define point pattern
    ex <- as.ppp(data.frame(x = c(.9, .25, .29, .7, .72, .8, .72, .85),
    y = c(.1, .25, .29, .5, .5, .1, .45, .08)),
    W = owin(c(0,1), c(0,1)))

    plot(ex)
    # testing inhomogeneity
    quadrat.test(ex, 3, 3, method = "M", nsim = 500) # p around 0.05
    # set bandwidth
    diggle <- bw.diggle(ex)
    # suggested bandwidth of 0.028

    # estimate inhomogeneous F-function
    Fi <- Finhom(ex, sigma = diggle)
    plot(Fi, main ="Finhom for ex pattern")


    The plot is attached here. Similar to my real data, the plot stops evaluating at r = 0.5, flatlines and does not go up all the way to 1.
    Interestingly, when supplying the intensity directly via the lambda argument in the Finhom() function, the behavior changes:



    lambda_ex <- density(ex, sigma = diggle, at = "points")
    Fi_lambda <- Finhom(ex, lambda = lambda_ex)
    plot(Fi_lambda, main ="Finhom w/ lambda directly")


    Here, the functions behave as expected.



    My questions are:




    1. why is there a difference between directly supplied intensity vs. intensity internally estimated in the Finhom() function?


    2. what could be the reason for the odd behavior of the F-function here? A code issue or user error? (Sidenote, the G- and K-functions also return odd behavior, to keep this question short-ish, I've focused on the F-function)



    Thank you!










    share|improve this question

























      0












      0








      0








      I have a point pattern with about 84,000 points. Quadrat tests suggested inhomogeneous intensity to I tried different Kernel bandwidths and got very odd behavior in the inhomogeneous implementations of the K-, F- and G-functions. Here is an example of the inhomogeneous F-function plot. Clearly, the estimated F-function does not reach 1 within the distance range while the Poisson process just flatlines. The F-function should also be increasing so the dips are odd. When manually specifying a longer range of r in the Finhom() function, the function still does not evaluate beyond the suggested range of 2000.



      Unfortunately, I cannot share my data. However, I managed to reproduce some of the errors with an admittedly very simple example of a point pattern on the unit square:



      library(spatstat) # version 1.57-1
      # define point pattern
      ex <- as.ppp(data.frame(x = c(.9, .25, .29, .7, .72, .8, .72, .85),
      y = c(.1, .25, .29, .5, .5, .1, .45, .08)),
      W = owin(c(0,1), c(0,1)))

      plot(ex)
      # testing inhomogeneity
      quadrat.test(ex, 3, 3, method = "M", nsim = 500) # p around 0.05
      # set bandwidth
      diggle <- bw.diggle(ex)
      # suggested bandwidth of 0.028

      # estimate inhomogeneous F-function
      Fi <- Finhom(ex, sigma = diggle)
      plot(Fi, main ="Finhom for ex pattern")


      The plot is attached here. Similar to my real data, the plot stops evaluating at r = 0.5, flatlines and does not go up all the way to 1.
      Interestingly, when supplying the intensity directly via the lambda argument in the Finhom() function, the behavior changes:



      lambda_ex <- density(ex, sigma = diggle, at = "points")
      Fi_lambda <- Finhom(ex, lambda = lambda_ex)
      plot(Fi_lambda, main ="Finhom w/ lambda directly")


      Here, the functions behave as expected.



      My questions are:




      1. why is there a difference between directly supplied intensity vs. intensity internally estimated in the Finhom() function?


      2. what could be the reason for the odd behavior of the F-function here? A code issue or user error? (Sidenote, the G- and K-functions also return odd behavior, to keep this question short-ish, I've focused on the F-function)



      Thank you!










      share|improve this question














      I have a point pattern with about 84,000 points. Quadrat tests suggested inhomogeneous intensity to I tried different Kernel bandwidths and got very odd behavior in the inhomogeneous implementations of the K-, F- and G-functions. Here is an example of the inhomogeneous F-function plot. Clearly, the estimated F-function does not reach 1 within the distance range while the Poisson process just flatlines. The F-function should also be increasing so the dips are odd. When manually specifying a longer range of r in the Finhom() function, the function still does not evaluate beyond the suggested range of 2000.



      Unfortunately, I cannot share my data. However, I managed to reproduce some of the errors with an admittedly very simple example of a point pattern on the unit square:



      library(spatstat) # version 1.57-1
      # define point pattern
      ex <- as.ppp(data.frame(x = c(.9, .25, .29, .7, .72, .8, .72, .85),
      y = c(.1, .25, .29, .5, .5, .1, .45, .08)),
      W = owin(c(0,1), c(0,1)))

      plot(ex)
      # testing inhomogeneity
      quadrat.test(ex, 3, 3, method = "M", nsim = 500) # p around 0.05
      # set bandwidth
      diggle <- bw.diggle(ex)
      # suggested bandwidth of 0.028

      # estimate inhomogeneous F-function
      Fi <- Finhom(ex, sigma = diggle)
      plot(Fi, main ="Finhom for ex pattern")


      The plot is attached here. Similar to my real data, the plot stops evaluating at r = 0.5, flatlines and does not go up all the way to 1.
      Interestingly, when supplying the intensity directly via the lambda argument in the Finhom() function, the behavior changes:



      lambda_ex <- density(ex, sigma = diggle, at = "points")
      Fi_lambda <- Finhom(ex, lambda = lambda_ex)
      plot(Fi_lambda, main ="Finhom w/ lambda directly")


      Here, the functions behave as expected.



      My questions are:




      1. why is there a difference between directly supplied intensity vs. intensity internally estimated in the Finhom() function?


      2. what could be the reason for the odd behavior of the F-function here? A code issue or user error? (Sidenote, the G- and K-functions also return odd behavior, to keep this question short-ish, I've focused on the F-function)



      Thank you!







      r spatial spatstat






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Nov 22 '18 at 10:14









      P. DoeP. Doe

      31




      31
























          2 Answers
          2






          active

          oldest

          votes


















          0
















          As pointed out by Adrian Baddeley in the other answer this is not a bug in Finhom per se. You would expect that



          Fi <- Finhom(ex, sigma = diggle)


          should be equivalent to



          lambda_ex <- density(ex, sigma = diggle, at = "points")
          Fi_lambda <- Finhom(ex, lambda = lambda_ex)


          However, different values of the argument lmin are implied by these commands. In the first case lambda is estimated everywhere in the window and the minimum value used. In the second case only the given values of lambda are used to find the minimum. That can of course be quite different. The importance of lmin is illustrated in the code below (note that discrepancy between data and inhomogeneous Poisson is of the same type in all cases).



          The other part about the estimate stopping at r=0.5 is not surprising since border correction is used and the window is the unit square. When r=0.5 the entire window is "shaved off", so there is no data left.



          library(spatstat)
          #> spatstat 1.56-1.031 (nickname: 'Psycho chicken')
          X <- swedishpines
          lam <- density(X, at = "points", sigma = 10)
          lam_min <- min(lam)
          plot(Finhom(X, lmin = lam_min), legend = FALSE, col = 1, main = "Finhom for different values of lmin")
          s <- 2^(1:3)
          for(i in seq_along(s)){
          plot(Finhom(X, lmin = lam_min/s[i]), col = i+1, add = TRUE)
          }
          s <- c(1,s)
          legend("topleft", legend = paste0("min(lam)/", s), lty = 1, col = 1:length(s))




          Created on 2018-11-24 by the reprex package (v0.2.1)






          share|improve this answer

































            0














            The "inhomogeneous" functions Kinhom, Ginhom, Finhom involve making adjustments for the spatially varying intensity of the point process. They only work if (a) the intensity has been accurately estimated, and (b) the point process satisfies certain technical assumptions which justify the adjustment calculation (see the references in the help files, or the relevant section of the spatstat book).



            The plot of density(ex, sigma=bw.diggle) shows very high peaks and very low troughs in the estimated intensity, suggesting that the data are under-smoothed, so that (a) is not satisfied. The results obtained with bw.scott or bw.CvL are much better behaved. (Remember that bw.diggle is designed for clustered patterns.) For example, I get a reasonably nice plot with



            plot(Finhom(ex, sigma=bw.CvL))


            Yes, it does seem a bit disconcerting that the results are different when 'lambda' is given as a pixel image and as a numeric vector. This occurs, as Ege explains, because of the different rules for calculating the default value of the important argument lmin. It's not really a bug -- the original authors of the code for Ginhom and Finhom designed it this way; I will consult them for advice about whether we should change it. In the meantime, you can make the two calculations agree if you specify the value of lmin.






            share|improve this answer























              Your Answer






              StackExchange.ifUsing("editor", function () {
              StackExchange.using("externalEditor", function () {
              StackExchange.using("snippets", function () {
              StackExchange.snippets.init();
              });
              });
              }, "code-snippets");

              StackExchange.ready(function() {
              var channelOptions = {
              tags: "".split(" "),
              id: "1"
              };
              initTagRenderer("".split(" "), "".split(" "), channelOptions);

              StackExchange.using("externalEditor", function() {
              // Have to fire editor after snippets, if snippets enabled
              if (StackExchange.settings.snippets.snippetsEnabled) {
              StackExchange.using("snippets", function() {
              createEditor();
              });
              }
              else {
              createEditor();
              }
              });

              function createEditor() {
              StackExchange.prepareEditor({
              heartbeatType: 'answer',
              autoActivateHeartbeat: false,
              convertImagesToLinks: true,
              noModals: true,
              showLowRepImageUploadWarning: true,
              reputationToPostImages: 10,
              bindNavPrevention: true,
              postfix: "",
              imageUploader: {
              brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
              contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
              allowUrls: true
              },
              onDemand: true,
              discardSelector: ".discard-answer"
              ,immediatelyShowMarkdownHelp:true
              });


              }
              });














              draft saved

              draft discarded


















              StackExchange.ready(
              function () {
              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53428594%2funexpected-behavior-in-spatstat-inhomogeneous-k-f-and-g-functions%23new-answer', 'question_page');
              }
              );

              Post as a guest















              Required, but never shown

























              2 Answers
              2






              active

              oldest

              votes








              2 Answers
              2






              active

              oldest

              votes









              active

              oldest

              votes






              active

              oldest

              votes









              0
















              As pointed out by Adrian Baddeley in the other answer this is not a bug in Finhom per se. You would expect that



              Fi <- Finhom(ex, sigma = diggle)


              should be equivalent to



              lambda_ex <- density(ex, sigma = diggle, at = "points")
              Fi_lambda <- Finhom(ex, lambda = lambda_ex)


              However, different values of the argument lmin are implied by these commands. In the first case lambda is estimated everywhere in the window and the minimum value used. In the second case only the given values of lambda are used to find the minimum. That can of course be quite different. The importance of lmin is illustrated in the code below (note that discrepancy between data and inhomogeneous Poisson is of the same type in all cases).



              The other part about the estimate stopping at r=0.5 is not surprising since border correction is used and the window is the unit square. When r=0.5 the entire window is "shaved off", so there is no data left.



              library(spatstat)
              #> spatstat 1.56-1.031 (nickname: 'Psycho chicken')
              X <- swedishpines
              lam <- density(X, at = "points", sigma = 10)
              lam_min <- min(lam)
              plot(Finhom(X, lmin = lam_min), legend = FALSE, col = 1, main = "Finhom for different values of lmin")
              s <- 2^(1:3)
              for(i in seq_along(s)){
              plot(Finhom(X, lmin = lam_min/s[i]), col = i+1, add = TRUE)
              }
              s <- c(1,s)
              legend("topleft", legend = paste0("min(lam)/", s), lty = 1, col = 1:length(s))




              Created on 2018-11-24 by the reprex package (v0.2.1)






              share|improve this answer






























                0
















                As pointed out by Adrian Baddeley in the other answer this is not a bug in Finhom per se. You would expect that



                Fi <- Finhom(ex, sigma = diggle)


                should be equivalent to



                lambda_ex <- density(ex, sigma = diggle, at = "points")
                Fi_lambda <- Finhom(ex, lambda = lambda_ex)


                However, different values of the argument lmin are implied by these commands. In the first case lambda is estimated everywhere in the window and the minimum value used. In the second case only the given values of lambda are used to find the minimum. That can of course be quite different. The importance of lmin is illustrated in the code below (note that discrepancy between data and inhomogeneous Poisson is of the same type in all cases).



                The other part about the estimate stopping at r=0.5 is not surprising since border correction is used and the window is the unit square. When r=0.5 the entire window is "shaved off", so there is no data left.



                library(spatstat)
                #> spatstat 1.56-1.031 (nickname: 'Psycho chicken')
                X <- swedishpines
                lam <- density(X, at = "points", sigma = 10)
                lam_min <- min(lam)
                plot(Finhom(X, lmin = lam_min), legend = FALSE, col = 1, main = "Finhom for different values of lmin")
                s <- 2^(1:3)
                for(i in seq_along(s)){
                plot(Finhom(X, lmin = lam_min/s[i]), col = i+1, add = TRUE)
                }
                s <- c(1,s)
                legend("topleft", legend = paste0("min(lam)/", s), lty = 1, col = 1:length(s))




                Created on 2018-11-24 by the reprex package (v0.2.1)






                share|improve this answer




























                  0












                  0








                  0









                  As pointed out by Adrian Baddeley in the other answer this is not a bug in Finhom per se. You would expect that



                  Fi <- Finhom(ex, sigma = diggle)


                  should be equivalent to



                  lambda_ex <- density(ex, sigma = diggle, at = "points")
                  Fi_lambda <- Finhom(ex, lambda = lambda_ex)


                  However, different values of the argument lmin are implied by these commands. In the first case lambda is estimated everywhere in the window and the minimum value used. In the second case only the given values of lambda are used to find the minimum. That can of course be quite different. The importance of lmin is illustrated in the code below (note that discrepancy between data and inhomogeneous Poisson is of the same type in all cases).



                  The other part about the estimate stopping at r=0.5 is not surprising since border correction is used and the window is the unit square. When r=0.5 the entire window is "shaved off", so there is no data left.



                  library(spatstat)
                  #> spatstat 1.56-1.031 (nickname: 'Psycho chicken')
                  X <- swedishpines
                  lam <- density(X, at = "points", sigma = 10)
                  lam_min <- min(lam)
                  plot(Finhom(X, lmin = lam_min), legend = FALSE, col = 1, main = "Finhom for different values of lmin")
                  s <- 2^(1:3)
                  for(i in seq_along(s)){
                  plot(Finhom(X, lmin = lam_min/s[i]), col = i+1, add = TRUE)
                  }
                  s <- c(1,s)
                  legend("topleft", legend = paste0("min(lam)/", s), lty = 1, col = 1:length(s))




                  Created on 2018-11-24 by the reprex package (v0.2.1)






                  share|improve this answer

















                  As pointed out by Adrian Baddeley in the other answer this is not a bug in Finhom per se. You would expect that



                  Fi <- Finhom(ex, sigma = diggle)


                  should be equivalent to



                  lambda_ex <- density(ex, sigma = diggle, at = "points")
                  Fi_lambda <- Finhom(ex, lambda = lambda_ex)


                  However, different values of the argument lmin are implied by these commands. In the first case lambda is estimated everywhere in the window and the minimum value used. In the second case only the given values of lambda are used to find the minimum. That can of course be quite different. The importance of lmin is illustrated in the code below (note that discrepancy between data and inhomogeneous Poisson is of the same type in all cases).



                  The other part about the estimate stopping at r=0.5 is not surprising since border correction is used and the window is the unit square. When r=0.5 the entire window is "shaved off", so there is no data left.



                  library(spatstat)
                  #> spatstat 1.56-1.031 (nickname: 'Psycho chicken')
                  X <- swedishpines
                  lam <- density(X, at = "points", sigma = 10)
                  lam_min <- min(lam)
                  plot(Finhom(X, lmin = lam_min), legend = FALSE, col = 1, main = "Finhom for different values of lmin")
                  s <- 2^(1:3)
                  for(i in seq_along(s)){
                  plot(Finhom(X, lmin = lam_min/s[i]), col = i+1, add = TRUE)
                  }
                  s <- c(1,s)
                  legend("topleft", legend = paste0("min(lam)/", s), lty = 1, col = 1:length(s))




                  Created on 2018-11-24 by the reprex package (v0.2.1)







                  share|improve this answer














                  share|improve this answer



                  share|improve this answer








                  edited Nov 24 '18 at 11:58

























                  answered Nov 22 '18 at 20:36









                  Ege RubakEge Rubak

                  2,0711612




                  2,0711612

























                      0














                      The "inhomogeneous" functions Kinhom, Ginhom, Finhom involve making adjustments for the spatially varying intensity of the point process. They only work if (a) the intensity has been accurately estimated, and (b) the point process satisfies certain technical assumptions which justify the adjustment calculation (see the references in the help files, or the relevant section of the spatstat book).



                      The plot of density(ex, sigma=bw.diggle) shows very high peaks and very low troughs in the estimated intensity, suggesting that the data are under-smoothed, so that (a) is not satisfied. The results obtained with bw.scott or bw.CvL are much better behaved. (Remember that bw.diggle is designed for clustered patterns.) For example, I get a reasonably nice plot with



                      plot(Finhom(ex, sigma=bw.CvL))


                      Yes, it does seem a bit disconcerting that the results are different when 'lambda' is given as a pixel image and as a numeric vector. This occurs, as Ege explains, because of the different rules for calculating the default value of the important argument lmin. It's not really a bug -- the original authors of the code for Ginhom and Finhom designed it this way; I will consult them for advice about whether we should change it. In the meantime, you can make the two calculations agree if you specify the value of lmin.






                      share|improve this answer




























                        0














                        The "inhomogeneous" functions Kinhom, Ginhom, Finhom involve making adjustments for the spatially varying intensity of the point process. They only work if (a) the intensity has been accurately estimated, and (b) the point process satisfies certain technical assumptions which justify the adjustment calculation (see the references in the help files, or the relevant section of the spatstat book).



                        The plot of density(ex, sigma=bw.diggle) shows very high peaks and very low troughs in the estimated intensity, suggesting that the data are under-smoothed, so that (a) is not satisfied. The results obtained with bw.scott or bw.CvL are much better behaved. (Remember that bw.diggle is designed for clustered patterns.) For example, I get a reasonably nice plot with



                        plot(Finhom(ex, sigma=bw.CvL))


                        Yes, it does seem a bit disconcerting that the results are different when 'lambda' is given as a pixel image and as a numeric vector. This occurs, as Ege explains, because of the different rules for calculating the default value of the important argument lmin. It's not really a bug -- the original authors of the code for Ginhom and Finhom designed it this way; I will consult them for advice about whether we should change it. In the meantime, you can make the two calculations agree if you specify the value of lmin.






                        share|improve this answer


























                          0












                          0








                          0







                          The "inhomogeneous" functions Kinhom, Ginhom, Finhom involve making adjustments for the spatially varying intensity of the point process. They only work if (a) the intensity has been accurately estimated, and (b) the point process satisfies certain technical assumptions which justify the adjustment calculation (see the references in the help files, or the relevant section of the spatstat book).



                          The plot of density(ex, sigma=bw.diggle) shows very high peaks and very low troughs in the estimated intensity, suggesting that the data are under-smoothed, so that (a) is not satisfied. The results obtained with bw.scott or bw.CvL are much better behaved. (Remember that bw.diggle is designed for clustered patterns.) For example, I get a reasonably nice plot with



                          plot(Finhom(ex, sigma=bw.CvL))


                          Yes, it does seem a bit disconcerting that the results are different when 'lambda' is given as a pixel image and as a numeric vector. This occurs, as Ege explains, because of the different rules for calculating the default value of the important argument lmin. It's not really a bug -- the original authors of the code for Ginhom and Finhom designed it this way; I will consult them for advice about whether we should change it. In the meantime, you can make the two calculations agree if you specify the value of lmin.






                          share|improve this answer













                          The "inhomogeneous" functions Kinhom, Ginhom, Finhom involve making adjustments for the spatially varying intensity of the point process. They only work if (a) the intensity has been accurately estimated, and (b) the point process satisfies certain technical assumptions which justify the adjustment calculation (see the references in the help files, or the relevant section of the spatstat book).



                          The plot of density(ex, sigma=bw.diggle) shows very high peaks and very low troughs in the estimated intensity, suggesting that the data are under-smoothed, so that (a) is not satisfied. The results obtained with bw.scott or bw.CvL are much better behaved. (Remember that bw.diggle is designed for clustered patterns.) For example, I get a reasonably nice plot with



                          plot(Finhom(ex, sigma=bw.CvL))


                          Yes, it does seem a bit disconcerting that the results are different when 'lambda' is given as a pixel image and as a numeric vector. This occurs, as Ege explains, because of the different rules for calculating the default value of the important argument lmin. It's not really a bug -- the original authors of the code for Ginhom and Finhom designed it this way; I will consult them for advice about whether we should change it. In the meantime, you can make the two calculations agree if you specify the value of lmin.







                          share|improve this answer












                          share|improve this answer



                          share|improve this answer










                          answered Nov 23 '18 at 1:46









                          Adrian BaddeleyAdrian Baddeley

                          1,021144




                          1,021144






























                              draft saved

                              draft discarded




















































                              Thanks for contributing an answer to Stack Overflow!


                              • Please be sure to answer the question. Provide details and share your research!

                              But avoid



                              • Asking for help, clarification, or responding to other answers.

                              • Making statements based on opinion; back them up with references or personal experience.


                              To learn more, see our tips on writing great answers.




                              draft saved


                              draft discarded














                              StackExchange.ready(
                              function () {
                              StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53428594%2funexpected-behavior-in-spatstat-inhomogeneous-k-f-and-g-functions%23new-answer', 'question_page');
                              }
                              );

                              Post as a guest















                              Required, but never shown





















































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown

































                              Required, but never shown














                              Required, but never shown












                              Required, but never shown







                              Required, but never shown







                              這個網誌中的熱門文章

                              Hercules Kyvelos

                              Tangent Lines Diagram Along Smooth Curve

                              Yusuf al-Mu'taman ibn Hud