Predict ... comment ça marche ?

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Predict ... comment ça marche ?

Messagepar Thomas Galtier » 28 Mai 2007, 09:06

Bonjour tout le monde,

La suite de mes peripeties continue sur le fonctionnement de la fonction predict ..; dans mon cas predict.gstat :

Voilà ce que j'ai :

Une data.frame de cette forme là :

Code : Tout sélectionner

 LONG   LAT    TEMPG
1    1.60 50.73  6362649
2    1.83 50.13 12628910
3    2.33 51.05  5057278
4    3.10 50.56 12547221
5    3.15 50.21 13966540
6   -1.93 49.71  2363477
7   -1.48 49.65  3639053


Une "newdata" de cette forme là :

Code : Tout sélectionner

         LONG   LAT
7550  -21.277 56.991
7551  -21.277 57.009
7552  -21.277 57.027
7553  -21.277 57.044
7554  -21.277 57.062
7555  -21.277 57.080
7556  -21.277 57.097
7557  -21.277 57.115


Qui est aussi une data.frame

Maintenant quand je veux utiliser "predict" pour predire mes temperatures (à l'aide de krige dans mon cas) sur ma "newdata" jai ce resultat là :

Code : Tout sélectionner

KO<-krige(TEMPG~1,~LONG+LAT,data=mydata,newdata=mynewdata,model=fvg)
Erreur dans `[.data.frame`(object, , -coord.numbers, drop = FALSE) :
        colonnes non définies sélectionnées


Je ne comprends pas trop.

J'ai eu aussi d'autres erreurs affichées mais c'est la derniere en data lol

thomas

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 09:30

Autre test, cette fois avec une newdata qui comporte exactement les memes vecteurs LONG et LAT que dans mydata. J'ai appelé mydata testbc et mynewdata grille.

Voici le resultat du krigeage :

Code : Tout sélectionner

> grille<-data.frame(LONG,LAT)
> KO<-krige(TEMPG~1,~LONG+LAT,data=testbc,newdata=grille,model=fvg)
[using ordinary kriging]

"chfactor.c", line 130: singular matrix in function LDLfactor()
Erreur dans predict.gstat(g, newdata = newdata, block = block, nsim = nsim,  :
        LDLfactor


Alors je n'y comprends rien ... je vai essayer de lire cette ligne 130 mais je comprends pas.
Entre l'erreur du premier message t cette erreur je vois que ma premiere "newdata" etait doublement fausse.

Je ne comprends pas trop pourquoi ...

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 10:49

Pour ce problème je suis completement bloqué ... comprend vraiment pas l'erreur.

j'ai lu leur exemple, regarder ce que meuse et meuse.grid contenait ..; et je ne vois pas en quoi ça "marche pas" avec mes données ...

:?

Renaud Lancelot
Messages : 2484
Enregistré le : 16 Déc 2004, 08:01
Contact :

Messagepar Renaud Lancelot » 28 Mai 2007, 11:01

N'utilisant pas gstat, je ne peux pas répondre exactement. Cependant, je pense qu'un bon début serait de lire soigneusement la documentation du package et les références qui y sont citées (ainsi que la documentation et les références du package sp). Le package gstat est livré avec un pdf qui explique la mise en oeuvre des fonctions et leurs conditions d'utilisation. Je lis par exemple dans le paragraphe "Spatial data frames":

Package gstat assumes that data are projected, i.e. they should not be provided as lattitude/longitude. As an example, we will look at the meuse data set, which is a regular data frame that comes with package gstat (remove the 88 from the colour strings to make a plot without alpha transparency on windows or X11):

Code : Tout sélectionner

> library(gstat)
> data(meuse)
> class(meuse)
[1] "data.frame"
> names(meuse)
[1] "x" "y" "cadmium" "copper" "lead" "zinc" "elev"
[8] "dist" "om" "ffreq" "soil" "lime" "landuse" "dist.m"
> coordinates(meuse) = ~x + y
> class(meuse)
[1] "SpatialPointsDataFrame"
attr(,"package")
[1] "sp"
> summary(meuse)
Object of class SpatialPointsDataFrame
[...]


La première chose à vérifier est donc que vous travaillez bien avec un data frame spatialisé.

Renaud

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 11:05

Ouaip j'avais déjà vu ça ... mais je n'arrive pas à les rendre et ou à voir si elles sont bien "spatialisées" ... pourtant ça semble bien l'etre.

Je vai faire des tests dessus, quitte à tester sur des plus petits jeux de données pour voir comment ça fonctionne ou pas ...

Merci Renaud ;)

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 11:27

Bon déjà ma premiere "data" est bien Spatial ... pas de souci.
Pour la seconde voici le problème :

Code : Tout sélectionner

> summary(data.grid)
       V1             V2       
 -20.125: 100   Min.   :56.12 
 -20.173: 100   1st Qu.:56.56 
 -20.221: 100   Median :57.00 
 -20.269: 100   Mean   :57.00 
 -20.317: 100   3rd Qu.:57.44 
 -20.365: 100   Max.   :57.88 
 (Other):9400                 
> class(data.grid)
[1] "data.frame"
> coordinates(data.grid)=~V1+V2
Erreur dans .checkNumericCoerce2double(obj) :
        cannot retrieve coordinates from non-numeric elements
> coordinates(data.grid)=~data.grid[,1]+data.grid[,2]
Erreur dans `[.data.frame`(object, , -coord.numbers, drop = FALSE) :
        colonnes non définies sélectionnées
> class(V1)
Erreur : objet "V1" non trouvé
> class(data.grid$V1)
[1] "factor"
> class(data.grid$V2)
[1] "numeric"


C'est là ou ça plante ... lapremiere colonne n'est pas "numerique" ... bizarre bizarre ... et en la transformant en numerique ça rend des "1,2,3,..."

Jevois pas trop pourquoi c'est un "factor" ...

Logez Maxime
Messages : 3138
Enregistré le : 26 Sep 2006, 11:35

Messagepar Logez Maxime » 28 Mai 2007, 12:00

Bonjour,

Pour ce qui est des tranformations numériques d'un facteur il faut faire gaf car il va assigné une valeur par à tes levels. Les éléments égaux au premier level de ton facteur prendront un, les éléments qui sont égaux à la deuxième valeur de tes levels prendront 2, etc. Un des moyens de faire est de passer par un :
as.numeric(as.character(X)). La tu vas bien conserver tes vrais valeurs mais sous forme numérique.

Il se peut que ton problème vienne de l'importation du tableau dans R. Si tu as une valeur de ton tableau qui a pour séparateur décimal une virgule au lieu d'un point par exemple alors ta colonne (suivant les paramètres de la fonction d'importation) va être importer sous forme de facteur. Il faut bien se méfier de ce genre de trucs car une seule valeur du style 3,4 au lieu de 3.4 et c'est toutes tes valeurs de ta colonne qui sont affectées.

Maxime

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 12:03

Maxime tu m'as devancer ... j'ai analysé mes 20000 données excatement et UNE seule est 20,875 au lieu de 20.875 ....déjà unprobleme que je vai pouvoir regler !

Merci encore ça va le faire j'en suis sur 8)

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 13:05

Bon j'ai tout repris.

Pour la premiere data.frame ça marche (celle sur laquelle je base la modelisation de mon modele)

Pour la seconde ça loupe toujours :

quand je fais :

Code : Tout sélectionner

> data.grid<-read.table("grille.txt");
> class(data.grid)
[1] "data.frame"
> summary(data.grid)
       V1               V2       
 Min.   :-24.88   Min.   :56.12 
 1st Qu.:-23.69   1st Qu.:56.56 
 Median :-22.50   Median :57.00 
 Mean   :-22.50   Mean   :57.00 
 3rd Qu.:-21.31   3rd Qu.:57.44 
 Max.   :-20.12   Max.   :57.88 
> coordinates(data.grid)=~data.grid$V1+data.grid$V2
[b]Erreur dans `[.data.frame`(object, , -coord.numbers, drop = FALSE) :
        colonnes non définies sélectionnées[/b]



C'est ici apparement qu'il y a une erreur.

Car j'ai une data.frame et comme dans le manuel de gstat j'aimerai rendre data.grid de class "spatial" puis de class "spatialPixels"

Quelqu'un pourrait-il m'aider ?

Thomas

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 13:28

Je tiens à préciser que mon fichier : grille.txt est issu de Matlab ou j'ai moi même "grillé" mon domaine pour pouvoir faire mon interpolation.

Peut-etre y'a t'il du coup une autre methode ?

En tout cas je ne comprends pas pourquoi j'ai cette erreur ou sinon celle ci quand je fais :

Code : Tout sélectionner

> gridded(data.grid)<-TRUE
suggested tolerance minimum: 0.0212765957447065Erreur dans points2grid(points, tolerance) : dimension 1 : coordinate intervals are not constant

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 13:43

Le premier point est resolu ...enfin en partie.

c'est le dernier post et la derniere erreur qui revient tout le temps sans que je comprenne pourquoi ... :cry:

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 28 Mai 2007, 17:02

Help.

Cette erreur m'obsede là ... je ne vois ce qui manque, ce que je dois rajouter ou enlever ... bizarre ...


:oops: :oops:

Thomas Galtier
Messages : 93
Enregistré le : 14 Mai 2007, 12:08

Messagepar Thomas Galtier » 29 Mai 2007, 09:39

Ok ça marche.

En fait il suffit juste de ne pas passer par la fonction "gridded" ni "coordinates" dans mon cas.

j'avais déjà "crée" une grille dans l'espace donc pourquoi à partir de celle là en refaire une ...

Mais n'empeche que j'aimerai bien savoir comment ça marche reelement.

ca peut etre très interessant.

Encore merci à vous

:wink:


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité