Is sample kurtosis hopelessly biased? I am looking at the sample kurtosis of a fairly skewed random variable, and the results seem inconsistent. To simply illustrate the problem, I looked at the sample kurtosis of a log-normal RV. In R (which I am slowly learning): 
library(moments); 

samp_size = 2048;
n_trial = 4096;

kvals <- rep(NA,1,n_trial); #preallocate
for (iii in 1:n_trial) {
    kvals[iii] <- kurtosis(exp(rnorm(samp_size)));
}
print(summary(kvals));

The summary I get is
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  11.87   28.66   39.32   59.17   61.70 1302.00 

According to Wikipedia, the kurtosis for this log-normal RV should be around 114. Clearly the sample kurtosis is biased.
Doing some research I found that sample kurtosis is biased for small sample sizes. I used the 'G2' estimator as provided by the e1071 package in CRAN, and got very similar results for this sample size. 
The question: which of the following characterize what is going on:


*

*The standard error of the sample kurtosis is simply very large for this RV (even though the hand-wavey common estimate of the standard error is of order $1/\sqrt{n}$). Alternatively, I used too few samples (2048) in this study.

*These implementations of sample kurtosis suffer from numerical problems which might be corrected by e.g. Terriberry's method (in much the same way that Welford's method gives better results than the naive method for sample variance).

*I computed the population kurtosis incorrectly. (ouch)

*Sample kurtosis is inherently biased and you can never fix it for such small sample sizes.

 A: There's a bias correction.  It's not huge.  I believe the sampling variance of the kurtosis is proportional to the eighth (!) central moment, which can be enormous for a lognormal distribution.  You would need millions of trials (or far more) in a simulation to detect bias unless the CV is tiny.  (Plot a histogram of kvals to see how extraordinarily skewed they are.)
The correct kurtosis is indeed about 113.9364.
As far as R style goes, it can be convenient to encapsulate the simulation in a function so you can easily modify the sample size or number of trials. 
A: [Just on the R Style - @whuber has answered the Kurtsosis Q]
This was a bit too complicated to stick into a comment. For such simple loops like the one you use, we can combine @whuber's suggestion of encapsulating the simulation in a function with the replicate() function. replicate() takes care of allocation and running the loop for you. An example is given below:
require(moments)
foo <- function(size, trials, meanlog = 0, sdlog = 1) {
    replicate(trials,
              kurtosis(rlnorm(size, meanlog = meanlog, 
                              sdlog = sdlog)))
}

We use it like this:
> set.seed(1)
> out <- foo(2048, 10000)
> summary(out)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
  10.93   28.77   39.99   62.53   62.58 1557.00

Note that I use the rlnorm() function to generate the log-normal random variable. It is equivalent to exp(rnorm()) in your loop but uses the correct tool, and we allow our function to pass on user-specified parameters of the log-normal distribution.
> set.seed(123)
> exp(rnorm(1))
[1] 0.5709374
> set.seed(123)
> rlnorm(1)
[1] 0.5709374

