Dear Giovanni,

apologize for this late reply! I was testing and reading a lot of stuff. I 
tried your suggestions and the problem of singularity in the regressor cross 
product vanishes when using the Group Mean function 'pgm' instead of 'pvcm'. 
Nevertheless, I found the collinearity in the regressors and 'pvcm' ran 
further, until I got another error. This time a little different but still 
directed towards the same area:

'Error in solve.default(crossprod(X[[i]])[!coefna[i, ], !coefna[i, ]])) :
        system is computationally singular: reciprocal condition number = 
1.86131e-17'

Following the description of R's function 'rcond', the reciprocal condition 
number measures how close a matrix is to be rank deficient. So in this case one 
regressor crossproduct seems to be sufficiently close to singularity, such that 
inversion becomes impossible. 

I attached you a simple subsample. If you let run the following commands on it:

require(plm)
data <- read.csv(path, sep = ",", header = TRUE)
pdata <- plm.data(data, index = c("gvkey", "fyear"))
debug(plm:::pvcm)
model.pvcm <- pvcm(LOGDXSGA~LOGDSALE + DECRLOGDSALE + DECRLOGDSALEWDAVG, data = 
pdata, model = "random")
...... go until
Browse[2]> 
debug: ml <- split(data cond)

Then type:
A <- as.matrix(ml$'25062'[, 2:4])
XX <- t(A) %*% A
qr(XX)$rank
[1] 2                            Aha, the rank is only 2! 
rcond(XX) 
[1] 9.339817e-16    Alright, the matrix XX is pretty near to singularity, even 
it is not really singular!

Let us have a look at it:
A[, 2]/A[, 3]
.....                              A[, 2] is almost a multiple of A[, 3], if 
the latter is multiplied by -6.231979 or -6.231331 ..... at least it suffices 
to let the rank shrink to 2. 

The thing is, the same regression goes through in the Stata package. As I would 
say, I am an R fanatist, I would like to know, why it runs in Stata and not in 
R.....and that one can let it run in R as well. Different number 
formats/precision? Maybe it suffices in such a case to enforce full rank of the 
crossproduct by enforcing positive definitess, for instance via the function 
'nearPD' in the R package 'Matrix':

Try 
library(Matrix)
qr(nearPD(XX)$mat)$rank
[1] 3                                                 Yey!..... :)

Tell me your opinion Giovanni! Give me a little help here please! 


Best 

Simon
 

P.S. Thank your for this fantastic package making panel data estimation 
possible in the R environment! 



On Feb 27, 2013, at 1:40 PM, Millo Giovanni <[email protected]> wrote:

> Hello.
> Another thing you may want to do depends on whether you are using
> model="within" (the default) or model="random".
> 
> In the first case, pvcm() estimates separate regressions, so you just
> need to loop lm() on individual indices to spot where it fails.
> 
> In the second case, what you may want to do is try a similar estimator:
> pmg(..., model="mg"), which is an unweighted version of Swamy's
> estimator in pvcm() and a simpler function to read and modify, possibly
> using the global assignment operator '<<-' as already suggested by
> William to output diagnostics.
> 
> Best,
> Giovanni
> 
>> -----Original Message-----
>> From: [email protected]
> [mailto:[email protected]] On Behalf
>> Of Simon Zehnder
>> Sent: Tuesday, February 26, 2013 2:53 AM
>> To: [email protected] help
>> Subject: [R] Count function calls
>> 
>> Dear R-users,
>> 
>> I have the following problem: I am running the function 'pvcm' from
> the 'plm' Panel Data
>> package. Inside this function 'solve' is called and gives for a
> certain individual data series
>> an exception because of singularity. I would like to know which
> individual data series
>> causes this error. I tried to debug it, but this is truly painful, as
> solve is called inside of
>> 'lapply' and there are over 5,000 individual data series in the panel.
>> 
>> Now, what I would like to do is to count the calls to 'solve' inside
> the function, so I can
>> see, where the function throws the exception. I tried to use 'trace'
> with a count variable,
>> but I have no clue how to define a global variable to be used by trace
> and updated at
>> every call.....is there another approach?
>> 
>> 
>> Best
>> 
>> Simon
>> 
>> ______________________________________________
> 
>  
> Ai sensi del D.Lgs. 196/2003 si precisa che le informazioni contenute in 
> questo messaggio sono riservate ed a uso esclusivo del destinatario. Qualora 
> il messaggio in parola Le fosse pervenuto per errore, La invitiamo ad 
> eliminarlo senza copiarlo e a non inoltrarlo a terzi, dandocene gentilmente 
> comunicazione. Grazie.
> 
> Pursuant to Legislative Decree No. 196/2003, you are hereby informed that 
> this message contains confidential information intended only for the use of 
> the addressee. If you are not the addressee, and have received this message 
> by mistake, please delete it and immediately notify us. You may not copy or 
> disseminate this message to anyone. Thank you.

______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to