Ero sivun ”Koronavirus” versioiden välillä

Opasnet Suomista
Siirry navigaatioon Siirry hakuun
(koodia päivitetty)
Rivi 10: Rivi 10:
{{#l:Covid-19_dicussions.zip}}
{{#l:Covid-19_dicussions.zip}}


== Laskenta ==
=== Laskenta ===


=== Piirrä näkemysverkko Kialon koronakeskustelusta ===
==== Piirrä näkemysverkko Kialon koronakeskustelusta ====


[[File:Koronakideargumentaatio.png|600px|thumb|Argumentaatio koskien koronarokotusten pakollisuutta.]]Koronakide-hankkeeseen liittyen tehdään näkemysverkkoja koronarokotusten argumentaatiosta.
[[File:Koronakideargumentaatio.png|600px|thumb|Argumentaatio koskien koronarokotusten pakollisuutta.]]Koronakide-hankkeeseen liittyen tehdään näkemysverkkoja koronarokotusten argumentaatiosta.
Rivi 71: Rivi 71:
Jos argumentti C on relevanssityyppiä, se vaikuttaa argumentin B relevanssiin muuttamalla tekijää se = P(B|A) epäsuorasti seprimen kautta
Jos argumentti C on relevanssityyppiä, se vaikuttaa argumentin B relevanssiin muuttamalla tekijää se = P(B|A) epäsuorasti seprimen kautta


<rcode graphics=1>
<rcode>
# This code is Op_fi5925/koronakide on page [[Koronavirus]]
# This code is Op_fi5925/koronakide on page [[Koronavirus]]


Rivi 78: Rivi 78:


# First version of data https://docs.google.com/spreadsheets/d/1Wzj_VqubkV6uomQS-St5UxzS5k25dDBs15DQFEsroOg/edit#gid=0
# First version of data https://docs.google.com/spreadsheets/d/1Wzj_VqubkV6uomQS-St5UxzS5k25dDBs15DQFEsroOg/edit#gid=0
# Relevant nodes for discussion 11 "COVID-19 vaccines should be mandatory"
#relevants <- gshe#et2tbl("https://docs.google.com/spreadsheets/d/1Wzj_VqubkV6uomQS-St5UxzS5k25dDBs15DQFEsroOg/edit#gid=0")
#relevants <- relevants$position[relevants$class=="relevance"]
#relevants <- gsub("\\.$","", relevants)
relevants <- c(
"1.2.1"          , "1.2.1.1"      ,  "1.2.1.1.1"      , "1.2.1.1.1.1"  ,  "1.2.1.5"        ,
"1.2.2.1"        , "1.2.2.1.2"    ,  "1.2.2.2"        , "1.2.2.2.1"    ,  "1.2.3.1"        ,
"1.2.4"          , "1.2.4.2.1"    ,  "1.2.4.4"        , "1.2.5.1.1.1"  ,  "1.2.5.2"        ,
"1.2.5.2.1"      , "1.2.5.2.1.2"  ,  "1.2.5.2.2"      , "1.2.5.2.4.5"  ,  "1.2.5.3"        ,
"1.2.5.3.1"      , "1.2.5.3.2"    ,  "1.2.5.3.3"      , "1.2.5.3.4"    ,  "1.2.5.3.4.1.1"  ,
"1.2.5.4"        , "1.2.6"        ,  "1.2.7"          , "1.2.7.1"      ,  "1.2.7.1.1"      ,
"1.2.7.3"        , "1.2.7.4"      ,  "1.2.7.5"        , "1.2.7.5.1.1"  ,  "1.2.8.2"        ,
"1.2.8.3"        , "1.3.2.2"      ,  "1.3.4"          , "1.4.1.1.1.2"  ,  "1.4.1.1.1.4"    ,
"1.4.1.1.2"      , "1.4.1.3"      ,  "1.4.1.3.3.1"    , "1.4.1.3.3.2"  ,  "1.4.1.3.4.1"    ,
"1.4.1.3.4.2"    , "1.4.1.3.4.3"  ,  "1.4.1.4.2.1"    , "1.4.2"        ,  "1.4.2.1"        ,
"1.4.2.2"        , "1.4.2.3"      ,  "1.4.2.3.1"      , "1.4.2.4"      ,  "1.4.2.5"        ,
"1.4.3"          , "1.4.4.1"      ,  "1.5.1"          , "1.5.1.2"      ,  "1.5.2"          ,
"1.5.2.1.1"      , "1.5.2.1.2"    ,  "1.5.2.1.2.1"    , "1.5.2.1.3.1"  ,  "1.5.2.1.4"      ,
"1.5.2.1.4.3.1"  , "1.5.2.1.4.4"  ,  "1.5.2.3"        , "1.5.2.3.1"    ,  "1.5.3"          ,
"1.5.4"          , "1.5.4.1"      ,  "1.5.4.1.2"      , "1.5.4.3.1"    ,  "1.5.4.3.2"      ,
"1.5.4.3.3"      , "1.5.4.3.4"    ,  "1.5.5.1"        , "1.5.6"        ,  "1.5.6.2"        ,
"1.5.6.2.1"      , "1.5.6.4"      ,  "1.5.6.5.4"      , "1.5.6.5.4.3"  ,  "1.6.1.1"        ,
"1.6.1.5"        , "1.6.2"        ,  "1.6.2.2.2"      , "1.6.2.3.2"    ,  "1.6.2.3.2.2.1"  ,
"1.6.2.3.2.3"    , "1.6.2.3.3"    ,  "1.6.2.3.4"      , "1.6.2.3.4.1.2.1", "1.6.2.3.4.1.3"  ,
"1.6.2.3.4.3"    , "1.6.2.3.5"    ,  "1.6.2.3.5.1.1"  , "1.6.2.3.5.2"  ,  "1.6.2.3.6"      ,
"1.6.2.3.6.2.1"  , "1.6.3"        ,  "1.6.3.1.2.2"    , "1.6.3.2.1"    ,  "1.6.4"          ,
"1.6.4.3"        , "1.6.4.4"      ,  "1.6.5"          , "1.6.6"        ,  "1.6.7"          ,
"1.6.7.1.5"      , "1.6.7.2.1"    ,  "1.6.7.2.1.1"    , "1.6.7.2.2.1"  ,  "1.6.7.2.2.2"    ,
"1.6.7.2.2.3"    , "1.6.7.2.3"    ,  "1.6.7.2.5"      , "1.6.7.2.6.2"  ,  "1.6.7.2.7"      ,
"1.6.7.3.1"      , "1.6.7.3.2.1"  ,  "1.7.1.1.2"      , "1.7.1.2.1"    ,  "1.7.1.3"        ,
"1.7.2"          , "1.7.3.1"      ,  "1.7.3.2"        , "1.7.4"        ,  "1.7.5"          ,
"1.7.5.2.2"      , "1.7.5.4"      ,  "1.7.6.1.1"      , "1.7.6.2.1.1"  ,  "1.7.7.1.1.2.1.1",
"1.7.7.1.1.2.1.3", "1.7.7.1.5"    ,  "1.7.7.1.5.1.1"  , "1.7.7.1.5.2"  ,  "1.7.7.2"        ,
"1.7.7.2.2"      , "1.7.7.2.2.1"  ,  "1.7.7.2.2.2"    , "1.7.7.4.1"    ,  "1.7.7.4.2.1.1"  ,
"1.7.7.4.2.2"    , "1.7.7.4.4"   
)


objects.latest("Op_en3861", code_name="makeGraph2") # [[Insight network]] makeGraph
objects.latest("Op_en3861", code_name="makeGraph2") # [[Insight network]] makeGraph
objects.latest("Op_en2382", code_name="update") # [[Discussion]] update_truth, update_relevance, infer_tree
objects.latest("Op_en2382", code_name="update") # [[Discussion]] update_truth, update_relevance, infer_tree
preprocess_arguments <- function(
  FILE_PATH, # Name of zip file at Opasnet
  file_list, # List of filenames in the zip file
  n, # Number of file to pick for argument analysis
  TRUTH_PRIOR = 0.3, # prior truth value without other information
  TRUTH_PRIOR_WITH_REFERENCE = 0.7, # prior truth value with credible reference
  SENSITIVITY_PRIME = 0.3, # sensitivity defend value without other information
  SENSITIVITY_PRIME_ATTACK = -0.5 # sensitivity attack value without other information
) {
  dfl <- opasnet.data(FILE_PATH, "opasnet_fi", unzip=file_list[n])
  dfl <- strsplit(dfl, "\n")[[1]]
  df_title <- gsub("Discussion Title: ", "", dfl[1])
  dfl <- dfl[-(1:2)]
  df <- data.frame(level = regexpr("\\. ",dfl))
  df$Item = substr(dfl,1,df$level-1)
  df$colour = toupper(substr(dfl,df$level+2,df$level+4))
  df$colour[1] <- "Value"
  df$text = substr(dfl,ifelse(df$level==2,4,df$level+7),999)
  df$level <- nchar(gsub("[0-9]","", df$Item))
  df$Object <- gsub("\\.[0-9]*$","", df$Item)
  df$seprime <- SENSITIVITY_PRIME * ifelse(df$colour=="PRO",1,-1)
  df$truth <- ifelse(grepl("http", df$text), TRUTH_PRIOR_WITH_REFERENCE, TRUTH_PRIOR)
  if(!"class" %in% colnames(df)) df$class <- "truth"
  df$class[1] <- "fact"
 
  return(list(df_title, df))
}


prepare_graph <- function(
prepare_graph <- function(
Rivi 86: Rivi 151:
   drop_gray = TRUE, # Drop gray branches?
   drop_gray = TRUE, # Drop gray branches?
   drop_higher_levels = 0, # Drop higher levels (0: drop nothing)?
   drop_higher_levels = 0, # Drop higher levels (0: drop nothing)?
   RELEVANCE_LIMIT = 0.2,
   RELEVANCE_LIMIT = 0.2, # value below which argument is considered irrelevant and dropped from graph
   TRUTH_LIMIT = 0.05,
   TRUTH_LIMIT = 0.05, # value below which argument is considered untrue and dropped from graph
   verbose=FALSE
   verbose=FALSE
) {
) {
   df$edge.penwidth <- abs(df$seprime*15)
   df$edge.penwidth <- abs(df$seprime*15)
   df$node.width <- df$truth
   df$node.width <- df$truth
   df$node.fontsize <- df$truth*15
   df$node.fontsize <- df$truth*20
   df$node.color <- ifelse(df$class=="truth","orange","blue")
   df$node.color <- ifelse(df$class=="truth","orange","blue")
   df$Context <- "Koronakide"
   df$Context <- "Koronakide"
Rivi 122: Rivi 187:
   if(drop_higher_levels>0) df <- df[df$level<drop_higher_levels,]
   if(drop_higher_levels>0) df <- df[df$level<drop_higher_levels,]
   return(df)
   return(df)
}
preprocess_arguments <- function(FILE_PATH, file_list, n) {
  dfl <- opasnet.data(FILE_PATH, "opasnet_fi", unzip=file_list[n])
  dfl <- strsplit(dfl, "\n")[[1]]
  df_title <- gsub("Discussion Title: ", "", dfl[1])
  dfl <- dfl[-(1:2)]
  df <- data.frame(level = regexpr("\\. ",dfl))
  df$Item = substr(dfl,1,df$level-1)
  df$colour = toupper(substr(dfl,df$level+2,df$level+4))
  df$colour[1] <- "Value"
  df$text = substr(dfl,ifelse(df$level==2,4,df$level+7),999)
  df$level <- nchar(gsub("[0-9]","", df$Item))
  df$Object <- gsub("\\.[0-9]$","", df$Item)
  df$seprime <- SENSITIVITY_PRIME * ifelse(df$colour=="PRO",1,-1)
  df$truth <- ifelse(grepl("http", df$text), TRUTH_PRIOR_WITH_REFERENCE, TRUTH_PRIOR)
  if(!"class" %in% colnames(df)) df$class <- "truth"
  df$class[1] <- "fact"
 
  return(list(df_title, df))
}
}


Rivi 150: Rivi 195:
   objects.latest("Op_en3861", code_name = "chooseGr")
   objects.latest("Op_en3861", code_name = "chooseGr")
}
}
TRUTH_PRIOR <- 0.3
TRUTH_PRIOR_WITH_REFERENCE <- 0.7
SENSITIVITY_PRIME <- 0.3
TRUTH_LIMIT <- 0.05
RELEVANCE_LIMIT <- 0.2
FILE_PATH <- "e/eb/Covid-19_dicussions.zip" # "~/discussion/corona/"


file_list <- c(
file_list <- c(
Rivi 176: Rivi 214:
)
)


df <- preprocess_arguments(FILE_PATH = FILE_PATH, file_list = file_list, n=8)
df <- preprocess_arguments(
  FILE_PATH = "e/eb/Covid-19_dicussions.zip", # "~/discussion/corona/"
  file_list = file_list,
  n=11,
  TRUTH_PRIOR = 0.3,
  TRUTH_PRIOR_WITH_REFERENCE = 0.7,
  SENSITIVITY_PRIME = 0.3,
  SENSITIVITY_PRIME_ATTACK = -0.5
)
 
if(df[[1]]=="Should COVID-19 Vaccines be Mandatory?") {
  df[[2]]$class[df[[2]]$Item %in% relevants] <- "relevance"
}
gr <- makeGraph(
gr <- makeGraph(
   ova=prepare_graph(
   ova=prepare_graph(
     df=infer_tree(df[[2]]),
     df=infer_tree(df[[2]]),
     drop_gray = TRUE, drop_higher_levels = 0, TRUTH_LIMIT = 0.2, RELEVANCE_LIMIT = 0.2, verbose=FALSE),
     drop_gray = TRUE,
    drop_higher_levels = 0,
    TRUTH_LIMIT = 0.2,
    RELEVANCE_LIMIT = 0.2,
    verbose=FALSE),
   formatted=formatted)
   formatted=formatted)
render_graph(gr, title=df[[1]])
render_graph(gr, title=df[[1]])
Rivi 198: Rivi 252:
</rcode>
</rcode>


* [http://fi.opasnet.org/fi-opwiki/index.php?title=Koronavirus&oldid=36857#Piirr.C3.A4_n.C3.A4kemysverkko_Kialon_koronakeskustelusta Arkistoitu aiempi pohdinta] perustuen mm. vedonlyöntisuhteisiin sekä totuus- ja relevanssifaktoreihin. Lisäksi käytettiin termistä P(B|A) nimeä sensitiivisyys, mikä on sinänsä oikein mutta ei ehkä hyödyllistä.
==== Hae kirjanmerkit Firefoxista ====
 
=== Hae kirjanmerkit Firefoxista ===


<rcode>
<rcode>
Rivi 508: Rivi 560:
* [https://www.hs.fi/mielipide/art-2000006525265.html Avoin tieteellinen keskustelu parantaisi hallinnon toimintaa - Mielipide | HS.fi]
* [https://www.hs.fi/mielipide/art-2000006525265.html Avoin tieteellinen keskustelu parantaisi hallinnon toimintaa - Mielipide | HS.fi]
* [https://masks4all.co/letter-over-100-prominent-health-experts-call-for-cloth-mask-requirements/ Over 100 prominent academics call for mask requirements - #Masks4All]
* [https://masks4all.co/letter-over-100-prominent-health-experts-call-for-cloth-mask-requirements/ Over 100 prominent academics call for mask requirements - #Masks4All]
=== Arkisto ===
* [http://fi.opasnet.org/fi-opwiki/index.php?title=Koronavirus&oldid=36857#Piirr.C3.A4_n.C3.A4kemysverkko_Kialon_koronakeskustelusta Arkistoitu aiempi pohdinta] perustuen mm. vedonlyöntisuhteisiin sekä totuus- ja relevanssifaktoreihin. Lisäksi käytettiin termistä P(B|A) nimeä sensitiivisyys, mikä on sinänsä oikein mutta ei ehkä hyödyllistä.

Versio 3. elokuuta 2021 kello 16.05




Koronavirus käsittelee SARS-COV-2-viruksen ja sen aiheuttaman COVID-19-taudin olennaisia piirteitä.

Perustelut

Data

Keskusteluja koronaviruksesta ja kovidista Kialo-alustalla, esim. Onko kovidipandemialla pysyviä vaikutuksia yhteiskuntaan?. Alla olevassa tiedostossa on 15 keskustelua aihepiiristä.

Covid-19_dicussions

Laskenta

Piirrä näkemysverkko Kialon koronakeskustelusta

Argumentaatio koskien koronarokotusten pakollisuutta.

Koronakide-hankkeeseen liittyen tehdään näkemysverkkoja koronarokotusten argumentaatiosta.

Laskennan logiikka on seuraava. Alkuperäiseen väitteeseen A kohdistuu argumentti B ja tähän kohdistuu argumentti C eli C → B → A. Prioritodennäköisyys, että A on totta on P(A), kun meillä ei ole muuta tietoa. Kun lisätään argumentti B, saadaan Bayesin kaavalla

P(A|B) = P(B|A)P(A)/P(B).

Sensitiivisyys (se) on testin (B) herkkyys eli todennäköisyys saada positiivinen tulos jos asia (A) on totta: se = P(B|A) = a/(a+c). Mitä parempi herkkyys, sitä vähemmän vääriä negatiivisia.

Spesifisyys (sp) on testin (B) tarkkuus eli todennäköisyys saada negatiivinen tulos jos asia (A) ei ole totta: sp = 1-P(B|¬A-) = 1 - b/(b+d). Mitä parempi tarkkuus, sitä vähemmän vääriä positiivisia. Herkkyys ja tarkkuus ovat tärkeitä mittareita, koska ne eivät riipu itse asian todennäköisyydestä.

Esimerkkinä laskennasta on oheinen taulukko.

A+ A- Sum
B+ 0.29 (a) 0.60 (b) 0.89
B- 0.01 (c) 0.10 (d) 0.11
Sum 0.30 0.70 1.00
se = a/(a+c) = 0.29/0.30 = 29/30

sp = b/(b+d) = 0.10/0.70 = 1/7

Mitä tietoja tarvitaan, jotta nelikenttä saadaan yksikäsitteisesti muodostettua? Jos tiedetään poikkisummat P(A) ja P(B), saadaan laskettua myös P(¬A) = 1-P(A) ja P(¬B) = 1-P(B). Yksiselitteisyyden saavuttamiseksi on tiedettävä vielä kolmas asia eli esimerkiksi P(B|A) eli herkkyys, joka kuvaa myös argumentin B relevanssia A:n suhteen eli kykyä muuttaa A:n posterioritodennäköisyyttä.

P(A) = a+c
P(B) = a+b
se = P(B|A) = a/(a+c) <=> a = se P(A), joten b = P(B) -se P(A)

Koska P(A|B) saadaan laskettua a/(a+b), matemaattinen määrittelyjoukko on 0 < P(A), P(B), se, a, b < 1 eli erityisesti 0 < P(B)-se P(A) < 1 eli (P(B)-1)/P(A) < se < P(B)/P(A). Koska P(B)<=1, alarajaehto ei tule koskaan vastaan vaan riittää, että se>0. Sen sijaan ylärajaehto voi hyvinkin olla <1 eli tulee joskus rajoittavaksi tekijäksi.

Argumentti on epärelevantti, jos P(A) = P(A|B) = a/(a+b) = se P(A)/P(B) eli se = P(B).

Jotta käyttäjän antamat parametrit olisivat aina määriteltyjä ja helppo ymmärtää, voitaisiin ottaa käyttöön seprime-parametri, joka saa arvoja välillä ]-1,1[, joka kattaa koko sensitiivisyyden määrittelyjoukon ja joka saa epärelevantin argumentin kohdalla arvon 0. Niinpä

se = P(B|A) = P(B) + seprime(min(1,P(B)/P(A)) - P(B)), jos 0 <= seprime < 1
se = P(B|A) = P(B) + seprimeP(B), jos -1 < seprime < 0.

Kuitenkin meitä kiinnostaa relevanssiargumentin C vaikutus A:han B:n kautta. Koska P(B|A) riippuu A:sta, relevanssivaikutusta ei voida suoraan laskea C:n ja B:n tietojen avulla. Sen sijaan voidaan laskea seprime(B), jos ajatellaan seprime(C):n voimistavan tai heikentävän vaikutusta tietyn osuuden verran. C-argumentin todennäköisyys vaikuttaa siihen voimakkuuteen, jolla C muuttaa seprime(B):tä.

seprime(B|C) = seprime(B) + seprime(C) P(C)(1-seprime(B)), jos seprime(C)>=0
seprime(B|C) = seprime(B) + seprime(C) P(C) seprime(B), jos seprime(C)<0

Edellä sanottu pätee, jos seprime(B) >= 0, muussa tapauksessa pitää ensin laskea yhtälöt seprime(B):n itseisarvolla ja palauttaa negatiivinen etumerkki jälkikäteen. Tämä johtuu siitä, että argumenttiin B kohdistuvat argumentit voivat lisätä tai vähentää sen relevanssia, mutta ne eivät voi vaihtaa hyökkäävää argumenttia puolustavaksi eikä päinvastoin.

Argumentin vaikutus keskusteluun lasketaan käyttäen esimerkiksi seuraavia oletusarvoja (näiden toimivuutta on testattava käytännössä):

  • Argumentin herkkyys P(B|A) lasketaan relevanssitekijän (seprime) avulla: oletuksena 0.3 jos argumentti puolustaa ja -0.3 jos hyökkää
  • Argumenttien totuuden prioritodennäköisyys P(A) = 0.7 jos on uskottava viite, 0.3 jos viite puuttuu

Näiden avulla lasketaan argumentin posterioritodennäköisyys:

P(A|B) = P(B|A)P(A)/P(B) = se P(A)/P(B)

Jos argumentti C on relevanssityyppiä, se vaikuttaa argumentin B relevanssiin muuttamalla tekijää se = P(B|A) epäsuorasti seprimen kautta

+ Näytä koodi

Hae kirjanmerkit Firefoxista

+ Näytä koodi

Katso myös

Arkisto

  • Arkistoitu aiempi pohdinta perustuen mm. vedonlyöntisuhteisiin sekä totuus- ja relevanssifaktoreihin. Lisäksi käytettiin termistä P(B|A) nimeä sensitiivisyys, mikä on sinänsä oikein mutta ei ehkä hyödyllistä.